hbase 节点宕机处理流程
滴水穿石
934
2 分钟
- region server宕机后,zk检测到节点超时,将/hbase/rs/对应节点删除;
- HMaster有一个RegionServerTracker对象,监控zk上/hbase/rs目录下的结点,HMaster触发RegionServerTracker的nodeDeleted(),调用ServerManager的expireServer逻辑,对于非meta region(0.96后只有一个meta region),提交一个ServerShutdownHanlder的任务给内部线程池处理,任务的处理逻辑在handler的process()中。
- 如果开启了distributed log replay特性,那么在zk上建立一系列结点/hbase/recovering-regions/regionEncodeName/serverName,其中regionEncodeName结点内容为该region的last flush sequence id,即这个sequence id之前的所有数据都已经flush到磁盘上产生了HFile文件,这部分数据不需要进行回放。serverName结点的内容为宕机的region server上的last flushed sequence id,即所有region中最大的last flush sequence id。
- 将宕掉server上的region assign通过round robin的方式assign其他的活着的region server,
- 提交一个LogReplayHandler的任务给内部线程池,这个任务内部就是进行split log的准备工作,将hdfs上该region server的log改名,加上-splitting后缀,变成hbase.rootdir/WALs/serverName-splitting,
- HMaster的SplitLogManager在zk上建立节点,路径/hbase/splitWAL/对上面改写后的log路径的encode。
- HMaster等待log被其他region server上的SplitLogWorker split完成,
- 将一开始建立的一系列节点/hbase/recovering-regions/regionEncodeName/serverName删掉,然后将-splitting目录删除.
#{ isset image }
#{image}
#{ end }
#{title}
#{ isset description }
#{description}
#{ end }
#{content}
#{ isset categories }
#{ end }
#{ isset tags }
#{ end }