Ceph集群OSD崩溃恢复
Ceph集群OSD崩溃恢复
问题背景
集群处于HEALTH_WARN
状态
1个守护进程(OSD.325)最近崩溃
通过ceph -s
命令,查看详细的警告信息:
[XXXXX ~]# ceph -scluster:id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxhealth: HEALTH_WARN1 daemons have recently crashed
RECENT_CRASH 1 daemons have recently crashedosd.325 crashed on host hostname at YYYY-MM-DD HH:MM:SS.SSSSSSZ
问题分析
1. OSD崩溃问题
需要确认崩溃的OSD.325的状态。使用ceph osd find
命令来定位OSD:
[root@hostname ~]# ceph osd find 325
Error ENOENT: osd.325 does not exist
系统提示OSD.325不存在。进一步通过OSD树结构查找:
[root@hostname ~]# ceph osd tree | grep 325
没有任何输出,确认了OSD.325已经不在集群中。
这种情况通常发生在:OSD崩溃后被管理员从集群中移除,但崩溃记录没有被清理。
2. 查看崩溃记录
接下来,我们查看集群中的崩溃记录:
[root@hostname ~]# ceph crash ls
ID ENTITY NEW
YYYY-MM-DD_HH:MM:SS.SSSSSSZ_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx osd.325
YYYY-MM-DD_HH:MM:SS.SSSSSSZ_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx osd.325
YYYY-MM-DD_HH:MM:SS.SSSSSSZ_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx osd.325 *
从输出中可以看到,确实存在OSD.325的崩溃记录,发生时间为YYYY年MM月DD日,并且标记为“NEW”(星号表示)。这意味着这个崩溃记录还没有被归档处理。
解决方案
1. 归档崩溃记录
既然OSD.325已经不在集群中,只需要归档这个崩溃记录即可消除相关警告:
[root@hostname ~]# ceph crash archive YYYY-MM-DD_HH:MM:SS.SSSSSSZ_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
归档成功后,我们再次检查集群状态:
[root@hostname ~]# ceph -scluster:id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxhealth: HEALTH_WARNXX pgs not deep-scrubbed in time
可以看到,OSD崩溃的警告已经消失
经验总结
-
定期检查集群状态:通过
ceph -s
命令定期检查集群健康状态,及时发现问题。 -
崩溃记录管理:当处理完OSD崩溃后,记得使用
ceph crash archive
命令归档崩溃记录,避免不必要的警告。 -
故障排除流程:
- 确认问题(
ceph -s
) - 定位具体组件(
ceph osd find
,ceph osd tree
) - 查看详细信息(
ceph crash ls
) - 采取修复措施(
ceph crash archive
) - 验证结果(再次
ceph -s
)
- 确认问题(