HDFS的HA

HDFS HA机制解析

参考文献:
HDFS HA 原理
HDFS HA: 高可靠性分布式存储系统解决方案的历史演进

由来

  虽然namenode的联盟机制可以减小访问压力,同时当有namenode节点挂掉了之后,也能减小一部分的损失,但是依然无法解决单点故障问题。

  所以就有了HA机制。简单说就是一个namenode节点有几个替身,他们的edit日志文件相同,当一个节点挂掉了,另一个立马就能顶上去,继续执行集群任务。

共享存储系统

  节点的最新状态是存储在edit日志文件中的,edit日志文件是分段存储的,称为segment。HDFS默认使用QJM技术来保证多个节点的edit日志文件同步的。

  所谓QJM技术,来源于paxos算法,只有过半成功写入,才算写入成功。由多个称为journal node的节点构成。

  active namenode在完成了对HDFS的更新操作后,会同时将这次操作写入本地和QJM中的edit文件里。standby namenode定期从QJM中读取edit文件,达到维持集群状态同步的效果。

  同时,standby namenode会定期对内存中的文件系统镜像做checkpoint,生成新的fsimage文件,并将其发送给activate namenode,用来更新本地的fsimage文件。

  当发生主备切换的时候,QJM中的数据可能是不同步的,当standby namenode切换为active状态后,首先需要对QJM中的数据进行同步。

  简单说就是所有的journal node将自己最新的起始事务id发送给active namenode,由它选出最大值,并发送回去,然后QJM根据返回的最大id事务对所有journal状态进行更新。

主备切换的过程:

  1. ZKFC启动,创建HealthMonitor和ActivateStandbyElector两个组件。
  2. HealthMonitor周期调用namenode的HAServiceProtocal RPC接口,判断namenode当前的状态。
  3. 如果发现namenode的健康状态发生了变化,调用ZKFC的回调方法。
  4. 如果ZKFC判断需要进行主备选举,则通知ActiviteStandbyElector进行主备选举。
  5. ActiviteStandbyElector配合ZK完成选举后,通知ZKFC当前节点是主节点还是从节点。
  6. ZKFC调用namenode的HAServiceProtocal RPC接口,完成节点的状态转换。

脑裂问题

  脑裂问题的解决办法是,当datanode向新选举出的namenode发送心跳信息时,新选举出的namenode返回自己的状态和序列号。此时如果老的namenode恢复了,再向datanode发送自己的状态序列号时,就会匹配不上,datanode就会拒绝听从这个namenode的命令,从而达到防止脑裂的效果。

  可以通过ssh登陆到老的namenode上,直接通过kill命令结束它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值