記一次斷電引起的mongodb徹底奔潰【轉載】

週末四臺mongodb主機同時斷電,起來後shard中兩個分片的主副本全部損壞。瞬間我xxxxxxxxx,此處省略300字。

接下來開始我的漫長修復之旅。先說明下,我的存儲數據有11億條,20T。

一、先修復shard0004的第一個複製集吧,先嚐試用了官方的mongod repair.跑了2天,還是奔潰了,報其中幾個collection的wt文件找不到。馬上百度、google,居然都沒有人提到這個問題。。。草泥馬。。。

最後還是去下載了wt,嘗試看看有啥辦法修復,這其中歷經艱辛,你們也不想了解了,直接說解決辦法。

1.必須下載編譯wt,這個自己到wiretiger官網去下。

2.在本地新建一個備份目錄bak,吧dbpath下的所有wiretiger等文件都靠過來,還有 sizeStorer.wt。

3.在把第二步做的備份目錄,再拷貝一份bak2,這步非常非常關鍵。否則會有問題。

4.在bak2目錄下,執行./wt -v -h ./bak2 -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" list|grep 丟失的文件名(不要含wt)

會有三個。

然後分別執行(drop掉三個):

./wt -v -h ./bak2 -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" drop file:local/index-3-2981754152560542274.wt

然後再執行:(只執行一次)

./wt -v -h ./bak2 -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" create local/index-3-2981754152560542274
5.然後吧生成的wt文件考回bak目錄下去。
6.在bak目錄下執行:
./wt -v -h ./bak -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R salvagelocal/index-3-2981754152560542274
7.把bak目錄下的所有wiretiger文件和新生成的wt文件都考回正式庫,然後就可以啓動啦。

以上是關於wt文件丟失的處理辦法。

二、然後再說下如果是報wt文件的checksum不對的處理辦法。這個處理比較簡單,網絡上也有。
還是用wt來處理:
1.新建一個bak目錄,把上面第二步說的都拷過去(這裏其實不建bak也可以的,對正式庫沒有影響。)
2.在bak目錄執行,發現和上面一樣啦
./wt -v -h ./bak -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R salvagelocal/index-3-2981754152560542274
3.哦耶,還是把上面第7步說的東西考回正式庫,就可以起來啦。

三、還記得上面用過repair嗎?我去,他導致local下的index文件報錯。這個還沒有辦法用wt。很簡單,繼續用官方的repair來做一遍就好了。

四、終於完成一個副本集的修復啦,oh my god。

五、還有一個shard的要修復啊。這個更奔潰,wiretiger自己的wt損壞了。這個我很負責的告訴你,截止20170726,沒有辦法修復。我是把這些文件打包發給官方去修復的。官方會響應,但是我可是等不了他了。咳。。

所以最後最後最後,我還是重建了另一個shard,當做所有shard數據丟失。

再說下,停電重啓後,dbpath是無法再mount上去了。說結構需要清理。xfs_repair又說有log 要replay。最後我沒辦法還能加-L參數,摧毀了replay log。鬱悶不。(官網就是讓我們去mount的,但是我查網絡上貌似都做不到。)

楊建飄雪 最後發佈於2017-07-26 09:41:21
https://blog.csdn.net/zhaow7/article/details/76104476

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