问题现象
排查思路
1、Mon进程是否在运行
首先需要确保的是Mon进程是正常运行的,如果进程都没有运行,肯定是会影响集群状况的。如果此时可以正常输出信息,可以通过此命令快速获取到集群的状态信息,命令如下:
通过命令的执行结果可以看到,目前是有一个Mon宕掉,正常的mon是node1、node3,所以目前是node2节点上的Mon出现了异常。通常情况下 ceph -s
命令可以正常执行时,可以通过 ceph health detail
获取到更加详细的异常输出。命令输入信息如下:
HEALTH_WARN 1 mons down, quorum 0,2 node1,node3
2、异常的Mon节点是否可以正常连接
通常情况下在做连接测试时,建议先核实一下防火墙的状态,确保防火墙没有对通信进行限制。这里提到的连接主要牵涉到两个方面,首先可以尝试通过ssh进行一下连接,确保Mon节点能够正常远程到。如果能够正常进行ssh,那么接下来可以使用 telnet
、 等命令进行一下测试异常Mon节点的端口(如果有修改端口,以实际端口进行测试),比如现在要测试宕掉的node2节点的Mon端口,那>么可以执行以下命令
3、ceph -s是否可以正常获取到集群信息
通过管理套接字,你可以使用Unix套接字文件直接与指定的守护进程交互。这个文件通常位于Monitor节点的run目录下,默认的配置路径是 /var/run/ceph/ceph-mon.ID.asok
,如果有对这个配置位置进行过手动更改,可以看一下ceph.conf文件中的配置路径,或者使用以下命令进行一下查询:
$ ceph-conf -name mon.node2 --show-config-value admin_socket
这里有一点需要注意一下,只有在Mon节点运行时管理套接字才可以使用。如果Mon节点是正常关闭的,那么管理套接字文件也会被删除。如果Mon节点没有运行,但是管理套接字文件还是存在的,就说明Mon不是正常关闭的。总之,Mon没有运行的情况下,是无法使用管理套接字的。
要访问管理套接字,命令格式为:
ceph daemon mon.node1 mon_status
可以通过执行help命令来显示管理套接字支持的其他命令,如: ,建议了解一下 config show
、 mon_status
、 quorum_status
命令,在排查Mon故障时非常有用。
mon_status 的输出结果如下:
从上面的信息中可以看到,当前quorum之中主机为0和2,节点1并不在quorum内。从monmap信息可以查看到节点1对应的主机是node2,所以当前出现异常的Mon是node2。
4、查看异常节点的日志记录,根据日志信息进一步进行判断故障状况
结果验证
找到故障原因进行修复后,可以通过ceph -s
或 ceph health detail
确认集群状态为HEALTH_OK进行验证是否完成了修复。