NameNode中的高可用(HA)的实现

Namenode的HA主要包括:主备切换、共享日志储存。(可以拓展Zookeeper的选举算法,比如利用了强一致性)

1、在集群中,存在多个 namenode,这些 namenode处于 active或者 standby状态。

2、共享日志存储: active向共享文件系统写入日志文件, standby从共享文件系统读取日志与 active保持同步。共享文件系统一般采用的是 Quorum Journal(群体日志)设计方案。这个方案中主要涉及 JournalNode(JN)和 Quorum Journal Manager(QJM)。QJM通过调用RPC与JN集群进行通信,将日志写入到JN,同步到磁盘中。(这里面涉及一个预防脑裂的隔离操作,内置 fencing机制)。基本原理就是用2N+1台JN存储 EditLog,,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。当然这个算法所能容忍的是最多有N台机器挂掉,如果多于N台挂掉,这个算法就失效了。这个原理是基于 Paxos算法。

3、主备切换:每一个 namenode运行着轻级的ZKFC即 ZKFailoverController(相当于zookeeper的客户端)。ZKFC主要包括两部 HealthMonitor和 ActiveStandbyElector.HealthMonitor启动内部线程定时调用 NameNode的 HAServiceProtocol RPC接口( monitorHealth和 getServiceStatus)),监控 NameNode的健康状态并向ZKFC反馈;如果检测到 namenode 1健康状态发生变化,ZKFC调用 ActiveStandbyElector与 zookeeper集群交互完成自动的主备选举,之后回调ZKFC的相应方法与 namenode:进行RPC通信,完成主备切换。

在这里插入图片描述
过程描述:

  1. HealthMonitor初始化完成之后会启动内部的线程来定时调用对应NameNode的HAServiceProtocol RPC接口,对NameNode的健康状态进行检测。
  2. HealthMonitor如果检测到NameNode的健康状态发生变化,会回调ZKFailoverController注册的相应方法进行处理。
  3. ZKFailoverController判断需要进行主备切换。
  4. 使用ActiveStandbyElector来进行自动的主备选举。
  5. 返回Zookeeper选举结果。
  6. ActiveStandbyElector返回主备状态。
  7. ZKFailoverController调用对应NameNode的HAServiceProtocol RPC 接口的方法将NameNode转换为Active状态或Standby状态。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值