同步元数据,防止脑裂




主备切换:


1. hadoop内部为每个namenode进程另外配置一个进程,叫DFSZKFailoverController(基于zookeeper的失败切换的控制器),简称zkfc。

2.将zkfc独立出来而不是在namenode程序内部实现的目的:实现可配置,可插拔,若用户对此失败切换机制不满意可以自己修改(在配置文件指定自定的失败切换控制器即可)。


zkfc各自监听各自的namenode,感知namenode进程是否存在,存在时还能感知namenode的状态(一个active,一个或多个standby),zkfc一旦感知自己监听的namenode状态异常则通知其他zkfc,其余zkfc则选举一个切换成active状态。(zookeeper的通信原理,监听)



同步元数据:(镜像文件中的元数据和内存中的元数据之间的差异就是几个未写入镜像文件的edits操作记录文件)


1.standby状态的namenode需要与active状态的namenode存储的元数据时刻保持同步,以防active的namenode挂机时standby的namenode数据不丢失。


2. 利用磁盘持久化文件(镜像文件)和edits操作日志实现数据同步:




qjournal读取edits文件与本地的元数据合并,从而达到与active的namenode的元数据保持一致。同时,standby的namenode会为active的namenode做checkpoint,即定时将自己和qjournal同步好的本地镜像文件上传给active,并替换active本地的镜像文件。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互不相干,只是他们部署在相同的集群上,仅此而已。一般只有非常大的公司才会用得到联邦机制。