GlusterFS下如何修复裂脑文件?
恢復GlusterFS文件裂腦步驟
1. 執行如下命令,獲取裂腦文件的路徑。
# gluster volume heal VOLNAME info split-brain
客戶端訪問裂腦文件會報I/O錯誤。
2. 關閉在mount客戶端訪問裂腦文件的進程。如果有虛擬機正在使用裂腦文件,必須將虛擬機關閉。
3. 通過getfattr命令獲取和驗證擴展屬性的變更記錄,然后通過擴展屬性來確定哪些brick包含可信的文件。
# getfattr -d -m . -e hex <file-path-on-brick>
[root@lab21:/letv/disk4]$getfattr?-d?-m?.?-e?hex?file1
#?file:?file1
trusted.afr.plane-client-0=0x000000000000000000000000
trusted.afr.plane-client-1=0x000000000000000000000000
trusted.gfid=0x4e028c9b64234502ba304eba44e16da4
文件變更記錄屬性說明,如下示例:
0x?000003d7?00000001?000000110
? ? ? | ? ? ? ? | ? ? ? ?|
? ? ? | ? ? ? ? | ? ? ? ?\_ changelog of directory entries
? ? ? | ? ? ? ? \_ changelog of metadata
? ? ? \ _ changelog of data
首8位***背景字段記錄數據變更記錄
中間8位藍色背景字段記錄元數據變更記錄
末8位粉紅色背景字段記錄索引gfid變更記錄
對于目錄而言,元數據和索引gfid變更對應字段是有效的。
對于普通文件,數據和元數據對應字段是有效的。
對于特殊文件,如設備文件,元數據對應字段是有效的。
一個文件發生裂腦,可是數據裂腦,也可以是元數據裂腦,也有可以是數據和元數據同時裂腦。
一個元數據、數據同時裂腦例子如下:
# getfattr -d -m . -e hex /gfs/brick-?/a
getfattr: Removing leading '/' from absolute path names
\#file: gfs/brick-a/a
trusted.afr.vol-client-0=0x000000000000000000000000
trusted.afr.vol-client-1=0x000003d70000000100000000
trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57
\#file: gfs/brick-b/a
trusted.afr.vol-client-0=0x000003b00000000100000000
trusted.afr.vol-client-1=0x000000000000000000000000
trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57
4. 選擇正確的拷貝。
5. 通過重置相關字段解決裂腦問題
1)解決數據裂腦:重置數據字段對應屬性值
2)解決元數據裂腦:重置元數據字段對應屬性值
3)解決索引裂腦:刪除一個無效的副本,同時必須刪除對應的gfid-link文件,在.glusterfs目錄下
? ? 在刪除gfid-link文件之前,確保當前brick上要刪除的文件沒有硬鏈接,如果有也必須刪除。
6. 觸發自動修復
# ls -l <file-path-on-gluster-mount>
or
# gluster volume heal VOLNAME
注意:
????對于屬性正常,文件內容不同引起的裂腦,heal命令無法修復,需要執行heal full命令,當然ls也可以。
????修復方法,刪除錯誤副本及對應的gfid文件。
備注:本文針對gluster 3.4進行編寫,后續版本gluster修復機制發生了一些變化,客戶端通過ls已經不能觸發數據恢復。
轉載于:https://blog.51cto.com/dangzhiqiang/1713501
總結
以上是生活随笔為你收集整理的GlusterFS下如何修复裂脑文件?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS开发UI 篇—CAlayer层的属
- 下一篇: Hadoop学习笔记—20.网站日志分析