HBase Region 各个状态的转换
Region 各个状态的转换
HBase 维护了每个 region 的一个状态信息,并保存在 hbase:meta 中。hbase:meta 本身region的状态信息被持久化到 ZooKeeper。也可以在 HBase Master Web UI 里查看到 regions 的转换状态。以下是一个 region 可能出现的状态:
1. OFFLINE:region处于offline 状态,not opening
2. OPENING:region处于正在被opened 状态
3. OPEN:region处于打开状态,并且RegionServer已经通知了master
4. FAILED_OPEN:RegionServer未成功open这个region
5. CLOSING:region处于正在被关闭的状态
6. CLOSED:RegionServer已经关闭了region并且通知了master
7. FAILED_CLOSE:RegionServer close region 失败
8. SPLITTING:RegionServer 通知了master 当前region正在splitting
9. SPLIT:RegionServer通知master当前region已经完成splitting
10. SPLITTING_NEW:当前region由于split的原因,在被创建过程中
11. MERGING:RegionServer 通知master当前region正在与另一region聚合
12. MERGED:RegionServer 通知了master当前region已经被聚合
13. MERGING_NEW:当前region正在由两个region聚合中
状态图说明:
1. 棕色:Offline状态,一种特殊的短暂状态(在被closed后,opening 之前),或是一种terminal的状态(regions of disabled tables),亦或是初始状态(新创建的表的regions)
2. 浅绿色:online状态,可以处理请求
3. 淡蓝色:短暂瞬时的状态
4. 红色:失败状态,需要 OPS注意
5. 金色:regions的split/merge的关闭状态
6. 灰色:可能由于split/merge生成的regions的初始状态
转换状态说明:
1. Master 将一个region从OFFLINE状态移动到OPENING状态,并尝试将region assign到一个RegionServer。RegionServer可能还没有收到open region 的请求。Master 会重试向RegionServer发送 open region request的请求,直到RPC goes through或者master的到达重试次数上限。在RegionServer接收到open region request后,RegionServer开始opening region;
2. 如果master重试次数已满,则master会阻止RegionServer opening region,将reigon放入closing状态,并尝试close 它,即使此时RegionServer 正在开始 open the region
3. 在RegionServer 打开region后,它会继续尝试通知master,直到master将当前region改为OPEN状态并且通知RegionServer。此时region为open状态
4. 如果RegionServer无法打开region,它会通知master。Master将region移动到CLOSED状态并尝试将在另一个regionserver打开此region
5. 如果master无法open the region on any of a certain number of regions,它会将region移动到FAILED_OPEN 状态,并且不会有任何进一步的动作,直到从 HBase进行人工干预,或 server is dead
6. master将一个region从OPEN移动到CLOSING状态。维持当前region的RegionServer可能尚未收到close region的请求。Master会重试发送 close request,直到RPC goes through或master重试次数耗尽
7. 如果RegionServer为非online状态,或者抛出了NotServingRegionException的异常,master会将region移动到OFFLINE状态并且re-assign这个region到另一个RegionServer
8. 如果RegionServer为online状态,但是在master重试次数耗尽后仍无法reach 到此region。则master移动region到FAILED_CLOSE 状态,并且不会有任何进一步的动作,直到从 HBase进行人工干预,或 server is dead
9. 如果RegionServer收到close region的请求,它会close此region并通知master。Master移动此region到CLOSED状态并重新将它分配到另一个RegionServer
10. 在assinging一个region之前,如果它是CLOSED状态,则master自动将region移动到OFFLINE状态
11. 当一个RegionServer开始要做split region时,它会通知master。Master将被split的region从OPEN状态移动到SPLITTING状态,并且新增加两个region到RegionServer。这两个新region在最开始会处于SPLITING_NEW 状态
12. 在通知了master后,RegionServer开始split region。一旦过了无法返回的点后(past the point of no return),RegionServer再次通知master,这样master会更新hbase:meta 表。然而,master不会更新region 状态直到它被server通知 split已经完成。如果split成功,则splitting region 会被从SPLITTING状态移动到SPLIT状态,并且两个新region会被从SPLITTING_NEW状态移动到OPEN状态
13. 如果split失败,splitting region会从SPLITTING移动回OPEN状态,并且两个新的region会从SPLITTING_NEW 移动到OFFLINE状态
14. 当一个RegionServer准备开始聚合两个region时,它首先会通知master。Master移动两个即将被聚合的regions从OPEN状态移动到MERGING状态,并且将(被聚合的,保有聚合的region的数据的)新region加入到RegionServer。新的regions的状态在最开始为MERGING_NEW的状态
15. 在通知master后,RegionServer开始聚合两个regions。一旦过了无法返回的点后(past the point of no return),则RegionServer再次通知master,这样master会更新META表。然后master不会立即更新region状态,直到RegionServer通知master 聚合已经完成。如果merge成功,则两个聚合的regions会被从MERGING状态移动到MERGED状态,并且新的region会被从MERGING_NEW 状态移动到OPEN状态
16. 如果merge 失败,则两个merging regions会从MERGING 状态移动回OPEN状态,并且新的region(创建出来hold 两个merging regions数据的region)会从MERGING_NEW状态移动到OFFLINE状态
17. 对处于FAILED_OPEN 或FAILED_CLOSE状态的regions,master会尝试再次关闭它们,当它们被重新分配时(通过HBase shell命令)
References:
http://hbase.apache.org/book.html