5.2. 大多数常见 Ceph OSD 错误
下表列出了 ceph 运行状况详细信息
命令返回或包含在 Ceph 日志中的最常见错误消息:这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复问题的特定程序。
5.2.1. 先决条件
- 对 Ceph OSD 节点的根级别访问权限.
5.2.2. Ceph OSD 错误消息
常见 Ceph OSD 错误消息和可能的修复表。
错误消息 | 请查看 |
---|---|
| |
| |
| |
| |
| |
| |
| |
|
5.2.3. Ceph 日志中的常见 Ceph OSD 错误消息
Ceph 日志中常见 Ceph OSD 错误消息的列表,以及可能的修复链接。
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 主集群日志 | |
| OSD 日志 |
5.2.4. 完整 OSD
ceph 运行状况详情
命令返回类似如下的错误消息:
HEALTH_ERR 1 full osds osd.3 is full at 95%
此 Means 是什么
Ceph 可以防止客户端在完整的 OSD 节点上执行 I/O 操作,以避免数据丢失。当集群达到 mon
消息。默认情况下,此参数设置为 _osd_full_ratio 参数设定的容量时,它会返回 HEALTH_
ERR full osds0.95
,即集群容量的 95%。
要排除这个问题,请执行以下操作
确定使用原始存储的百分比(%RAW USED
):
# ceph df
如果 %RAW USED
超过 70-75%,您可以:
- 删除不必要的数据.这是避免生产停机时间的短期解决方案。
- 通过添加新 OSD 节点来扩展集群。这是红帽推荐的长期解决方案。
其它资源
- 《 红帽 Ceph 存储故障排除指南 》中的 近乎完整的 OSDS.
- 详情请参阅从完整存储集群中删除数据。
5.2.5. 回填 full OSD
ceph 运行状况详情
命令返回类似如下的错误消息:
health: HEALTH_WARN 3 backfillfull osd(s) Low space hindering backfill (add storage if this doesn't resolve itself): 32 pgs backfill_toofull
这意味着
当一个或多个 OSD 超过 backfillfull 阈值时,Ceph 会阻止数据重新平衡此设备。这是一个早期警告,重新平衡可能无法完成,集群正在完全接近。默认的 backfullfull 阈值为 90%。
要排除这个问题,请执行以下操作
按池检查使用量:
ceph df
如果 %RAW USED
超过 70-75%,您可以执行以下操作之一:
- 删除不必要的数据.这是避免生产停机时间的短期解决方案。
- 通过添加新 OSD 节点来扩展集群。这是红帽推荐的长期解决方案。
增加包含
back
的 OSD 的回填 full 比率,以允许恢复过程继续。尽快在集群中添加新存储,或移除数据以防止填充更多 OSD。full
_toofull语法
ceph osd set-backfillfull-ratio VALUE
VALUE 的范围为 0.0 到 1.0。
示例
[ceph: root@host01/]# ceph osd set-backfillfull-ratio 0.92
其它资源
- 《 红帽 Ceph 存储故障排除指南 》中的 近乎完整的 OSDS.
- 详情请参阅从完整存储集群中删除数据。
5.2.6. nearfull OSD
ceph 运行状况详情
命令返回类似如下的错误消息:
HEALTH_WARN 1 nearfull osds osd.2 is near full at 85%
此 Means 是什么
当集群达到 mon
消息。默认情况下,此参数设置为 osd nearfull 比率 defaults 参数所设置的容量时,Ceph 会返回 nearfull osd
s0.85
,即集群容量的 85%。
Ceph 以尽可能最佳的方式分发基于 CRUSH 层次结构的数据,但它不能保证均匀分布。数据分布不均匀 和 nearfull osds
信息的主要原因是:
- OSD 在集群中的 OSD 节点之间没有平衡。也就是说,一些 OSD 节点托管的 OSD 比其他 OSD 高得多,或者 CRUSH map 中部分 OSD 的权重不足以满足其容量要求。
- PG 计数与 OSD 数量、用例、每个 OSD 目标 PG 和 OSD 利用率不同。
- 集群使用不当的 CRUSH 可调项。
- OSD 的后端存储几乎已满。
排除此问题,请执行以下操作:
- 验证 PG 计数是否足够,并在需要时增加。
- 验证您是否使用最优于集群版本的 CRUSH 可调项,如果不是,请进行调整。
- 根据利用率更改 OSD 的权重。
启用 Ceph 管理器均衡器模块,优化 OSD 之间的 PG 放置,从而实现均衡分布
示例
[root@mon ~]# ceph mgr module enable balancer
确定 OSD 使用的磁盘上保留多少空间。
查看 OSD 一般使用的空间量:
[root@mon ~]# ceph osd df
查看 OSD 在特定节点上使用的空间:从包含
接近ful
OSD 的节点运行以下命令:$ df
- 如果需要,添加新 OSD 节点。
其它资源
- 完整 OSD
- 请参阅《 红帽 Ceph 存储操作指南》中的使用 Ceph管理器平衡器模块 章节。
- 请参阅红帽 Ceph 存储 4 的存储策略指南中的设置 OSD Weight by Utilization 部分。
- 详细信息,请参见《红帽 Ceph 存储 4 存储策略 指南》中的 CRUSH 可调项 小节,以及如何测试对红帽客户门户上红帽 Ceph 存储中 OSD 的 PG 分布的影响 CRUSH map 可调项。
- 详情请参阅增加 PG。
5.2.7. 故障 OSD
ceph health
命令返回类似如下的错误:
HEALTH_WARN 1/3 in osds are down
此 Means 是什么
由于服务故障或与其他 OSD 通信存在问题,其中一个 ceph-osd
进程不可用。因此,存活的 ceph-osd
守护进程会向 monitor 报告此故障。
如果 ceph-osd
守护进程未在运行,则底层 OSD 驱动器或文件系统已损坏,或者存在一些其他错误(如缺少密钥环)会阻止守护进程启动。
在大多数情况下,网络问题会导致 ceph-osd
守护进程正在运行但依然标记为 down
时的情况。
要排除这个问题,请执行以下操作
确定哪个 OSD 处于
down 状态
:[root@mon ~]# ceph health detail HEALTH_WARN 1/3 in osds are down osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
尝试重启
ceph-osd
守护进程:[root@mon ~]# systemctl restart ceph-osd@OSD_NUMBER
将
OSD_NUMBER
替换为down
的 OSD ID,例如:[root@mon ~]# systemctl restart ceph-osd@0
-
如果您无法启动
ceph-osd
,请按照ceph-osd
守护进程中的步骤启动。 -
如果您能够启动
ceph-osd
守护进程但已标记为down
,请按照ceph-osd
守护进程中的步骤运行,但仍标记为"down"。
-
如果您无法启动
ceph-osd
守护进程无法启动
- 如果您的节点包含多个 OSD(通常超过 12 倍),请验证默认最多线程数(PID 数)是否足够。有关 详细信息,请参阅增加 PID 数。
-
验证 OSD 数据和日志分区是否已正确挂载。您可以使用
ceph-volume lvm list 命令列出
与 Ceph 存储群集关联的所有设备和卷,然后手动检查它们是否已正确挂载。详情请查看mount(8)
手册页。 -
如果您收到错误
的密钥环:缺少密钥环,无法使用 cephx 进行身份验证
错误消息,OSD 缺少密钥环。 如果您收到错误
ROR:无法对 /var/lib/ceph/osd/ceph-1 错误消息打开 OSD 超级块
,ceph-osd
守护进程无法读取底层文件系统。有关如何排除故障并修复此错误的说明,请参阅以下步骤。注意如果在 OSD 主机引导期间返回此错误消息,请打开支持票据,因为这可能表示 在红帽 Bugzilla 1439210 中跟踪了一个已知问题。
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在裸机部署的
/var/log/ceph/
目录中。注意对于基于容器的部署,Ceph 会生成日志到
journald
。您可以通过在 Ceph 配置文件中 [global] 下将log_to_file
参数设置为true
,以启用记录到/var/log/ceph
中的文件。如需了解更多详细信息 ,请参阅了解 ceph 日志。EIO
错误消息类似如下,表示底层磁盘失败:为修复此问题,请替换底层 OSD 磁盘。详情请参阅 替换 OSD 驱动器。
如果日志包含任何其他
FAILED assert
错误,如以下错误,请打开支持票据。有关 详细信息,请参阅联系红帽支持团队。FAILED assert(0 == "hit suicide timeout")
检查
dmesg
输出是否有底层文件系统或磁盘的错误:$ dmesg
-
如果
dmesg
输出包含任何SCSI 错误错误消息
,请参阅红帽客户门户网站中的 SCSI Error Codes Solution Finder 解决方案,以确定解决问题的最佳方法。 - 或者,如果您无法修复底层文件系统,请替换 OSD 驱动器。详情请参阅 替换 OSD 驱动器。
-
如果
如果 OSD 因分段错误而出现故障,如以下 OSD,请收集必要的信息并打开支持票据。有关 详细信息,请参阅联系红帽支持团队。
Caught signal (Segmentation fault)
ceph-osd
正在运行,但仍标记为 down
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在裸机部署的
/var/log/ceph/
目录中。注意对于基于容器的部署,Ceph 会生成日志到
journald
。您可以通过在 Ceph 配置文件中 [global] 下将log_to_file
参数设置为true
,以启用记录到/var/log/ceph
中的文件。如需了解更多详细信息 ,请参阅了解 ceph 日志。如果日志中包含类似于下文的错误消息,请参阅 Flapping OSD。
wrongly marked me down heartbeat_check: no reply from osd.2 since back
- 如果您看到任何其他错误,请打开支持票据。有关 详细信息,请参阅联系红帽支持团队。
其它资源
- Flapping OSD
- 过时 PG
- 请参阅《 红帽 Ceph 存储管理指南》中的按实例启动、停止和重新启动 Ceph守护进程 一节。
- 请参阅《 红帽 Ceph 存储管理指南》中的管理 Ceph密钥环 章节。
5.2.8. Flapping OSD
ceph -w | grep osds
命令显示 OSD 重复为 down
,然后在短时间内 再次运行
:
# ceph -w | grep osds 2021-04-05 06:27:20.810535 mon.0 [INF] osdmap e609: 9 osds: 8 up, 9 in 2021-04-05 06:27:24.120611 mon.0 [INF] osdmap e611: 9 osds: 7 up, 9 in 2021-04-05 06:27:25.975622 mon.0 [INF] HEALTH_WARN; 118 pgs stale; 2/9 in osds are down 2021-04-05 06:27:27.489790 mon.0 [INF] osdmap e614: 9 osds: 6 up, 9 in 2021-04-05 06:27:36.540000 mon.0 [INF] osdmap e616: 9 osds: 7 up, 9 in 2021-04-05 06:27:39.681913 mon.0 [INF] osdmap e618: 9 osds: 8 up, 9 in 2021-04-05 06:27:43.269401 mon.0 [INF] osdmap e620: 9 osds: 9 up, 9 in 2021-04-05 06:27:54.884426 mon.0 [INF] osdmap e622: 9 osds: 8 up, 9 in 2021-04-05 06:27:57.398706 mon.0 [INF] osdmap e624: 9 osds: 7 up, 9 in 2021-04-05 06:27:59.669841 mon.0 [INF] osdmap e625: 9 osds: 6 up, 9 in 2021-04-05 06:28:07.043677 mon.0 [INF] osdmap e628: 9 osds: 7 up, 9 in 2021-04-05 06:28:10.512331 mon.0 [INF] osdmap e630: 9 osds: 8 up, 9 in 2021-04-05 06:28:12.670923 mon.0 [INF] osdmap e631: 9 osds: 9 up, 9 in
此外,Ceph 日志包含类似于以下的错误消息:
2021-07-25 03:44:06.510583 osd.50 127.0.0.1:6801/149046 18992 : cluster [WRN] map e600547 wrongly marked me down
2021-07-25 19:00:08.906864 7fa2a0033700 -1 osd.254 609110 heartbeat_check: no reply from osd.2 since back 2021-07-25 19:00:07.444113 front 2021-07-25 18:59:48.311935 (cutoff 2021-07-25 18:59:48.906862)
此 Means 是什么
引发 OSD 的主要原因是:
- 某些存储集群操作(如清理或恢复)通常会花费大量时间,例如,如果您对具有大型索引或大型 PG 的对象执行这些操作。通常,在完成这些操作后,flapping OSD 问题会得到解决。
-
与底层物理硬件相关的问题.在本例中,ceph
运行状况详细信息
命令也会返回速度较慢的请求
错误消息。 - 网络相关问题.
Ceph OSD 无法管理存储集群的专用网络出现故障的情况,或者显著延迟位于面向公共客户端的网络上。
Ceph OSD 使用专用网络 将 heartbeat 数据包互相发送,以注明它们是 up 和 in
。如果私有存储集群网络无法正常工作,OSD 无法发送和接收心跳数据包。因此,它们互相报告为
停机到
Ceph 监控器,同时将自身标记为 up
。
Ceph 配置文件中的以下参数会影响此行为:
参数 | 描述 | 默认值 |
---|---|---|
|
OSD 等待 heartbeat 数据包返回多长时间,然后将 OSD 报告为 | 20 秒 |
|
在 Ceph 监控将该 OSD 标记为 | 2 |
此表显示,在默认配置中,Ceph 监控器将 OSD 标记为 down
,只要只有一个 OSD 制作了三个不同的报告,其中的第一个 OSD 处于 down 状态
。在某些情况下,如果单个主机遇到网络问题,整个群集可能会遇到 OSD 出现问题。这是因为主机上的 OSD 将报告集群中的其他 OSD 为 down
。
Flanping OSD 方案不包括 OSD 进程启动时,然后立即终止的情况。
要排除这个问题,请执行以下操作
再次检查
ceph 运行状况详细信息
命令的输出。如果其中包含较慢的请求
错误消息,请参阅 如何排除此问题。# ceph health detail HEALTH_WARN 30 requests are blocked > 32 sec; 3 osds have slow requests 30 ops are blocked > 268435 sec 1 ops are blocked > 268435 sec on osd.11 1 ops are blocked > 268435 sec on osd.18 28 ops are blocked > 268435 sec on osd.39 3 osds have slow requests
确定哪些 OSD 标记为
down
以及它们所在的节点上:# ceph osd tree | grep down
- 在包含 flapping OSD 的节点上,对任何网络问题进行故障排除并修复。详情请参阅对 网络问题进行故障排除。
或者,您可以通过设置
noup 和 no
down
标记来临时强制监控器停止将 OSD 标记为down
和up
:# ceph osd set noup # ceph osd set nodown
重要使用
noup
和nodown
标志不会修复问题的根本原因,而是仅防止 OSD 崩溃。要打开 支持问题单,请参阅联系红帽支持团队部分以了解 详细信息。
Ceph OSD 节点上、网络交换机级别上的 MTU 错误配置或两者可能会引起 Fpping OSD。要解决这个问题,请在所有存储集群节点上将 MTU 设置为统一大小,包括在核心上和通过计划停机访问网络交换机。不要调优 osd heartbeat min 大小
,因为更改此设置可能会隐藏网络中的问题,也不会解决实际的网络不一致。
其它资源
- 详情请参阅《 红帽 Ceph 存储 安装指南》中的验证红帽 Ceph 存储 网络配置 一节。
- 有关详细信息,请参见《 红帽 Ceph 存储架构指南》中的 Ceph 心跳 章节。
- 请参阅《 红帽 Ceph 存储故障排除指南 》中的流 请求或请求 部分。
- 如需调优 清理流程,请参阅红帽知识库解决方案如何降低对红帽 Ceph 存储群集的清理影响。
5.2.9. 请求或请求速度慢
ceph-osd
守护进程较慢响应请求,ceph 运行状况详细信息
命令返回类似如下的错误消息:
HEALTH_WARN 30 requests are blocked > 32 sec; 3 osds have slow requests 30 ops are blocked > 268435 sec 1 ops are blocked > 268435 sec on osd.11 1 ops are blocked > 268435 sec on osd.18 28 ops are blocked > 268435 sec on osd.39 3 osds have slow requests
此外,Ceph 日志包含类似于以下的错误消息:
2015-08-24 13:18:10.024659 osd.1 127.0.0.1:6812/3032 9 : cluster [WRN] 6 slow requests, 6 included below; oldest blocked for > 61.758455 secs
2016-07-25 03:44:06.510583 osd.50 [WRN] slow request 30.005692 seconds old, received at {date-time}: osd_op(client.4240.0:8 benchmark_data_ceph-1_39426_object7 [write 0~4194304] 0.69848840) v4 currently waiting for subops from [610]
此 Means 是什么
请求速度较慢的 OSD 是每个无法在 osd_op_complaint_time
参数定义的时间内队列中每秒 I/O 操作(IOPS)服务的 OSD。默认情况下,此参数设置为 30 秒。
造成 OSD 缓慢请求的主要原因是:
- 与底层硬件相关的问题,如磁盘驱动器、主机、机架或网络交换机
- 网络相关问题.这些问题通常与闪烁的 OSD 连接。详情请参阅 Flapping OSD。
- 系统负载
下表显示了慢速请求的类型。使用 dump_historic_ops
管理 socket 命令来确定慢速请求的类型。有关管理套接字的详细信息,请参见《红帽 Ceph 存储 4 管理指南 》中的" 使用 Ceph 管理套接字 "一节。
请求类型慢 | 描述 |
---|---|
| OSD 正在等待在 PG 上获取操作的锁定。 |
| OSD 正在等待副本 OSD 将操作应用到日志。 |
| OSD 未达到任何主要操作里程碑。 |
| OSD 尚未复制指定次数的对象。 |
要排除这个问题,请执行以下操作
- 确定请求缓慢或块请求的 OSD 是否共享共同的硬件部分,如磁盘驱动器、主机、机架或网络交换机。
如果 OSD 共享磁盘:
使用
smartmontools
实用程序检查磁盘或日志的健康状况,以确定磁盘上的任何错误。注意smartmontools
程序包含在smartmontools
软件包中。使用
iostat
实用程序获取 OSD 磁盘上的 I/O 等待报告(%iowai
),以确定磁盘是否负载过重。注意The
iostat
实用程序包含在sysstat
软件包中。
如果 OSD 与另一个服务共享节点:
- 检查 RAM 和 CPU 使用率
-
使用
netstat
实用程序查看网络接口控制器(NIC)上的网络统计信息,并对任何网络问题进行故障排除。如需更多信息,请参阅对 网络问题进行故障排除。
- 如果 OSD 共享机架,请检查机架的网络交换机。例如,如果您使用巨型帧,请验证路径中的 NIC 是否已设置了巨型帧。
- 如果您无法确定请求速度较慢的 OSD 共享的硬件部分,或者无法对硬件和网络问题进行故障排除和修复,请打开支持票据。有关 详细信息,请参阅联系红帽支持团队。
其它资源
- 详情请参阅 红帽 Ceph 存储管理指南中的使用 Ceph管理套接字 一节。