【整体设计】
NN(Namenode)的HA机制主要依靠zkfc完成,zkfc在NN所在节点以独立进程的方式运行。其内部主要由主控模块(ZKFailoverController)、健康检测模块(HealthMonitor)、主从选举模块(ActiveStandbyElector)三个模块协同实现。
zkfc进程启动时,首先会创建ZKFailoverController,负责其余两个模块回调事件的处理。
健康检测模块通过定时向NN发送rpc请求进行健康状态的监测。
主从选举模块封装了对zookeeper的处理逻辑,包括tcp连接的建立、创建节点、watch节点的变化等。
当NN的健康状态发生变化时,健康检测模块会回调通知主控模块,进而触发选举模块进行选举或者退出选举。
同样,当选举模块检测到zookeeper上节点的状态变化时,会自主触发进行选举,然后回调通知主控模块,最后通过rpc通知NN成为active或standby。
zkfc的启动选举流程如下图所示:
zkfc启动后,首先构造选举模块,并向zookeeper建立连接