Ceph 修复 PG (归置组)不一致

有时,归置组可能会变得“不一致”。要将归置组返回到 active+clean 状态,您必须首先确定哪些归置组变得不一致,然后对其运行“pg repair”命令。此页面包含用于诊断归置组的命令和用于修复已变得不一致的归置组的命令。

用于诊断归置组问题的命令

本节中的命令提供了各种诊断损坏的归置组的方法。

以下命令提供了 ceph 集群运行状况的高级(低细节)概览:

# ceph health detail

以下命令提供了有关归置组状态的更多详细信息:

# ceph pg dump --format=json-pretty

以下命令列出不一致的置放群组:

# rados list-inconsistent-pg {pool}

以下命令列出不一致的 rados 对象:

# rados list-inconsistent-obj {pgid}

以下命令列出给定置放群组中不一致的快照集:

# rados list-inconsistent-snapset {pgid}

修复归置组的命令

修复损坏的归置组的命令形式为:

# ceph pg repair {pgid}

{pgid}受影响的归置组的 id 在哪里。

例如:

# ceph pg repair 1.4

更多关于归置组修复的信息

Ceph 存储和更新存储在集群中的对象的校验和。当对置放群组执行清理时,OSD 会尝试从其副本中选择一个权威副本。在所有可能的情况中,只有一种情况是一致的。深度清理后,Ceph 计算从磁盘读取的对象的校验和,并将其与之前记录的校验和进行比较。如果当前校验和与之前记录的校验和不匹配,则为不一致。在复制池的情况下,对象的任何副本的校验和与权威副本的校验和之间的任何不匹配都意味着存在不一致。

“pg repair”命令尝试修复各种不一致。如果“pg repair”找到不一致的归置组,它会尝试用权威副本的摘要覆盖不一致副本的摘要。如果“pg repair”发现一个不一致的复制池,它会将不一致的副本标记为丢失。在复制池的情况下,恢复超出了“pg 修复”的范围。

对于纠删码和 bluestore 池,如果 osd_scrub_auto_repair(配置默认“false”)设置为 true,并且最多发现 osd_scrub_auto_repair_num_errors(配置默认 5)错误,Ceph 将自动修复。

“pg 修复”并不能解决所有问题。Ceph 不会在发现不一致时自动修复归置组。

对象或 omap 的校验和并不总是可用的。校验和是增量计算的。如果复制对象被非顺序更新,则更新中涉及的写入操作会更改对象并使其校验和无效。重新计算校验和时不会读取整个对象。“ceph pg repair” 能够在校验和不可用的情况下进行修复,例如文件存储。当复制的文件存储池存在问题时,用户可能更喜欢手动修复而不是“ceph pg repair”。

本段中的材料与 filestore 相关,bluestore 有自己的内部校验和。匹配记录校验和和计算的校验和不能证明权威副本实际上是权威的。在没有可用校验和的情况下,“pg repair”有利于主节点上的数据。这可能是也可能不是未损坏的副本。这就是为什么在发现不一致时需要人工干预的原因。人工干预有时意味着使用“ceph-objectstore-tool”。

外部链接

https://ceph.io/geen-categorie/ceph-manually-repair-object/ - 这个页面包含一个归置组修复的演练,如果你想修复归置组但是没有做过,推荐阅读。

上一篇:习题2-1 求整数均值 (10 分)-PTA浙大版《C语言程序设计(第4版)》


下一篇:Linux下离线部署指定版本的Ceph集群