ceph pg down+peering状态处理方案




参考文档:http://docs.ceph.com/docs/hammer/rados/troubleshooting/troubleshooting-pg/

复现步骤:

  1. 对存储池(min_size=1)中的一个卷进行fio数据写入
  2. 停止2个副本osd,保持单副本运行状态,并保持写入数据
  3. 停止第3个副本osd,之后启动前2个副本osd

此时ceph -s就可以看到出现了down+peering状态的pg。

我们在这种情况下,首先选择启动第3个副本osd,如果可以正常启动,那么down+peering状态的pg就会恢复正常active状态。

如果发生第3个副本osd无法启动(磁盘故障或者节点故障等)情况,则需要考虑挽救方案,这种情况下可能会丢失部分对象数据(对象数据回滚到老版本)。这种场景的pg状态恢复操作步骤如下:
根据ceph pg xxx query命令,找到peering_blocked_by的osd id,执行ceph osd lost $OSDID –yes-i-really-mean-it,标记该osd为lost,并重启pg xxx中的存活的一个osd(强制重新进行peering),如果pg数据没有更新到故障的osd上,也即单副本运行期间,该pg没有新写入数据,那么这么操作后不会发生对象数据丢失。之后把故障的osd移除即可。

如果执行lost命令之后,ceph -s看到有unfound对象。则需要执行ceph pg xxx mark_unfound_lost revert,将pg中lost对象revert到之前的版本(单副本运行期间写入的数据会丢失)。之后pg就会恢复正常的active状态。最后将故障osd移除即可。

常用命令: