Hadoop HA原理详解

一、手动切换:

1、一个NanmeNode进程处于Acrive状态,另一个NameNode处于Standby状态.Active的NameNode负责处理客户端的请求.
2、Active的NN修改了元数据之后,会在JNs的半数以上的节点上记录这个日志。Standby状态的NameNode会监视任何对JNs上edit log的更改。一旦edits log出现更改,Standby的NN就会根据edits log更改自己记录的元数据。
Hadoop HA原理详解
3、当发生故障转移时,Standby主机会确保已经读取了JNs上所有的更改来同步它本身记录的元数据,然后由Standby状态切换为Active状态。
4、为了确保在发生故障转移操作时拥有相同的数据块位置信息,DNs向所有NN发送数据块位置信息和心跳数据。
5、JNs只允许一台NameNode向JNs写edits log数据,这样就能保证不会发生“脑裂”。

二、自动切换

Hadoop HA原理详解
1、添加zookeeper集群,在每个NameNode的主机上还各自运行着一个zkfc进程,zkfc就是zookeeper的客户端。
2、zkfc要和zookeeper集群保持长连接,心跳;在集群启动的时候,两个NameNode均处于standby状态。
3、两个NameNode的zkfc要向zookeeper集群抢占一个临时节点,该临时节点保存了主NameNode的信息,哪个抢先zkfc创建成功,则还zkfc所在的NameNode就成为activeNameNode;备份的NameNode上的zkfc监控主NameNode创建的临时节点。
4、一旦主NameNode宕机,zkfc不能和zookeeper集群保持心跳链接,临时节点消失。
5、备份NameNode上的zkfc要向zookeeper集群抢占临时节点,如果抢占成功,备份NameNode将变成主NameNode。

(在备份NameNode成为主NameNode之前,要和原来的NameNode通信,确保原来的NameNode不能提供正常服务。)