第 5 章 OSD 故障排除
本章包含关于如何修复与 Ceph OSD 相关的最常见错误的信息。
开始前
- 验证您的网络连接。详情请查看 第 3 章 网络问题故障排除。
-
使用
ceph health
命令验证 monitor 是否具有仲裁。如果命令返回健康状态(HEALTH_OK
、HEALTH_WARN
或HEALTH_ERR
),monitors 可以组成仲裁。如果没有,请首先解决任何 monitor 问题。详情请查看 第 4 章 监控器故障排除。有关ceph health
的详情请查看 第 1.2 节 “了解ceph health
命令的输出”。 - (可选)停止重新平衡过程,以节省时间和资源。详情请查看 第 5.2 节 “停止并启动重新平衡”。
5.1. 与 OSD 相关的大多数通用错误消息
下表列出了 ceph health detail
命令返回或 Ceph 日志中最常包含的错误消息。这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复问题的特定程序。
错误消息 | 请查看 |
---|---|
| |
| |
| |
| |
| |
| |
|
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 主集群日志 | |
| OSD 日志 | |
| OSD 日志 |
5.1.1. 完整 OSD
ceph health detail
命令返回类似如下的错误消息:
HEALTH_ERR 1 full osds osd.3 is full at 95%
此 Means 是什么
Ceph 可以防止客户端在完整的 OSD 节点上执行 I/O 操作,以避免数据丢失。当集群达到由 mon_osd_full_ratio
参数设置的容量时,它会返回 HEALTH_ERR full osds
消息。默认情况下,这个参数被设置为 0.95
,即集群容量的 95%。
要排除这个问题,请执行以下操作
确定使用了原始存储(%RAW USED
)的百分比:
# ceph df
如果 %RAW USED
超过 70-75%,您可以:
- 删除不必要的数据.这是避免生产停机时间的短期解决方案。详情请查看 第 5.6 节 “从完全集群中删除数据”。
- 通过添加新 OSD 节点来扩展集群。这是红帽推荐的长期解决方案。详情请参阅《红帽 Ceph 存储 3 管理指南 》中的添加和删除 OSD 节点 章节。
另请参阅
5.1.2. nearfull OSD
ceph health detail
命令返回类似如下的错误消息:
HEALTH_WARN 1 nearfull osds osd.2 is near full at 85%
此 Means 是什么
当集群达到 mon osd nearfull ratio defaults
参数设定的容量时,Ceph 会返回 nearfull osds
消息。默认情况下,这个参数被设置为 0.85
,即集群容量的 85%。
Ceph 以尽可能最佳的方式分发基于 CRUSH 层次结构的数据,但它不能保证均匀分布。数据分布不畅和 nearfull osds
信息的主要原因是:
- OSD 在集群中的 OSD 节点之间没有平衡。也就是说,一些 OSD 节点托管的 OSD 比其他 OSD 高得多,或者 CRUSH map 中部分 OSD 的权重不足以满足其容量要求。
- PG 计数与 OSD 数量、用例、每个 OSD 目标 PG 和 OSD 利用率不同。
- 集群使用不当的 CRUSH 可调项。
- OSD 的后端存储几乎已满。
排除此问题,请执行以下操作:
- 验证 PG 计数是否足够,并在需要时增加。详情请查看 第 7.5 节 “增加 PG 数量”。
- 验证您是否使用最优于集群版本的 CRUSH 可调项,如果不是,请进行调整。详情请查看红帽 Ceph 存储 3 存储 3 存储策略 指南中的 CRUSH 可调项小节 ,以及如何测试对红帽客户门户上红帽 Ceph 存储中 OSD 的 PG 分布的影响 CRUSH map 可调项。
- 根据利用率更改 OSD 的权重。请参阅红帽 Ceph 存储 3 的存储策略指南中的设置 OSD Weight by Utilization 部分。
确定 OSD 使用的磁盘上保留多少空间。
查看 OSD 一般使用的空间量:
# ceph osd df
查看 OSD 在特定节点上使用的空间:从包含
nearful
OSD 的节点运行以下命令:$ df
- 如果需要,添加新 OSD 节点。请参阅《红帽 Ceph 存储 3 管理指南 》中的 添加和删除 OSD 节点 章节。
另请参阅
5.1.3. 个或更多 OSD 发生故障
ceph health
命令返回类似如下的错误:
HEALTH_WARN 1/3 in osds are down
此 Means 是什么
其中一个 ceph-osd
进程因为可能的服务故障或与其他 OSD 通信时出现问题而不可用。因此,存活的 ceph-osd
守护进程会向 monitor 报告这个失败。
如果 ceph-osd
守护进程没有运行,底层 OSD 驱动器或文件系统会损坏,或者某些其他错误(如缺少密钥环)会阻止守护进程启动。
在大多数情况下,网络问题会导致 ceph-osd
守护进程正在运行,但仍标记为 down
。
要排除这个问题,请执行以下操作
确定哪个 OSD 为
down
:# 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
守护进程:systemctl restart ceph-osd@<OSD-number>
使用
down
的 OSD 的 ID 替换<OSD-number>
,例如:# systemctl restart ceph-osd@0
-
如果您无法启动
ceph-osd
,请按照ceph-osd
守护进程中的步骤启动。 -
如果您能够启动
ceph-osd
守护进程,但标记为down
,请按照ceph-osd
守护进程正在运行但仍标记为down
的步骤操作。
-
如果您无法启动
ceph-osd
守护进程无法启动
- 如果您有一个包含多个 OSD 的节点(通常比 12 多个 OSD),请验证默认最多线程数(PID 数)是否足够。详情请查看 第 5.5 节 “增加 PID 数量”。
验证 OSD 数据和日志分区是否已正确挂载:
# ceph-disk list ... /dev/vdb : /dev/vdb1 ceph data, prepared /dev/vdb2 ceph journal /dev/vdc : /dev/vdc1 ceph data, active, cluster ceph, osd.1, journal /dev/vdc2 /dev/vdc2 ceph journal, for /dev/vdc1 /dev/sdd1 : /dev/sdd1 ceph data, unprepared /dev/sdd2 ceph journal
如果
ceph-disk
将分区标记为active
,则会挂载分区。如果分区是prepared
,挂载它。详情请查看 第 5.3 节 “挂载 OSD 数据分区”。如果分区是unprepared
,则必须在挂载前首先准备它。请参阅《红帽 Ceph 存储 3 管理指南 》中的准备 OSD 数据和日志驱动器一节。-
如果您收到
ERROR: missing keyring, cannot use cephx for authentication
错误消息,则 OSD 缺少密钥环。请参阅《红帽 Ceph 存储 3 管理指南》 中的 密钥环管理部分。 如果您收到
ERROR: unable to open OSD superblock on /var/lib/ceph/osd/ceph-1
错误消息,ceph-osd
守护进程将无法读取底层文件系统。有关如何排除故障并修复此错误的说明,请参阅以下步骤。注意如果在 OSD 主机引导期间返回此错误消息,请打开支持票据,因为这可能表示 在红帽 Bugzilla 1439210 中跟踪了一个已知问题。详情请查看 第 9 章 联系红帽支持服务。
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在
/var/log/ceph/
目录中。类似于以下内容的
EIO
错误消息表示底层磁盘失败:FAILED assert(!m_filestore_fail_eio || r != -5)
为修复此问题,请替换底层 OSD 磁盘。详情请查看 第 5.4 节 “替换 OSD 驱动器”。
如果日志包含任何其他
FAILED assert
错误,如以下错误,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。FAILED assert(0 == "hit suicide timeout")
检查
dmesg
输出是否有底层文件系统或磁盘的错误:$ dmesg
error -5
错误消息类似如下,表示底层 XFS 文件系统崩溃。有关如何解决这个问题的详情,请查看红帽客户门户网站中的 "xfs_log_force: error -5 返回"? 解决方案的含义。xfs_log_force: error -5 returned
-
如果
dmesg
输出包含任何SCSI error
错误消息,请参阅红帽客户门户网站中的 SCSI Error Codes Solution Finder 解决方案,以确定解决问题的最佳方法。 - 或者,如果您无法修复底层文件系统,请替换 OSD 驱动器。详情请查看 第 5.4 节 “替换 OSD 驱动器”。
如果 OSD 因分段错误而出现故障,如以下 OSD,请收集必要的信息并打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
Caught signal (Segmentation fault)
ceph-osd
正在运行,但仍标记为 down
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在
/var/log/ceph/
目录中。如果日志包含类似以下的错误消息,请参阅 第 5.1.4 节 “Flapping OSD”。
wrongly marked me down heartbeat_check: no reply from osd.2 since back
- 如果您看到任何其他错误,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
另请参阅
- 第 5.1.4 节 “Flapping OSD”
- 第 7.1.1 节 “过时的 PG”
- 《红帽 Ceph 存储 3 管理指南 》 中的按实例启动、停止和重新启动后台程序 一节
5.1.4. Flapping OSD
ceph -w | grep osds
命令会在短时间内重复显示 OSD 为 down
,然后再次显示 up
:
# ceph -w | grep osds 2017-04-05 06:27:20.810535 mon.0 [INF] osdmap e609: 9 osds: 8 up, 9 in 2017-04-05 06:27:24.120611 mon.0 [INF] osdmap e611: 9 osds: 7 up, 9 in 2017-04-05 06:27:25.975622 mon.0 [INF] HEALTH_WARN; 118 pgs stale; 2/9 in osds are down 2017-04-05 06:27:27.489790 mon.0 [INF] osdmap e614: 9 osds: 6 up, 9 in 2017-04-05 06:27:36.540000 mon.0 [INF] osdmap e616: 9 osds: 7 up, 9 in 2017-04-05 06:27:39.681913 mon.0 [INF] osdmap e618: 9 osds: 8 up, 9 in 2017-04-05 06:27:43.269401 mon.0 [INF] osdmap e620: 9 osds: 9 up, 9 in 2017-04-05 06:27:54.884426 mon.0 [INF] osdmap e622: 9 osds: 8 up, 9 in 2017-04-05 06:27:57.398706 mon.0 [INF] osdmap e624: 9 osds: 7 up, 9 in 2017-04-05 06:27:59.669841 mon.0 [INF] osdmap e625: 9 osds: 6 up, 9 in 2017-04-05 06:28:07.043677 mon.0 [INF] osdmap e628: 9 osds: 7 up, 9 in 2017-04-05 06:28:10.512331 mon.0 [INF] osdmap e630: 9 osds: 8 up, 9 in 2017-04-05 06:28:12.670923 mon.0 [INF] osdmap e631: 9 osds: 9 up, 9 in
此外,Ceph 日志包含类似于以下的错误消息:
2016-07-25 03:44:06.510583 osd.50 127.0.0.1:6801/149046 18992 : cluster [WRN] map e600547 wrongly marked me down
2016-07-25 19:00:08.906864 7fa2a0033700 -1 osd.254 609110 heartbeat_check: no reply from osd.2 since back 2016-07-25 19:00:07.444113 front 2016-07-25 18:59:48.311935 (cutoff 2016-07-25 18:59:48.906862)
此 Means 是什么
引发 OSD 的主要原因是:
- 某些集群操作(如清理或恢复)通常需要花费大量时间。例如,如果您对具有大型索引或大型放置组的对象执行这些操作。通常,在完成这些操作后,flapping OSD 问题会得到解决。
-
与底层物理硬件相关的问题.在这种情况下,
ceph health detail
命令也会返回slow requests
错误消息。详情请查看 第 5.1.5 节 “请求速度较慢,请求被阻塞”。 - 网络相关问题.
当集群(后端)网络出现故障或开发显著延迟时,OSD 无法很好地处理这种情形,而公共(前端)网络运行最佳。
OSD 使用集群网络来互相发送 heartbeat 数据包,以注明它们是 up
和 in
。如果集群网络无法正常工作,OSD 无法发送和接收 heartbeat 数据包。因此,它们相互报告为 down
到 monitor,同时将自身标记为 up
。
Ceph 配置文件中的以下参数会影响此行为:
参数 | 描述 | 默认值 |
---|---|---|
|
OSD 在将 OSD 报告为 | 20 秒 |
|
监控将 OSD 标记为 | 2 |
此表显示,在默认配置中,如果只有一个 OSD 制作了三个不同报告,Ceph 监控器会将 OSD 标记为 down
。down
在某些情况下,如果单个主机遇到网络问题,整个群集可能会遇到 OSD 出现问题。这是因为主机上的 OSD 将报告群集中的其他 OSD 为 down
。
Flanping OSD 方案不包括 OSD 进程启动时,然后立即终止的情况。
要排除这个问题,请执行以下操作
再次检查
ceph health detail
命令的输出。如果包含slow requests
错误消息,请参阅 第 5.1.5 节 “请求速度较慢,请求被阻塞” 了解如何排除此问题的详情。# 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 的节点上,对任何网络问题进行故障排除并修复。详情请查看 第 3 章 网络问题故障排除。
或者,您可以通过设置
noup
和nodown
标志来临时强制监控器停止将 OSD 标记为down
和up
:# ceph osd set noup # ceph osd set nodown
重要使用
noup
和nodown
标志不会修复造成问题的根本原因,而是只防止 OSD 崩溃。如果无法自行修复并对错误进行故障排除,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。-
此外,可以通过在 Ceph 配置文件中设置
osd heartbeat min size = 100
,然后重新启动 OSD,来修复 flapping OSD。这会导致因为 MTU 错误配置解决了网络问题。
其它资源
- 针对 Red Hat Enterprise Linux 的红帽 Ceph 存储 3 安装指南 或 Ubuntu安装指南中的 验证红帽 Ceph 存储网络配置 一节
- 红帽 Ceph 存储 3 架构指南 中的 Heartbeating 部分
5.1.5. 请求速度较慢,请求被阻塞
ceph-osd
守护进程在响应请求时较慢,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
此外,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,它们无法在 osd_op_complaint_time
参数定义的时间内为队列中的每秒 I/O 操作(IOPS)提供服务。默认情况下,此参数设置为 30 秒。
造成 OSD 缓慢请求的主要原因是:
- 与底层硬件相关的问题,如磁盘驱动器、主机、机架或网络交换机
- 网络相关问题.这些问题通常与闪烁的 OSD 连接。详情请查看 第 5.1.4 节 “Flapping OSD”。
- 系统负载
下表显示了慢速请求的类型。使用 dump_historic_ops
管理 socket 命令来确定慢速请求的类型。有关管理套接字的详细信息,请参阅《红帽 Ceph 存储 3 管理指南》 中的使用管理 套接字 小节。
请求类型慢 | 描述 |
---|---|
| OSD 正在等待在 PG 上获取操作的锁定。 |
| OSD 正在等待副本 OSD 将操作应用到日志。 |
| OSD 未达到任何主要操作里程碑。 |
| OSD 尚未复制指定次数的对象。 |
要排除这个问题,请执行以下操作
- 确定请求缓慢或块请求的 OSD 是否共享共同的硬件部分,如磁盘驱动器、主机、机架或网络交换机。
如果 OSD 共享磁盘:
使用
smartmontools
工具检查磁盘或日志的健康状况,以确定磁盘中的任何错误。注意smartmontools
工具包括在smartmontools
软件包中。使用
iostat
实用程序获取 OSD 磁盘上的 I/O 等待报告(%iowai
),以确定磁盘是否负载过重。注意iostat
工具包括在sysstat
软件包中。
如果 OSD 共享主机:
- 检查 RAM 和 CPU 使用率
-
使用
netstat
实用程序查看网络接口控制器(NIC)上的网络统计信息,并对任何网络问题进行故障排除。如需更多信息,请参阅 第 3 章 网络问题故障排除。
- 如果 OSD 共享机架,请检查机架的网络交换机。例如,如果您使用巨型帧,请验证路径中的 NIC 是否已设置了巨型帧。
- 如果您无法确定请求速度较慢的 OSD 共享的硬件部分,或者无法对硬件和网络问题进行故障排除和修复,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
另请参阅
- 《红帽 Ceph 存储 3 管理指南 》中的使用管理 套接字 一节