Hbase master gone 系統崩潰. 遭遇 hbase bug 以及對應的解決方案.

babyyellow發表於2019-05-23


hbase   雙master  架構,  掛掉了. 


master  無法轉為active了 . 整個系統重啟多次 爆同樣的錯誤. 


2019-05-21 14:50:55,189 WARN  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: attempt=3 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000026244.log after 73101ms
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): Failed to RECOVER_LEASE /hbase/MasterProcWALs/state-00000000000000026244.log for DFSClient_NONMAPREDUCE_-23587253_1 on 192.168.8.52 because the file is under construction but no leases found.


發現 
/hbase/MasterProcWALs
下面很多檔案 

已經很久了. 這個目錄下面一共有1800多個檔案. 

這些檔案都是0 長度的. 




最後重啟hdfs . 

重啟zookeep 

然後重啟 hbase  問題解決. 

但是奇怪的事情發生了.

上面目錄裡的檔案都消失了. 

系統啟動後, 從日誌裡去找點東西出來看看: 


2019-05-21 15:31:12,843 INFO  [hadoop-8-51:16000.activeMasterManager] procedure.ZKProcedureUtil: Clearing all procedure znodes: /hbase/online-snapshot/acquired /hbase/online-snapshot/reached /hbase/online-snapshot/abort
2019-05-21 15:31:12,852 INFO  [hadoop-8-51:16000.activeMasterManager] procedure.ZKProcedureUtil: Clearing all procedure znodes: /hbase/flush-table-proc/acquired /hbase/flush-table-proc/reached /hbase/flush-table-proc/abort
2019-05-21 15:31:12,879 INFO  [hadoop-8-51:16000.activeMasterManager] master.MasterCoprocessorHost: System coprocessor loading is enabled
2019-05-21 15:31:12,892 INFO  [hadoop-8-51:16000.activeMasterManager] procedure2.ProcedureExecutor: Starting procedure executor threads=25
2019-05-21 15:31:12,893 INFO  [hadoop-8-51:16000.activeMasterManager] wal.WALProcedureStore: Starting WAL Procedure Store lease recovery
2019-05-21 15:31:13,016 INFO  [hadoop-8-51:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000026244.log


這些檔案都被執行了一次恢復操作. 

是什麼問題導致的這些標誌檔案 , 

叢集是主從兩個master 的. 一直都監控執行.  系統穩定性良好. 

故障切換也沒有問題. 


在網上找到了一篇 詳細的關於hdfs 檔案恢復的帖子: 

https://blog.cloudera.com/blog/2015/02/understanding-hdfs-recovery-processes-part-1/  







master  在8.51上的時候, 發現 多了很多這個檔案. 

然後web 頁面看到 很多 region in tracsaction  也就是spli 失效了. 

 然後手動切換到 8.52   

這些檔案就消失了. 

同時在 8.52 上 日誌裡看到了修復這些檔案的日誌. 


2019-05-23 09:43:48,423 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028058.log
2019-05-23 09:43:48,435 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: recoverLease=true, attempt=0 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028058.log after 12ms
2019-05-23 09:43:48,470 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028059.log
2019-05-23 09:43:48,471 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: recoverLease=true, attempt=0 on file=hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028059.log after 1ms
2019-05-23 09:43:48,493 INFO  [hadoop-8-52:16000.activeMasterManager] util.FSHDFSUtils: Recovering lease on dfs file hdfs://clusterpc/hbase/MasterProcWALs/state-00000000000000028060.log


也就是 只要適當的安排  master  的相互切換.  


其實既可以規避這個問題. 



發現HBASE 的一個bug . 





修復版本 1.2.0   . 



問題出在 這個

 /hbase/MasterProcWALs   下面的日誌太多了 . 

然後 在master 變成 active 之前,   需要回復這些檔案. 

當這些檔案太多的時候,  在想namenode 請求資訊的時候. 

導致 tcp  buffer 滿了.  

然後對namenode 形成了事實上的ddos 攻擊.  

然後master 超時下線了. 

所以啟動不了. 

重啟 叢集就可以了. 


或者讓這個目錄下面的檔案數不要太多. 



------------------   解決方案 ------------------



如果 暫時無法執行版本升級. 


那麼 可以週期性的切換 master  來規避這個問題. 






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2645305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章