一、原理
HDFS中NameNode等的HA是基于ZooKeeper实现的。它应用了ZooKeeper集群的如下功能或特性:
1、只要半数以上节点还存活,就继续能对外提供服务;
2、ZooKeeper通过Paxos算法提供了leader选举功能,其它follower learn leader;
3、ZooKeeper提供了watcher机制,只要ZooKeeper上znode增减,或内容发生变化,或其子znode有增减,客户端都可以通过注册的watcher获得通知;
4、ZooKeeper提供了持久化节点和临时节点,尤其是临时节点EPHEMERAL,其在ZooKeeper客户端连接断掉后,会自动删除。
正是基于ZooKeeper的上述特性,HDFS的NameNode实现了HA,NameNode的状态大致可分为Active和Standby两种,NameNode竞争在ZooKeeper指定路径上注册临时节点,将自己的host、port、nameserviceId、namenodeId等数据写入节点,哪个NameNode争先写入成功,哪个就成为Active NameNode。然后,会有后台工作线程周期性检查NameNode状态,并在一定条件下(比如Active NameNode节点发生故障等)发生竞选,由NameNode再去竞争,实现故障转移和状态切换。
上述就是HDFS NameNode HA实现的大体思路。而HDFS NameNode HA的架构和实现细节是怎么样的?下面我来介绍下。
二、实现
首先上一张Hadoop HDFS NameNode HA的设计图