hbase 节点宕机处理流程

hbase 节点宕机处理流程

  1. region server宕机后,zk检测到节点超时,将/hbase/rs/对应节点删除;
  2. HMaster有一个RegionServerTracker对象,监控zk上/hbase/rs目录下的结点,HMaster触发RegionServerTracker的nodeDeleted(),调用ServerManager的expireServer逻辑,对于非meta region(0.96后只有一个meta region),提交一个ServerShutdownHanlder的任务给内部线程池处理,任务的处理逻辑在handler的process()中。
  3. 如果开启了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。
  4. 将宕掉server上的region assign通过round robin的方式assign其他的活着的region server,
  5. 提交一个LogReplayHandler的任务给内部线程池,这个任务内部就是进行split log的准备工作,将hdfs上该region server的log改名,加上-splitting后缀,变成hbase.rootdir/WALs/serverName-splitting,
  6. HMaster的SplitLogManager在zk上建立节点,路径/hbase/splitWAL/对上面改写后的log路径的encode。
  7. HMaster等待log被其他region server上的SplitLogWorker split完成,
  8. 将一开始建立的一系列节点/hbase/recovering-regions/regionEncodeName/serverName删掉,然后将-splitting目录删除.
updatedupdated2024-05-102024-05-10