hbase region分配,RS下线处理

47 篇文章 0 订阅
36 篇文章 0 订阅

RS下线的regionassign

上面在RS启动部分已经提到过,RSzk中的地址注册为SESSION过期自动清理的路径(ephemeral)

master中通过RegionServerTrackerrs进行监控,

rszksession过期时间内没有向zk发送心跳。表示rs已经下线,会触发RegionServerTracker.nodeDeleted

publicvoidnodeDeleted(Stringpath){

if(path.startsWith(watcher.rsZNode)){

StringserverName= ZKUtil.getNodeName(path);

.........此处省去一些注释

ServerNamesn= ServerName.parseServerName(serverName);

如果此server本身在ServerManageronlineServers列表中不存在.不做处理

if(!serverManager.isServerOnline(sn)){

.........此处省去一些注释

return;

}

RegionServerTracker.onlineServers列表中移出此server

remove(sn);

通过Servermanager.expireServerserver执行下线操作。

首先从ServerManager.onlienServers列表中移出此server,同时把server添加到deadServers列表中。

检查是否是clustershutdown,如果是,不做rs的下线处理,否则执行下面流程。

检查server中是否包含metaregion,如果包含metaregion,通过MetaServerShutdownHandler处理下线操作

否则通过ServerShutdownHandler处理下线操作。

this.serverManager.expireServer(sn);

}

}

 

ServerShutdownHandleruser region的重新分配流程:

1.通过hbase.master.distributed.log.replay配置是否分布式日志重播,默认为false

2.通过hbase.master.log.replay.wait.region.timeout配置logreplay的等待超时时间,默认为15000ms

3.检查是否包含metaregion,此处不分析此部分代码。

4.得到metaregion的路径,并通过MetaReadermeta中得到下线的RS的所有regions列表。

5.执行日志的split处理,不分析。

if(this.shouldSplitHlog){

LOG.info("Splittinglogs for " + serverName+" before assignment.");

if(this.distributedLogReplay){

LOG.info("Markregions in recovery before assignment.");

Set<ServerName>serverNames=newHashSet<ServerName>();

serverNames.add(serverName);

this.services.getMasterFileSystem().prepareLogReplay(serverNames);

}else{

this.services.getMasterFileSystem().splitLog(serverName);

}

am.getRegionStates().logSplit(serverName);

 

6.通过AssignmentManager.assign(list)重新分配所有的region.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值