HBase2.0 regionServer退出處理流程

rs主動退出或者宕機超過一定時間後,zk上/hbase/rs目錄下對應的znode會被刪除;

master的RegionServerTracker組件監聽到該目錄的子節點變化事件,會對zk上的rs節點和內存中的數進行對比,找出掛掉的ServerName;

ServerManager將該ServerName從onlineServers移到deadservers;

AssignmentManager創建ServerCrashProcedure實例(簡稱scp)並提交到ProcedureExecutor;

PE首先爲scp設置procId,並持久化到hdfs,然後創建對應的RootProcedureState,用以回滾,最後提交到ProcedureScheduler中的相應隊列中;

某個WorkerThread從隊列中獲取到該scp開始執行;

如果meta region在這個rs上,先split其log並assign,然後等待,直到被metaLoadEvent喚醒;

如果存在待處理的wal,則進行分佈式split,這個任務由master中的SplitLogManager協調各rs中的SplitLogWorker完成;

split完成後,對該rs下的每個region,提交AssignProcedure(簡稱ap),然後scp掛起;

ap的執行分爲3步:
由balancer分配目標rs;
通過RSProcedureDispatcher請求目標rs打開該region;
接收到已打開的消息後更新region的狀態數據,包括內存和meta表(如果是meta region,則更新的是zk上的meta-region-server節點);

ap執行完成的時候,判斷如果存在parent proc,則會將childrenLatch減1;

childrenLatch等於0的時候意味着所有ap都已經完成,此時會通過ap攜帶的parentProcId喚醒前面那個scp;

scp繼續執行,清理AssignmentManager和ServerManager中關於該rs的相關數據後結束;

詳細流程圖:https://www.processon.com/view/link/5c49a5dae4b0fa03cea60e27

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章