Hadoop之 NameNode HA(热备)

本文深入解析HDFS中NameNode高可用(HA)机制,包括主从NameNode状态同步、防止脑裂现象、自动故障转移工作原理,以及Zookeeper和ZKFailoverController在HA中的关键作用。

1.NameNode HA的技术有以下几个难点:

  1. 主NameNode(active)和从NameNode(standby)要状态同步
  2. 防止脑裂(split-brain)。顾名思义,就是双机热备的系统中,两个主节点突然失去联系,这时,两个节点会同时以为对方出现故障,会本能地争抢资源,就像脑裂人一样。即隔离(Fence),即同一时刻仅仅有一个 NameNode 对外提供服务
  3. 在准备切换时,对上层应用要做到无感知
  4. 必须保证两个 NameNode 之间能够 ssh 无密码登录。

2.NameNode HA实现

NameNode HA包括俩个NameNode,分别是主(active)与从(standby),另外还有Zookeeper Failover Controller(ZKFC),Zookeeper,共享编辑日志(share editlog)。集群启动后,一个NameNode处于主状态,并提供服务,处理客户端和DataNode的请求,并把编辑日志写到本底和共享日志(可以是NFS,QJM等)中。另外一个NameNode处于从(standby)状态,它启动的时候加载FSI文件,然后周期性的从共享编辑日志中获取编辑日志,保持与主NameNode的状态同步。为了实现从节点在主节点挂掉后迅速提供服务,需要DataNode同时向俩个NameNode汇报。因为NameNode启动中最费时的工作是处理粗有DataNode的块报告(block report)。为了实现热备,增加FailoverController和ZK以及FailoverController与ZK通信,通过ZK选择主节点,FailoverController通过RPC让NameNode转换为主或从。

3.总结

那么来看看前面提高的3个问题。第一个是状态同步的问题,从节点通过共享存储周期性获取编辑日志来保持状态,并且DataNode同时向俩个NameNode发送块报告。第二个是防止脑裂的问题,一旦主NameNode节点挂掉,那么共享存储会立即进行隔离(fencing),确保只有一个NameNode能响应客户端请求。让访问从节点的客户端直接失败。然后通过若干次的失败后尝试连接新的NameNode,对客户端的影响是增加一些重试事件,但是对应用来说几乎感觉不到。
值得注意的是,该种架构其实将单点故障转移到了共享存储,Cloudera采取的是其良机的高可用共享存储QJM(Qurom Journal Manager)实现。

4.Zookeeper Failover Controller

需要一个状态管理功能模块,实现了一个zkfailover,常驻在每一个namenode所在的节点每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。

5. HDFS-HA自动故障转移工作机制

如何配置部署HA自动进行故障转移。自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程,如图3-20所示。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能
1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
2)现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:
1)健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
2)ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
3)基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值