1,Hadoop-HA为什么存在?
正式引入Ha机制是从Hadoop2.0开始的。
因为集群中的Namenode存在单点故障,如果只针对于一个Namenode的 集群,Namenode宕机或者发生故障,就会导致整个集群瘫痪。除非我们 的Namenode恢复正常,否则集群将会一直瘫痪.
Namennode主要在以下两个方面影响hdfs集群
a.Namennode发生意外,如硬件方面的损坏
b.Namenode机器需要重启,包括软件,硬件升级,此时集群也处于瘫痪 状态
2.我们如何解决这种问题?
Hadoop提供了Hdfs的高可用方案:通过增加Namenode数量的方式来解 决 问题,但是要注意,两台Namenode在同一个集群的话,一个一定要处 于active状态(对外提供服务,活跃状态),另一个处于standby状态(不 对外提供服务),这台不对外提供服务的Namenode就是用于同步active namenode 的状态,进行完整备份,预防active namenode发生意外宕机.
一旦active name意外宕机,standby可以很快替代active namenode工作.
3. HDFS-HA注意事项
a.管理元数据
两台namenode中各自保存都一份元数据.
只有active namenode可以对edits日志文件进行写入操作,但是两个 namenode都可以读取edits
因为edits是共享的,所以要放在一个共享存储中管理.
b.必须保证两个Namenode之间可以无密码登录(也就是配置ssh免密登 录)
c.需要状态管理
每个namenode里面都有个zkfailover负责监控,用zookeeper进行状态 标识,如果发生状态切换,由zkfailover负责切换
d.要保证在同一时刻只能有一个active namenode。
4. HDFS-HA自动故障转移工作机制
HDFS-HA自动故障转移增加了两个新组件:ZooKeeper和 ZKFailoverController.
A. ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客 户端故障的高可用服务。
HA的自动故障转移依赖于ZooKeeper的以下功能:
故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久 会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知 另一个NameNode需要触发故障转移。
现役NameNode选择:
现役Namenode选择:ZooKeeper提供了一个机制保证同一时间只有一 个active namenode, 如果目前现役NameNode崩溃,Zookeeper会 给standby namenode一个特殊的排外锁以表明它可以成为active namenode。
B.ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监 视和管理NameNode的状态。每个运行NameNode的主机也运行了一 个ZKFC进程
ZKFC负责:
健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的 NameNode,只要该NameNode及时地响应回复健康状态ZKFC认为 该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健 康监测 器标 识该节点为非健康的。
ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个 在ZooKeeper中打开的会话。如果本地NameNode处于active状态, ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点 的 支持,如果会话终止,锁节点将自动删除。
基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发 现 没 有其它的节点当前持有znode锁,它将为自己获取该锁。如果成 功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地 NameNode为active。故障转移进程与前面描述的手动故障转移似, 首先如果必要保护之前的现役NameNode,然后本地NameNode 转 换为active状态。