Ceph存储系列(二十五) Ceph集群常见故障处理
1 | 作者:李晓辉 |
识别问题
在对 Ceph 问题进行故障排除时,第一步要确定是哪个 Ceph 组件造成了问题。有时,你可以在 ceph health detail
或 ceph health status
命令提供的信息中找到这一组件
以下故障排除检查清单推荐了后续步骤:
确定导致问题的 Ceph 组件。
为确定的组件设置调试日志并查看日志。
验证你的配置受到支持。
确定操作是速度缓慢还是卡滞不动。
集群运行状况故障排除
当运行状况检查失败时,集群运行状况会变为 HEALTH_WARN
或 HEALTH_ERR
ceph status
和 ceph health
命令可显示集群的运行状况。当集群运行状况为 HEALTH_WARN
或 HEALTH_ERR
时,可使用 ceph health detail
命令来查看运行状况检查消息,以便你可以开始对问题进行故障排除。
1 | [root@serverc ~]# ceph status |
忽略 Ceph 运行状况警报
已经知道相关警告并且当前不需要修复它们时可以忽略,例如,如果你关闭 OSD 以进行维护,则集群会报告 HEALTH_WARN
状态。你可忽略此警告消息,以避免运行状况检查影响报告的整体状态。
要忽略运行状况警报消息,请使用 ceph health
命令。
1 | [root@serverc ~]# ceph health detail |
忽略一下POOL_APP_NOT_ENABLED这个警告
1 | [root@serverc ~]# ceph health mute POOL_APP_NOT_ENABLED |
当你忽略某条运行状况消息时,如果运行状况进一步降级,Ceph 会自动取消忽略相应警报。例如,如果你的集群报告一个 OSD 停机,而你将忽略了该警报,则又有 OSD 停机时,Ceph 会自动取消忽略警告。可测量的运行状况警报不可忽略。
配置日志记录
可为集群中的每个子系统设置不同的日志记录级别。调试级别的范围为 1 到 20,其中 1 表示简洁,20 表示详细。
Ceph 不会将基于内存的日志发送到输出日志,除非遇到以下情况:
引发致命信号。
触发代码中的断言。
你提出了此要求。
要为输出日志级别和内存级别使用不同的调试级别,需使用斜杠 (/) 字符。例如,debug_mon = 1/5
表示将 ceph-mon
守护进程的输出日志级别设置为 1
,将其内存日志级别设置为 5
。
临时修改
1 | [root@serverc ~]# ceph tell osd.0 config set debug_ms 1/5 |
永久修改
1 | [root@serverc ~]# ceph config set osd.0 debug_ms 1/5 |
设置日志文件轮转
在默认位置 /var/log/ceph
下查看 Ceph 日志文件
可通过修改 /etc/logrotate.d/ceph
处的日志轮转配置来加快日志轮转。Cron 作业调度程序使用此文件来调度日志轮转。
参考以下例子
1 | rotate 7 |
将其放入crontab
1 | 30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1 |
处理 Cephx
默认情况下,所有 Ceph 命令都使用 client.admin
用户进行身份验证,但你可以通过使用 --name
和 --id
选项来指定用户名或用户 ID。
Cephx 的问题通常涉及以下方面:
密钥环或
ceph.conf
文件权限不正确。缺少密钥环和
ceph.conf
文件。给定用户的
cephx
权限错误或无效。使用ceph auth list
命令来确定问题。用户名错误或拼写不正确,这也可以使用
ceph auth list
命令来验证。
Ceph监视器故障排除
mon.X 停机(超出仲裁)
如果 Ceph MON 守护进程未在运行,则有错误阻止了守护进程的启动。
时钟偏移
此错误消息表示 MON 的时钟可能没有同步。mon_clock_drift_allowed
参数可控制集群在显示警告消息之前允许的最大时钟偏差。
Ceph OSDs故障处理
以下是最常见的 Ceph OSD 错误消息列表:
full osds
当集群达到 mon_osd_full_ratio
参数设置的容量时,Ceph 将返回 HEALTH_ERR full osds
消息。默认情况下,此参数设置为 0.95,即集群容量的 95%。
使用 ceph df
命令可确定已用原始存储的百分比,由 %RAW USED
列给出。如果原始存储的百分比超过 70%,则你可删除不必要的数据,或通过添加新的 OSD 节点来缩减集群。
nearfull osds
当集群达到 mon_osd_nearfull_ratio
参数设置的容量时,Ceph 将返回 nearfull osds
消息。默认情况下,此参数设置为 0.85,即集群容量的 85%。
出现此警告消息的主要原因有:
OSD 在集群中的 OSD 节点之间不均衡。
根据 OSD 的数量、用例、每个 OSD 的目标 PG 数以及 OSD 使用量,放置组的数量不正确。
集群使用了不适当的 CRUSH 可调项。
OSD 的后端存储几乎已满。
对此问题进行故障排除:
验证 PG 数是否足够。
验证你是否使用了针对集群版本优化的 CRUSH 可调项;如果没有,则进行调整。
根据利用率更改 OSD 的权重。
确定 OSD 使用的磁盘上有多少剩余空间。
osds are down
当 OSD 停机或抖动时,Ceph 会返回 osds are down
消息。出现此消息的主要原因是由于潜在故障或与其他 OSD 联网问题,其中一个 ceph-osd
进程不可用。