故障描述
redis機器的一個ssd盤出故障瓤狐,只能讀不能寫铺敌。其他盤寫入速度也很慢杏死。導(dǎo)致redis實例的aof刷新一直失敗肄扎,最終掛掉橄霉。
故障原因
ssd盤早期沒有格式化好导狡,4k對齊沒做好
處理過程
該redis機器是用來存儲collector采集到的日志的meta信息舀透,比較關(guān)鍵轧飞,而且一臺機器上開啟了8個redis實例蛹含,所以不好處理毅厚。
一開始準(zhǔn)備把redis的aof文件轉(zhuǎn)移到一個新的盤上,并且把aof的dir動態(tài)更改到其他盤浦箱,結(jié)果發(fā)現(xiàn)redis實例掛掉了吸耿,就沒有動態(tài)更換aof目錄。這其中酷窥,redis的數(shù)據(jù)可能有所丟失咽安,不過通過collector和redis日志發(fā)現(xiàn),磁盤掛了后redis寫入已經(jīng)失敗蓬推,估計有丟失數(shù)據(jù)也不多妆棒。collector有實現(xiàn)meta寫入redis失敗時轉(zhuǎn)為寫入本地磁盤,所以在redis實例down掉時沸伏,數(shù)據(jù)也不會丟失糕珊。
接著,處理4k對齊留特。先把所有redis實例進行bgwrite. ?redis-cli -h redis02 -p 6379 bgrewriteaof纠脾, 停掉所有redis實例玛瘸。
處理4k對齊, 重啟機器苟蹈。結(jié)果發(fā)現(xiàn)機器重啟失敗糊渊,陣列卡或線松了。
重啟機器后慧脱,趕緊把所有aof文件都備份到其他機器上渺绒。結(jié)果有發(fā)現(xiàn),有一塊盤丟了菱鸥,嘗試mount回來宗兼。發(fā)現(xiàn)有很多block錯誤,要修復(fù)又怕丟數(shù)據(jù)氮采。但現(xiàn)在盤有錯誤殷绍,只能先fsck修復(fù),如果修復(fù)成功再從里面拷貝出來鹊漠。要是覺得不保險主到,就先備份正常盤的數(shù)據(jù),空出一塊盤躯概,把cache3的盤做個鏡像登钥,再做修復(fù)。最后aof文件終于弄出來了娶靡,啟動redis實例牧牢,發(fā)現(xiàn)aof文件有問題,啟動失敗姿锭。使用redis-check-aof --fix修復(fù)了aof文件塔鳍,再啟動,成功艾凯。redis數(shù)據(jù)是被截斷一部分丟失了献幔。
數(shù)據(jù)恢復(fù)后,開始重新把redis機器上的ssd盤一個個重新格式化趾诗。
經(jīng)驗教訓(xùn)
因為redis的meta信息,是銜接collector采集蹬蚁,以及storm處理和hadoop camus入庫恃泪。本次redis故障,大動干戈犀斋,對集群影響比較大贝乎。
還好collector有redis失敗轉(zhuǎn)存文件的功能,所以日志采集一直正常叽粹。
接下來的深圳新機房览效,存儲meta的redis準(zhǔn)備使用cluster却舀,避免單點故障。保障可用性锤灿。