ceph pg+down+peering 故障排查与osd误删恢复

PG又称放置组,是ceph中存放文件object的单位,相当于管理文件的分组。
down+peering
参考ceph pg状态表:
Creating
Ceph 仍在创建归置组。
Active
Ceph 可处理到归置组的请求。
Clean
Ceph 把归置组内的对象复制了规定次数。
Down
包含必备数据的副本挂了,所以归置组离线。
Replay
某 OSD 崩溃后,归置组在等待客户端重放操作。
Splitting
Ceph 正在把一归置组分割为多个。(实现了?)
Scrubbing
Ceph 正在检查归置组的一致性。
Degraded
归置组内的对象还没复制到规定次数。
Inconsistent
Ceph 检测到了归置组内一或多个副本间不一致(如各对象大小不一、恢复后对象还没复制到副本那里、等等)。
Peering
归置组正在互联。
Repair
Ceph 正在检查归置组、并试图修复发现的不一致(如果可能的话)。
Recovering
Ceph 正在迁移/同步对象及其副本。
Backfill
Ceph 正在扫描并同步整个归置组的内容,而不是根据日志推算哪些最新操作需要同步。 Backfill 是恢复的一种特殊情况。
Wait-backfill
归置组正在排队,等候回填。
Backfill-toofull
一回填操作在等待,因为目标 OSD 使用率超过了占满率。
Incomplete
Ceph 探测到某一归置组可能丢失了写入信息,或者没有健康的副本。如果你看到了这个状态,试着启动一下有可能包含所需信息的失败 OSD 、或者临时调整一下 min_size 以完成恢复。
Stale
归置组处于一种未知状态——从归置组运行图变更起就没再收到它的更新。
Remapped
归置组被临时映射到了另外一组 OSD ,它们不是 CRUSH 算法指定的。
Undersized
此归置组的副本数小于配置的存储池副本水平。
Peered
此归置组已互联,但是不能向客户端提供服务,因为其副本数没达到本存储池的配置值( min_size 参数)。在此状态下可以进行恢复,所以此归置组最终能达到 min_size 。


down+peering表示ceph中的pgs处于互联状态但是发现对方却不在线了,这种情况原因一般为peering对象pg所在osd down或者损坏了。
在一次故障排查中,起因为ceph中一块硬盘损坏了,后来由于误删了一个osd(当时是由于该osd处于down状态,所以将其remove),竟然造成集群中pg中文件unfound!,pg的恢复也一直stuck,
后来试了很多办法都没有解决。
直到后来我仔细查看了该pg的query

ceph pg x.xx qyery

1、创建osd

ceph osd create

该命令会自动创建一个osd,返回osd号,但是需要的osd号必须跟误删的osd号相同,所以可以多次执行该命令创建osd,直到返回的osd号与误删的osd相同为止,此时ceph osd tree中已经创建了很多osd,在此只需要
保留我们所需的osd,将其他的空osd删除。

2、挂载osd

df -h
/dev/mapper/logs-log             40G  7.1G   31G  19% /var/log
/dev/mapper/mysql-root           40G  3.3G   35G   9% /var/lib/mysql
/dev/mapper/horizon-horizontmp   20G   33M   20G   1% /var/lib/horizon
/dev/sdb3                       279G  167G  112G  61% /var/lib/ceph/osd/ceph-0
//显示该osd挂载的目录

将osd与该目录关联

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

注意:在此过程中可能会出现keyring not match错误,可执行如下命令

ceph auth del osd.{num}

然后再进行挂载。

3、添加root node

ceph osd crush add [osdnum] [weight] host=controller-01

“ceph osd crush add 0 1.0 host=controller-01”表示在controller-01上添加osd.0 weight设置为1.0

4、启动osd

sudo start ceph-osd id={num}

5、 添加ceph node到default root

ceph osd crush move osd1 root=default

然后等待恢复就可以了。
对于unfound 的PG ,可以选择delete或者revert

ceph pg {pg-id} mark_unfound_lost revert|delete

参考:
归置组:http://docs.ceph.org.cn/rados/operations/placement-groups/
https://yq.aliyun.com/articles/17193
http://www.cnblogs.com/zhangzhengyan/p/6407403.html
http://docs.ceph.org.cn/rados/troubleshooting/troubleshooting-osd/#id8

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