HMaster的failover 流程

HBase的master重启时走的是failover流程。

 

由于在HMaster挂掉的瞬间有很多正在执行的事务,如:

 

1.  某个table可能正在disable到一半,master挂掉

 

2.  create table到一半,master挂掉

 

3.  move 动作到一半,master挂掉当

 

master挂掉的时候,这些动作是不一致的,即可能出于一个中间状态。如某张表的某些region上线,某些却无法访问。

 

更有甚者在master1挂掉期间,又发生了regionserver的宕机事件。

 

当master重启时需要把事务或者继续完成或者回滚,达到最终一致的效果。把hmaster的failover分成两部分来理解:

 

1.master挂掉期间没有regionserver挂掉这种情况比较简单。

 

1.1.扫描Meta表将所有region加入master内存中,除了以下几种情况:

 

1.1.1 region的server address不存在,发生在create table时候master挂掉,此时meta表中值写了该region

 

的info。(对于这种情况90似乎也没有好的解决办法,只能是在meta表中有垃圾信息存在)

 

1.1.2 region所在的table是disabling或是disabled(disabling是disable table到一半master挂掉导致zk状态

 

一直没有更新,disabled说明disabled已经成功了,region都已经关闭了也无需加入master内存)

 

1.1.3 父region是不上线的

 

1.2.找到zk上面所有unassigned节点进行如下处理(任何对region的ddl操作都是通过zk来保持一致性的,因此需要对

 

zk上面的节点进行整理和删除等)

 

1.2.1 如果RIT中有该节点的region(正常hmaster启动的时候rit是空的,但是有一种情况是,此时有RS挂了,要

 

处理ssh事件,会将该rs的region重新分配加入到rit中),因此对于rit已有的region就不需要再重新加入了

 

1.2.2 对于这些在rit中node节点数据

 

  如果是M_ZK_REGION_CLOSING,说明有regionserver正在close该region,rs后续会更新zk上的信息的,故只需将

 

其加入RIT中即可

 

  如果是RS_ZK_REGION_CLOSED,说明rs已经将region关闭了,但是有可能master未收到这个事件就挂了,所以要

 

将其加入RIT,然后继续调用closedRegionhandler.process来清除master内存数据

 

  如果是RS_ZK_REGION_FAILED_OPEN,说明在open region时候出错,此时rs会关闭region,收到此事件master

 

一样加入RIT,并ClosedRegionHandler .process

 

  如果是M_ZK_REGION_OFFLINE,此时也要ClosedRegionHandler .process,因为可能和rs的rpc通信尚未发出请

 

求就挂了,zk节点就一致不会更新,该region就不会再分配。

 

  如果是RS_ZK_REGION_OPENING,region正在被rs打开,rs会更新zk节点,只要加入rit即可

 

  如果是RS_ZK_REGION_OPENED,region已经打开,但该事件可能未被master收到,故要openedregionhanlder

 

更新master内存

 

以上如果有region处于disabling和disabled的状态的话是不会再open region的

 

注:processfailover以后master会对disabling的table重新disable。这样可防止region状态不一致的现象

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值