一、HDFS namenode HA需要实现:HA主备切换, 同步元数据,防止脑裂

主备切换:
1. hadoop内部为每个namenode进程另外配置一个进程,叫DFSZKFailoverController(基于zookeeper的失败切换的控制器),简称zkfc。
2.将zkfc独立出来而不是在namenode程序内部实现的目的:实现可配置,可插拔,若用户对此失败切换机制不满意可以自己修改(在配置文件指定自定的失败切换控制器即可)。
3. zkfc各自监听各自的namenode,感知namenode进程是否存在,存在时还能感知namenode的状态(一个active,一个或多个standby),zkfc一旦感知自己监听的namenode状态异常则通知其他zkfc,其余zkfc则选举一个切换成active状态。(zookeeper的通信原理,监听)

同步元数据:(镜像文件中的元数据和内存中的元数据之间的差异就是几个未写入镜像文件的edits操作记录文件)
1.standby状态的namenode需要与active状态的namenode存储的元数据时刻保持同步,以防active的namenode挂机时standby的namenode数据不丢失。
2. 利用磁盘持久化文件(镜像文件)和edits操作日志实现数据同步:
   edits文件只有在active状态的namenode上才会进行写操作,edits文件不仅写入本地镜像文件,同时新增一个qjournal的日志管理系统(也是利用zookeeper实现的),让edits在写入本地镜像文件的同时也写入到qjournal的各个元数据镜像文件副本里面,以实现多台机器上的元数据同步。
 同时,stanby状态的namenode会定时去 qjournal读取edits文件与本地的元数据合并,从而达到与active的namenode的元数据保持一致。同时,standby的namenode会为active的namenode做checkpoint,即定时将自己和qjournal同步好的本地镜像文件上传给active,并替换active本地的镜像文件。namenode冷启动时加载镜像文件的元数据。

防止脑裂:
active的namenode因为某些原因暂时停止服务(例如:JVM 做full GC时,会stop the world),此时zkfc请求namenode时namenode不会响应,zkfc认为namenode死了则通知其他zkfc,其他zkfc则需要切换状态,在zkfc切换active状态前,zkfc会发送指令(例如 ssh kill掉假死的namenode),并等待响应,如果超时(超时时间可以配置)还未收到响应,  则会调用用户自定义的一个shell程序,如果返回成功则切换,否则不切换。(例如调用/root/shell/ensure.sh,脚本可以直接写bin/true)

二、yarn的HA:只是单纯的状态切换,在resourceManager程序内部实现,无需单独出来。所以配置yarn的高可用只需配置多个rsourceManager即可。

三、FEDERATION  联邦机制:
一个hdfs集群上可以有多个nameservices()讲解在****视频day11-HA-HIVE/03.HA集群部署实施----及界面观察第9分钟左右
hdfs的联邦机制:有多对互不相干的nameservices(namenode),例如ns1、ns2等,它们管理着各自的datanode互不相干,只是他们部署在相同的集群上,仅此而已。一般只有非常大的公司才会用得到联邦机制。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐