遇到的一些CEPH故障处理

Posted 涛子GE哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇到的一些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故障处理,谨慎使用

以上是关于遇到的一些CEPH故障处理的主要内容,如果未能解决你的问题,请参考以下文章

ceph分布式存储-常见 PG 故障处理

ceph写入时延高导致虚拟机hang死的故障处理

ceph集群osd down 故障处理

干货丨Ceph 日常运维常见难点及故障解决

技术干货:Ceph搭建硬件建议详解

技术干货:Ceph搭建硬件建议详解