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故障處理,謹慎使用