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故障处理,谨慎使用