MooseFS使用問題分析總結
隨著數據量越來越大,MFS的使用中也出現過一些問題,這里做了一些分析和總結,下面和大家分享一下:
先提一下MFS出問題時出現比較頻繁的兩個信息:
- 連接中斷
- 壞塊問題
連接中斷問題在Master端會出現如下錯誤:
- mfsmaster[15861]: connection with client(ip:10.11.18.175) has been closed by peer
- 表示客戶端和master的連接中斷
- mfsmaster[15861]: connection with ML(10.11.19.76) has been closed by peer
- 表示Metalogger和Master的連接中斷
- mfsmaster[15861]: connection with CS(10.11.18.199) has been closed by peer
- 表示ChunkServer和Master的連接中斷
原因分析可能如下:
- 網絡閃斷 - 正常現象,MFS本身可自動重連,不會造成問題
- Clinet或ChunkServer主動斷開連接,如Kill進程,也會引起這種錯誤
- ChunkServer或Client到Master的連接超時,也會斷開連接,引起超時可能有兩個原因:
- Client請求過多,引起Master請求隊列已滿,導致的連接超時
- 網絡響應慢引起的超時(和網絡閃斷區分)
解決辦法:
- 對于1、3出現引起的中斷可不加理會,重點需關注2引起的問題:
- 針對2-a:Client控制請求,如超高并發的讀寫刪除,另需注意的操作是ls,大家知道Linux系統本身對一個目錄下文件個數的顯示是有限制的(如10W,那么涉及到的需遍歷指令就會報錯,list too long),同樣,我們MFS中遍歷目錄下文件時也要注意,要遍歷的文件數過多會導致超時引起連接被中斷等問題。
- 針對2-b: 合理分配帶寬資源,優化網絡環境解決。
備注:
Client或Chunk到Master的連接中斷之后,會由Client或Chunk自動發出重連(Reconnection)和注冊(Register)操作。
壞塊問題在Master端會出現如下錯誤:
- mfsmaster[3250]: chunkserver has nonexistent chunk (000000000002139F_00000001), so create it for future deletion
- mfsmaster[3250]: (10.11.18.199:9422) chunk: 000000000002139F creation status: 20
- mfsmaster[3250]: chunk 000000000002139F has only invalid copies (1) – please repair it manually
- mfsmaster[3250]: chunk 000000000002139F_00000001 – invalid copy on (10.11.18.199 – ver:00000000)
- mfsmaster[3250]: currently unavailable chunk 000000000002139F (inode: 135845 ; index: 23)
上述日志的意思是:有一個塊在Master中有元數據信息,但ChunkServer中沒有這個塊,系統會自動在ChunkServer上創建此塊為了后續刪除,因為沒有內容,所以是非法的copy,我們也無法訪問到此塊。
出現的原因可能有很多,如:
- Client端大文件傳輸過程中,強制拔下master主機電源,造成master非法關閉,使用mfsmetarestore -a修復后,master日志報告有壞塊
- ChunkServer的csstats.mfs存放位置空間不足,導致文件塊無法寫入,也會引起塊錯誤
- 手動刪除ChunkServer上的塊文件
- 刪除文件后,Master非正常結束后重啟,但沒有結果changelog.mfs進行恢復,也會引起壞塊
原因應該還有很多,后續有遇到再補充。
解決辦法:
Client端使用mfsfilerepair對文件進行修復。
我理解壞塊分為兩種:
- 一種是沒有任何一個trunk節點有數據(修復工作其實就是生成chunk,在需要補充內容的地方填充0,這種塊事后要刪除)
- 另一種是存在有數據塊的節點(從存在的數據塊copy,這里的塊不需要刪除)
修復之后可能出現如下日志信息:
- mfsmaster[3250]: chunk hasn’t been deleted since previous loop – retry
- mfsmaster[3250]: (10.11.18.199:9422) chunk: 000000000002139F deletion status: 13
Client端執行一個mv或rm 操作,master將不會再顯示此信息,如:
- mv 80499644316259743_s.jpg 80499644316259743_s_1.jpg