4_HDFS的HA机制(ZKFC、QJM)

2020/12/14 sunhaiqi@bonc.com.cn文章目录HDFS的HA机制(ZKFC、QJM)一、HA(HighAvailable)概述二、HDFS-HA工作机制2.1、工作要点2.2、工作机制2.3、运行模块2.3.1、ZKFailoverController(DFSZKFailoverController):2.3.2 、HealthMonitor:2.3.3 、ActiveStandbyElector:2.3.4 、FailoverController:2.4、系统架构2.5、线程模型
摘要由CSDN通过智能技术生成

2020/12/14 sunhaiqi@bonc.com.cn

HDFS的HA机制(ZKFC、QJM)

一、HA(HighAvailable)概述

(1)所谓HA,即高可用(24小时不中断服务)

(2)实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。

(3)Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。

(4)NameNode主要在以下两个方面影响HDFS集群

  • NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启

  • NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用

(5)HDFS HA功能通过配置Active/Standby两个nameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

二、HDFS-HA工作机制

​ 通过双namenode消除单点故障

2.1、工作要点

(1)元数据管理方式需要改变:

  • 内存中各自保存一份元数据
  • Edits日志只有Active状态的namenode节点可以做写操作,standby状态的节点可读
  • 两个namenode都可以读取Edits日志
  • 共享的edits放在一个共享存储中管理(QJM和NFS两个主流实现方法)、

(2)ZKFC: ZooKeeperFailoverController ,是Hadoop中通过ZK实现FC功能的一个实用工具,作为一个ZK集群的客户端,用来监控NN的状态信息,在每个NN节点运行 ,功能如下:

  • Health monitoring :zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。
  • ZooKeeper Session Management :当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个”ephemeral”的节点作为锁,一旦本地NN失效了,那么这个节点将会被自动删除。
  • ZooKeeper-based election :如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。

(3)必须保证两个NameNode之间能够ssh无密码登录。

(4)隔离(Fence),即同一时刻仅有一个namenode对外提供服务

2.2、工作机制

(1)自动故障转移为HDFS部署增加了两个新组件:Zookeeper和ZKFailoverController(ZKFC)进程。zookeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转转移依赖于Zookeeper的以下功能:

  • 故障检测:集群中的每个NameNode在Zookeeper中维持了一个持久会话,如果机器崩溃,Zookeeper中的会话将会终止,zookeeper通知另一个Name Node需要触发故障转移
  • 现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从Zookeeper获得特殊的排外锁以表明它因该成为现役nameNode

(2)ZKFC是自动故障转移中的另一个新组件,是Zookeeper的客户端,也监视和管理nameNode的状态。每个运行namenode的主机也运行了一个ZKFC进程,ZKFC负责:

  • 健康检测:ZKFC使用一个健康检查命令定期的PING在与之在相同主机的NameNode,只要该NameNode及时的回复健康状态,ZKFC认为该节点就是健康的,如果该节点崩溃,冻结过着进入了不健康的状态,健康检测器标识该节点是非健康的。
  • Zookeeper会话管理:当本地的nameNode是健康的,ZKFC保持一个在Zookeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了Zookeeper对短暂节点的支持。如果会话终止,锁节点将自动解除

(3)基于Zookeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其他的节点当前持有znode锁,他将为自己获取该锁。如果成功则他已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前现役NameNode,然后本地nameNode转换为active状态。如果一个Active因HealthMonitor监控到状态异常,这里会作出判断,先通过Fencing功能关闭它(确保关闭或者不能提供服务),然后在ZK上删除它对应ZNode。发送上述事件后,在另外一台机器上的ZKFC中的ActiveStandbyE

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值