Ceph存儲節(jié)點(diǎn)系統(tǒng)盤損壞集群恢復(fù)
本文主要介紹ceph16版本集群節(jié)點(diǎn)系統(tǒng)磁盤故障后的集群恢復(fù),雖然系統(tǒng)盤很多都是做了raid1,但從實際做的項目看,總是有很多未知意外發(fā)生,節(jié)點(diǎn)掛掉后,上面的mon和osd,mgr都會down掉,如果所在節(jié)點(diǎn)的mgr服務(wù)是激活狀態(tài),則其他節(jié)點(diǎn)所在的備用節(jié)點(diǎn)將會升級為激活狀態(tài)。
移除問題主機(jī)
節(jié)點(diǎn)掛掉后,在確定不能繼續(xù)開機(jī)進(jìn)入系統(tǒng)的情況下,需要在其他正常的節(jié)點(diǎn)將故障節(jié)點(diǎn)進(jìn)行移除,此次宕機(jī)的節(jié)點(diǎn)為node4,以下命令可能會導(dǎo)致數(shù)據(jù)丟失,因為 osd 將通過調(diào)用每個 osd 來強(qiáng)制從集群中清除。
ceph orch host rm node4 --offline --force
節(jié)點(diǎn)初始化操作
將node4節(jié)點(diǎn)即故障節(jié)點(diǎn)更換新的系統(tǒng)盤并重新安裝系統(tǒng),重裝后node4主機(jī)名我修改成了node1,并更換了新的ip,在三臺ceph節(jié)點(diǎn)上重新添加hosts解析
192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
將公鑰添加至新主機(jī)。
ssh-copy-id -f -i /etc/ceph/ceph.pub node1
安裝docker環(huán)境。
curl -sSL https://get.daocloud.io/docker | sh
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
安裝cephadm以及ceph-common。
# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
# chmod +x cephadm
# ./cephadm add-repo --release pacific
# ./cephadm install
# ./cephadm install ceph-common
向集群中添加新節(jié)點(diǎn)
在ceph集群添加新主機(jī)。
[root@node2 ~]# ceph orch host add node1
Added host 'node1'
添加后的主機(jī)列表可通過以下命令查看。
ceph orch host ls
之后會自動安裝mon以及crash等服務(wù),還有node-exporter監(jiān)控agent,但是新添加的節(jié)點(diǎn)上還不能進(jìn)行ceph集群操作,因為新添加的節(jié)點(diǎn)上缺少ceph集群管理的密鑰環(huán),在上面的命令中其實可以看到新加的node1是缺少一個_admin標(biāo)簽的,這里提一下ceph是有幾個特殊的主機(jī)標(biāo)簽的,以_開頭的屬于ceph主機(jī)的特殊標(biāo)簽,將_admin標(biāo)簽添加到這臺新節(jié)點(diǎn),就會導(dǎo)致cephadm 將配置文件ceph.conf和密鑰環(huán)文件ceph.client.admin.keyring分發(fā)到新節(jié)點(diǎn)上,這里我們把_admin標(biāo)簽添加至新節(jié)點(diǎn),這樣可以在新節(jié)點(diǎn)上執(zhí)行ceph集群的操作。
ceph orch host label add node1 _admin
或者在添加節(jié)點(diǎn)時就可以把標(biāo)簽添加上
ceph orch host add node1 --labels=_admin
添加osd
之前想著原有的故障節(jié)點(diǎn)的osd直接恢復(fù)到現(xiàn)有集群上,后來發(fā)現(xiàn)雖然是恢復(fù)回去了,但是osd的daemon沒有被cephadm所管理,osd的容器也沒有被創(chuàng)建,因此還是把原來故障節(jié)點(diǎn)的osd給格式化了,重新添加的osd,不過這里還是把我恢復(fù)的操作寫一下吧。先創(chuàng)建一個空的osd。
# vceph osd create
2
然后激活bluestore-osd的tmpfs目錄 由于bluestore中osd的目錄是以一個tmpfs的形式存在的,所以被umount掉了以后需要重新激活。
ceph-volume lvm activate (osdid) (fsid)
- PS:這里的osdid就是我剛創(chuàng)建的,osdid為2,后面的fsid不是集群的fsid,而是這個osd自己的fsid,獲取方式可以直接執(zhí)行l(wèi)l /dev/ceph*查看,osd-block-后面的即為osd的fsid。
然后添加auth和crush map,重啟osd。
ceph auth add osd.2 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-2/keyring
之后三個osd都會up,但是存在osd的daemon不被cephadm管理的問題,因此我還是刪掉這個osd,重新格式化后添加的,刪除osd的操作如下:
ceph orch ps --daemon_type osd
#查看osd對應(yīng)的容器id,先停止容器,我這里沒有osd容器啟動,所以這步可以忽略
ceph osd out 2
ceph osd crush remove osd.2
ceph auth del osd.2
ceph osd rm 2
上步只是在ceph刪除,還需要在磁盤上進(jìn)行格式化。
# 顯示當(dāng)前設(shè)備的狀態(tài)
# dmsetup status
# 刪除所有映射關(guān)系
# dmsetup remove_all
# 格式化剛才刪除的osd所在磁盤
mkfs -t ext4 /dev/vdb
重新添加osd。
ceph orch daemon add osd node1:/dev/vdb
此時集群就恢復(fù)正常了。