第 7 章 Ceph 放置组故障排除
本节介绍修复与 Ceph 放置组(PG)相关的最常见错误。
先决条件
- 验证您的网络连接。
- 确保 monitor 能够组成仲裁。
-
确保所有健康的 OSD 为
up
和in
,回填和恢复过程已完成。
7.1. 最常见的 Ceph 放置组错误 复制链接链接已复制到粘贴板!
下表列出了 ceph health detail
命令返回的最常见的错误消息。这些表中提供了相应部分的链接,这些部分解释了错误并指向修复问题的特定程序。
另外,您可以列出处于不最佳状态的放置组。详情请查看 第 7.2 节 “列出放置组处于 过时的
、inactive
或 unclean
状态”。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 正在运行的 Ceph 对象网关.
7.1.1. 放置组错误消息 复制链接链接已复制到粘贴板!
常见放置组错误消息表,以及潜在的修复。
错误消息 | 查看 |
---|---|
| |
| |
| |
| |
| |
| |
|
7.1.2. Stale 放置组 复制链接链接已复制到粘贴板!
ceph health
命令将一些放置组 (PG) 列为 stale
:
HEALTH_WARN 24 pgs stale; 3/300 in osds are down
HEALTH_WARN 24 pgs stale; 3/300 in osds are down
这意味着
当放置组没有从放置组活跃集合的 Primary OSD 或其他 OSD 报告主 OSD 为 down
时,监控器将 PG 标记为 stale
。
通常,PG 在启动存储集群后进入 stale
状态,直到对等进程完成为止。但是,如果 PG 处于 stale
状态的时间超过预期,这可能表示这些 PG 的 Primary OSD 为 down
或未向 monitor 报告 PG 统计信息。当存储 过时
PG 的 Primary OSD 正常运行时
,Ceph 会开始恢复 PG。
mon_osd_report_timeout
设置决定了 OSD 将 PG 统计信息报告到 monitor 的频率。默认情况下,此参数设置为 0.5
,这意味着 OSD 每半秒报告统计信息。
要排除此问题,请执行以下操作
识别哪些 PG
已过时
,以及它们所存储的 OSD。错误消息包括类似以下示例的信息:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
对标记为
down
的 OSD 的任何问题进行故障排除。详情请参阅 Down OSD。
7.1.3. Inconsistent placement groups 复制链接链接已复制到粘贴板!
有些放置组被标记为 active + clean + inconsistent
,ceph health
details 会返回类似如下的错误消息:
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors pg 0.6 is active+clean+inconsistent, acting [0,1,2] 2 scrub errors
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
pg 0.6 is active+clean+inconsistent, acting [0,1,2]
2 scrub errors
这意味着
当 Ceph 检测到 PG 中一个或多个对象副本中的不一致时,它会将该 PG 标记为 inconsistent
。最常见的不一致是:
- 对象具有不正确的大小。
- 恢复完成后,一个副本中的对象会丢失。
在大多数情况下,清理过程中出现错误会导致放置组内不一致。
要排除此问题,请执行以下操作
登录到 Cephadm shell:
示例
cephadm shell
[root@host01 ~]# cephadm shell
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定哪个放置组
处于不一致的状态
:[ceph: root@host01 /]# ceph health detail HEALTH_ERR 1 pgs inconsistent; 2 scrub errors pg 0.6 is active+clean+inconsistent, acting [0,1,2] 2 scrub errors
[ceph: root@host01 /]# ceph health detail HEALTH_ERR 1 pgs inconsistent; 2 scrub errors pg 0.6 is active+clean+inconsistent, acting [0,1,2] 2 scrub errors
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定放置组
不一致
的原因。在 PG 中启动深度清理过程:
语法
ceph pg deep-scrub ID
ceph pg deep-scrub ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
inconsistent
的 PG 的ID
替换 ID,例如:[ceph: root@host01 /]# ceph pg deep-scrub 0.6 instructing pg 0.6 on osd.0 to deep-scrub
[ceph: root@host01 /]# ceph pg deep-scrub 0.6 instructing pg 0.6 on osd.0 to deep-scrub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索
ceph -w
的输出,以查找与该放置组相关的任何消息:语法
ceph -w | grep ID
ceph -w | grep ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
inconsistent
的 PG 的ID
替换 ID,例如:[ceph: root@host01 /]# ceph -w | grep 0.6 2022-05-26 01:35:36.778215 osd.106 [ERR] 0.6 deep-scrub stat mismatch, got 636/635 objects, 0/0 clones, 0/0 dirty, 0/0 omap, 0/0 hit_set_archive, 0/0 whiteouts, 1855455/1854371 bytes. 2022-05-26 01:35:36.788334 osd.106 [ERR] 0.6 deep-scrub 1 errors
[ceph: root@host01 /]# ceph -w | grep 0.6 2022-05-26 01:35:36.778215 osd.106 [ERR] 0.6 deep-scrub stat mismatch, got 636/635 objects, 0/0 clones, 0/0 dirty, 0/0 omap, 0/0 hit_set_archive, 0/0 whiteouts, 1855455/1854371 bytes. 2022-05-26 01:35:36.788334 osd.106 [ERR] 0.6 deep-scrub 1 errors
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果输出包含与以下类似的错误消息,您可以修复
不一致的
PG。详情请参阅 修复不一致的放置组。语法
PG.ID shard OSD: soid OBJECT missing attr , missing attr _ATTRIBUTE_TYPE PG.ID shard OSD: soid OBJECT digest 0 != known digest DIGEST, size 0 != known size SIZE PG.ID shard OSD: soid OBJECT size 0 != known size SIZE PG.ID deep-scrub stat mismatch, got MISMATCH PG.ID shard OSD: soid OBJECT candidate had a read error, digest 0 != known digest DIGEST
PG.ID shard OSD: soid OBJECT missing attr , missing attr _ATTRIBUTE_TYPE PG.ID shard OSD: soid OBJECT digest 0 != known digest DIGEST, size 0 != known size SIZE PG.ID shard OSD: soid OBJECT size 0 != known size SIZE PG.ID deep-scrub stat mismatch, got MISMATCH PG.ID shard OSD: soid OBJECT candidate had a read error, digest 0 != known digest DIGEST
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果输出包含与以下类似的错误消息,则无法安全地修复
不一致的
PG,因为您可以丢失数据。在这种情况下创建一个支持问题单。详情请参阅联系红帽支持。PG.ID shard OSD: soid OBJECT digest DIGEST != known digest DIGEST PG.ID shard OSD: soid OBJECT omap_digest DIGEST != known omap_digest DIGEST
PG.ID shard OSD: soid OBJECT digest DIGEST != known digest DIGEST PG.ID shard OSD: soid OBJECT omap_digest DIGEST != known omap_digest DIGEST
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.4. unclean PG 复制链接链接已复制到粘贴板!
ceph health
命令返回类似如下的错误消息:
HEALTH_WARN 197 pgs stuck unclean
HEALTH_WARN 197 pgs stuck unclean
这意味着
如果 PG 未在 Ceph 配置文件中的 mon_pg_stuck_threshold
参数中指定的秒数达到 active+clean
状态,则 Ceph 会将其标记为 unclean
。mon_pg_stuck_threshold
的默认值为 300
秒。
如果放置组 不干净
,它包含没有复制 osd_pool_default_size
参数中指定的次数的对象。osd_pool_default_size
的默认值为 3
,这意味着 Ceph 会创建三个副本。
通常,unclean
放置组代表某些 OSD 可能处于 down
。
要排除此问题,请执行以下操作
确定哪些 OSD 为
down
:[ceph: root@host01 /]# ceph osd tree
[ceph: root@host01 /]# ceph osd tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 排除故障并修复 OSD 的问题。详情请参阅关闭 OSD。
7.1.5. 不活跃的放置组 复制链接链接已复制到粘贴板!
ceph health
命令返回类似如下的错误消息:
HEALTH_WARN 197 pgs stuck inactive
HEALTH_WARN 197 pgs stuck inactive
这意味着
如果 PG 在 Ceph 配置文件中的
mon_pg_stuck_threshold
参数中指定的秒数中未激活,Ceph 会将它标记为不活动。mon_pg_stuck_threshold
的默认值为 300
秒。
通常,inactive
放置组代表某些 OSD 可能处于 down
。
要排除此问题,请执行以下操作
确定哪些 OSD 为
down
:ceph osd tree
# ceph osd tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 排除故障并修复 OSD 的问题。
其它资源
7.1.6. 放置组已停机 复制链接链接已复制到粘贴板!
ceph health detail
命令报告一些放置组 已停机
:
这意味着
在某些情况下,对等进程会被阻止,这会阻止放置组变为活跃且可用。通常,OSD 失败会导致对等失败。
要排除此问题,请执行以下操作
确定什么阻塞了对等进程:
语法
ceph pg ID query
ceph pg ID query
使用处于 down
的 PG 的 ID
替换 ID:
示例
recovery_state
部分包含有关对等进程被阻止的信息。
-
如果输出包含
peering 因 osds 错误消息而被阻止
,请参阅 Down OSD。 - 如果您看到任何其他错误消息,请创建一个支持问题单。详情请参阅联系红帽支持服务。
7.1.7. Unfound objects 复制链接链接已复制到粘贴板!
ceph health
命令返回一个与以下内容类似的错误消息,其中包含 unfound
关键字:
HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)
HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)
这意味着
当知道这些对象或它们的较新副本存在但无法找到它们时,Ceph 会将其标记为 unfound
。因此,Ceph 无法恢复此类对象并继续恢复过程。
一个 Situation 示例
放置组将数据存储在 osd.1
和 osd.2
上。
-
OSD.1
停机
。 -
OSD.2
处理一些写入操作。 -
OSD.1
启动
。 -
osd.1
和osd.2
之间的对等进程启动,osd.1
中缺少的对象被排队以进行恢复。 -
在 Ceph 复制新对象之前,
osd.2
会停机
。
因此,osd.1
知道这些对象存在,但没有具有对象副本的 OSD。
在这种情况下,Ceph 正在等待故障节点再次可访问,且 未找到
的对象会阻止恢复过程。
要排除此问题,请执行以下操作
登录到 Cephadm shell:
示例
cephadm shell
[root@host01 ~]# cephadm shell
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定哪个放置组包含
未找到
对象:[ceph: root@host01 /]# ceph health detail HEALTH_WARN 1 pgs recovering; 1 pgs stuck unclean; recovery 5/937611 objects degraded (0.001%); 1/312537 unfound (0.000%) pg 3.8a5 is stuck unclean for 803946.712780, current state active+recovering, last acting [320,248,0] pg 3.8a5 is active+recovering, acting [320,248,0], 1 unfound recovery 5/937611 objects degraded (0.001%); **1/312537 unfound (0.000%)**
[ceph: root@host01 /]# ceph health detail HEALTH_WARN 1 pgs recovering; 1 pgs stuck unclean; recovery 5/937611 objects degraded (0.001%); 1/312537 unfound (0.000%) pg 3.8a5 is stuck unclean for 803946.712780, current state active+recovering, last acting [320,248,0] pg 3.8a5 is active+recovering, acting [320,248,0], 1 unfound recovery 5/937611 objects degraded (0.001%); **1/312537 unfound (0.000%)**
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出放置组的更多信息:
语法
ceph pg ID query
ceph pg ID query
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用包含未找到对象的放置组的
ID
替换ID
:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow might_have_unfound
部分包含 Ceph 试图定位未找到
对象的 OSD:-
已探测到
的状态表示 Ceph 无法找到该 OSD 中的未找到
对象。 -
osd 为 down
状态表示 Ceph 无法联系该 OSD。
-
-
对标记为
down
的 OSD 进行故障排除。详情请参阅关闭 OSD。 -
如果您无法修复导致 OSD
停机
的问题,请创建一个支持问题单。详情请参阅联系红帽支持团队。