ITPub博客

首页 > 数据库 > 数据库开发技术 > HBase的Region迁移流程

HBase的Region迁移流程

原创 数据库开发技术 作者:DBA修行之路 时间:2021-07-10 20:43:01 0 删除 编辑



点击上方“蓝字”,发现更多精彩。





HBase的Region迁移流程

迁移流程总览

HBase是一个分布式系统,对于分布式系统,负载均衡,故障恢复是非常重要的。而这些都依赖于分片迁移,实际上即Region迁移。一方面,保证集群内所有节点的分片数目大致均衡。另一方面,保证发生故障时数据不丢失。Region迁移可以分为两个阶段:unassign阶段,assign阶段。


Region状态

Region状态可以分为13个状态,具体如下表,除了OOFLINE状态,这些状态又可根据不同过程分为4个过程。分别为打开过程,关闭过程,合并过程,分裂过程。

打开过程:包含OPENING,OPEN,FAILED_OPEN等状态。

关闭过程:包含CLOSING , CLOSED,FAILED_CLOSE状态。

分裂过程:包含SPLITING,SPLIT,SPLITING_NEW状态。

合并过程:MERGING,MERGED , MERGING_NEW状态。

具体如下:


Region状态 含义
OFFLINE 下线状态
OPENING 正在打开状态
OPEN 正常打开状态
FAILED_OPEN 打开失败状态
CLOSING 正在关闭状态
CLOSED 正常关闭状态
FAILED_CLOSE 关闭失败状态
SPLITING 正在分裂状态
SPLIT 完成分裂状态
SPLITING_NEW 分裂时产生新Region
MERGING 正在合并状态
MERGED 完成合并状态
MERGING_NEW 合并后生成新Region





unassign阶段

unassign的含义是Region从源RegionServer上下线,涉及的服务有Hmaster,RegionServer,ZooKeeper。总体可分为以下六个步骤:


1).HMaster与ZooKeeper交互,生成事件M_ZK_REGION_CLOSING并更新到ZooKeeper组件,同时将本地内存中该Region的状态修改为PENDING_CLOSE。


2).HMaster与RegionServer交互,HMaster通过RPC发送close命令给拥有该Region的RegionServer,并关闭该Region。


3).RegionServer与ZooKeeper交互,RegionServer接收到Master发送过来的命令后,生成一个RS_ZK_REGION_CLOSING事件,更新到ZooKeeper中。


4).HMaster与ZooKeeper交互,HMaster监听到ZooKeeper节点变动后,更新内存中Region的状态为CLOSING。


5).RegionServer执行Region关闭操作,如果该Region正在执行flush或者Compaction操作,则等待操作完成。否则将该Region下的所有MemStore强制flush,然后关闭Region相关的服务。


6).RegionServer与ZooKeeper交互,HMaster与ZooKeeper交互,关闭相关服务后,生成RS_ZK_REGION_CLOSED事件,并更新到ZooKeeper。HMaster监听到ZooKeeper节点变动后,更新该Region的状态为CLOSED。




assgin阶段:

assign的含义是Region在目标RegionServer上线。涉及的服务与unassign阶段一致。也可以分为六个阶段:


1).HMaster与ZooKeeper交互,HMaster生成事件M_ZK_REGION_OFFLINE,并更新到ZooKeeper组件,同时将本地内存中该Region的状态修改为PENDING_OPEN。


2).HMaster与RegionServer交互,HMaster通过RPC发送open命令给拥有该Region的RegionServer,令其打开该Region。


3).RegionServer与ZooKeeper交互,RegionServer接收到HMaster发送过来的命令后,生成一个RS_ZK_REGION_OPENING事件,更新到ZooKeeper。


4).HMaster与ZooKeeper交互,HMaster监听到ZooKeeper节点变动后,更新内存中Region的状态为OPENING。


5).RegionServer执行Region打开操作,初始化相应的服务。


6).RegionServer与ZooKeeper交互,HMaster与ZooKeeper交互。Region打开完成之后生成事件RS_ZK_REGION_OPENED,更新到ZooKeeper,HMaster监听到ZooKeeper节点变动后,更新该Region的状态为OPEN。




Hmaster,rs,zk的故事

在unassign和assign的过程中,HMaster,RegionServer和ZooKeeeper会有一系列的交互,但是每个人负责的职责不一样。


对于HMaster,在整个过程中,会负责维护Region在整个操作中的状态变化,相当于一个中枢系统。


对于RegionServer,在整个过程中,RegionServer相当于一个执行者,严格执行来自HMaster的指令,即打开或者关闭Region问题。


ZooKeeper相当于一个中转站,负责存储操作过程中的事件,ZooKeeper上有一个存储HBase的Region相关信息的节点,路径为/hbase/region-in-transition,当Region发生assign或者unassign操作,就会在该节点下生成一个子节点,子节点的内容是"事件"经过序列化的字符串,并且Master会在这个子节点上监听,无论发生任何事件,HMaster都可以监听到并更新Region的状态。


另外,无论是在unassign还是在assign操作中,都包括多个子操作以及多个组件的协调合作,隐藏需要通过记录Region状态才会知道当前进度,也便于在发生异常时进行有效恢复。Region状态会存储在meta表,HMaster内存以及ZooKeeper的region-in-transition节点。详细如下:


meta表只存储RegionServer所在的RegionServer,不存储中间状态。


HMaster内存中存储整个集群所有的Region信息,可以查看某个region目前在哪个RegionServer上及状态。HMaster上的Region状态由RegionServer通过ZooKeeper传递给HMaster的,因此是滞后于真正的Region状态变更。在HBase Master WebUI上看到的Region状态即来自于此。


ZooKeeper中存储的是临时性的状态转移信息,如果HMaster或者RegionServer在region迁移的某个阶段发生异常,ZooKeeper上存储的状态可以在异常恢复后作为依据进行迁移操作。


只有meta表,HMaster内存,ZooKeeper三者中的状态一致,对应的Region才会处于正常状态,当三者不能处于一致时。便会触发region-in-transition(RIT)现象。但对于Region在迁移的过程中会出现短暂的RIT现象这种场景无需人工干预。




结尾小结

这几天有点懈怠了,今天学习了一下HBase中Region迁移的相关知识点,但是涉及到RIT的部分,因为没有实际遇到过,感觉不是很理解,先清楚这个概念吧,后续实际遇到了再做深入学习吧。




END



扫码关注我
每天进步一点点,未来才可期,我们共同的目标是星辰大海。




原文作者:DBA修行之路;如有侵权,请联系管理员删除。

下一篇: 最近的一些感悟
请登录后发表评论 登录
全部评论

注册时间:2021-05-25

  • 博文量
    64
  • 访问量
    23946