Hadoop之 NameNode HA(热备)

编程入门 行业动态 更新时间:2024-10-26 00:32:08

<a href=https://www.elefans.com/category/jswz/34/1767604.html style=Hadoop之 NameNode HA(热备)"/>

Hadoop之 NameNode 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状态。

更多推荐

Hadoop之 NameNode HA(热备)

本文发布于:2023-07-28 17:39:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1265242.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Hadoop   NameNode   HA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!