遇到的一些CEPH故障處理

1、CEPH誤刪除OSD恢復操作

有時在線上環境由於個人原因會有一些誤操作,下面這個例子博主的親身經歷

 

本來是有一塊磁盤損壞,需要將其移除集羣,做移除操作,結果在刪除key的時候,OSD ID錯誤,將正常的OSDkey刪了。

誤執行ceph auth del osd.x

這時候不要慌,只是刪除了key,osd的文件目錄都存在,只需要在對應節點上將key加回去即可,執行:

ceph auth add osd.x osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-x/keyring

 

當完全刪除一塊好的OSD,怎麼將其加回去呢?(前提是文件目錄均存在)博主在測試環境做了驗證

當將該osd完全刪除

將osd從集羣移除:ceph osd out 0

將osd從集羣刪除:ceph osd rm 0

刪除osd的crush:ceph osd crush rm osd.0

刪除osd驗證祕鑰:ceph auth del osd.0

 

在osd 0對應節點上執行如下命令:

more fsid #在osd 0對應目錄下執行,會返回uuid值

ceph osd create uuid #會返回osd對應id號,創建osd號

ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring #將祕鑰添加回去

ceph osd crush add xxx 1.0(權重) host=xxx #將osd添加回集羣,xxx爲osd號,host爲osd對應主機

ceph osd in osd.xxx #將osd在集羣in

systemctl start ceph-osd@xx #啓動osd

 

ceph osd tree | grep osd.xxx #查看osd是否up

 

2、CEPH journal分區損壞,手動重建

有一次在線上環境碰到這樣一個故障,osd突然down,並且手動起不來。

這時我們需要查看詳細日誌,使用

ceph-osd -f --cluster ceph --id xxx --setuser ceph --setgroup ceph --debug-osd=10 --debug-filestore=10 --log-to-stderr=1

 

得到報錯信息:journal Unable to read past sequence 10177218 but header indicates the journal has committed up through 10177225, journal is corrupt

可以從報錯信息看到顯示journal分區損壞,我們可以試着重建journal

將之前的journal日誌刪除,然後重建就OK

ls -l /var/lib/ceph/osd/ceph-289/journal #查看osd289對應的journal日誌的鏈接文件

ls -l /dev/disk/by-partuuid/88ae0778-2e35-4333-8098-29452ba70565 #查看鏈接文件對應的日誌磁盤

mkfs.xfs /dev/sdc5 #格式對應的journal日誌磁盤

ceph-osd -i 289 --mkjournal #重建日誌

systemctl start ceph-osd@289 #啓動osd

ps -ef| grep ceph #查看進程 成功

 

3、設備宕機後,osd未掛載

有時會遇到設備異常宕機,設備起來後,會有osd並未自動掛載

首先查看磁盤權限是否正確,要給磁盤賦予正確權限,然後將osd掛載

ll -d /dev/sdX 

chown -R ceph:ceph /dev/sdX

mount /dev/sdX /var/lib/ceph/osd/ceph-XXX

啓動osd,正常情況下都是正常的,有時會報如下錯誤

** ERROR: unable to open OSD superblock on /var/lib/ceph/osd/ceph-179: (2) No such file or directory

這時可以試試這個命令:ceph-disk activate /dev/sdX

 

4、scrub errors處理

HEALTH_ERR 1 pgs inconsistent; 1 scrub errors;

ceph health detail | grep "inconsisten"

pg 2.37c is active+clean+inconsistent, acting [75,6,35]  1 scrub errors

修復

ceph pg repair 2.37c #手動對pg進行repair

上述命令無效之後,可以對pg進行scrub操作

ceph pg scrub 2.37c   

ceph pg deep-scrub  2.37c

ceph pg repair 2.37c

上述命令無效之後,可以執行恢復pg對應osd的操作

ceph osd repair 75

ceph osd repair 6

ceph osd repair 35

還不生效,那麼就最粗報的方法,將pg對應osd stop掉,然後將osd執行loss操作,告訴集羣數據丟了,不推薦

ceph osd lost 1(osdid) #同樣適用於inactive故障處理,謹慎使用

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