ZKFailoverController(ZKFC)是一个新的组件,它是一个ZooKeeper客户端,它还监视和管理NameNode的状态。运行NameNode的每台机器也运行ZKFC,他们之间是一对一的关系。
ZKFC负责:
健康监测-
ZKFC定期使用健康检查命令调用其本地NameNode。只要NameNode以健康的状态及时响应,ZKFC就会认为节点是健康的。
如果节点已崩溃、冻结或以其他方式进入不健康状态,则健康监视器将将其标记为不健康。ZooKeeper会话管理
当本地NameNode健康时,ZKFC在ZooKeeper中举行一个开放的会话。
如果本地NameNode是活动的,它也持有一个特殊的“锁”。此锁使用ZooKeeptor对“临时”节点的支持;如果会话过期,则将自动删除锁节点。
- 基于ZooKeeper的选举
如果本地NameNode是健康的,而ZKFC认为目前没有其他节点持有锁,
它本身就会尝试获取锁。如果它成功了,那么它已经“赢得了选举”,并负责运行故障转移以使其本地NameNode活动。故障转移过程类似于上面描述的手动故障转移:首先,如果需要,对前一个活动进行隔离,然后本地NameNode转换到活动状态。