HDFS中自动化的failover故障转移需要增加两个新的组件:
一个是Zookeeper quorum(仲裁),
另一个是ZKFailoverController进程(简称ZKFC)。
Apache Zookeeper是一个高可用的服务,对于小规模数据协调,通知客户端数据变化,监控客户端失败。
自动failover的实现是基于ZK以下的作用:
Failure detection
集群中的每个NameNode机器在ZK上保持持久化会话。如果机器崩溃,ZK会话过期,通知其它NameNode有一个failover将被触发。
Active NameNode election
ZK提供一个简单机制,选举出唯一的一个节点作为active。如果当前的active NameNode崩溃,另一个节点可能在ZK持有特定的互斥型锁,表名它将成为下一个active。
ZKFC是一个ZK客户端,也监控和管理NameNode的状态。NameNode运行的所在的每个机器也要运行一个ZKFC。
ZKFC负责:
健康监测
ZKFC定期使用健康检查命令调用其本地NameNode。只要NameNode以健康的状态及时响应,ZKFC就会认为节点是健康的。
如果节点已崩溃、冻结或以其他方式进入不健康状态,则健康监视器将将其标记为不健康。
ZooKeeper会话管理
当本地NameNode健康时,ZKFC在ZooKeeper中举行一个开放的会话。
如果本地NameNode是活动的,它也持有一个特殊的“锁”。此锁使用ZooKeeptor对“临时”节点的支持;如果会话过期,则将自动删除锁节点。
基于ZooKeeper的选举
如果本地NameNode是健康的,而ZKFC认为目前没有其他节点持有锁,
它本身就会尝试获取锁。如果它成功了,那么它已经“赢得了选举”,并负责运行故障转移以使其本地NameNode活动。故障转移过程类似于上面描述的手动故障转移:首先,如果需要,对前一个活动进行隔离,然后本地NameNode转换到活动状态。