1. 常见 MON 故障处理
Monitor 维护着 Ceph 集群的信息,如果 Monitor 无法正常提供服务,那整个 Ceph 集群就不可访问。一般来说,在实际运行中,Ceph Monitor的个数是 2n + 1 ( n >= 0) 个,在线上至少3个,只要正常的节点数 >= n+1,Ceph 的 Paxos 算法就能保证系统的正常运行。所以,当 Monitor 出现故障的时候,不要惊慌,冷静下来,一步一步地处理。
1.1 开始排障
在遭遇 Monitor 故障时,首先回答下列几个问题:
Mon 进程在运行吗?
我们首先要确保 Mon 进程是在正常运行的。很多人往往忽略了这一点。
是否可以连接 Mon Server?
有时候我们开启了防火墙,导致无法与 Monitor 的 IP 或端口进行通信。尝试使用 ssh
连接服务器,如果成功,再尝试用其他工具(如 telnet
, nc
等)连接 monitor 的端口。
ceph -s 命令是否能运行并收到集群回复?
如果答案是肯定的,那么你的集群已启动并运行着。你可以认为如果已经形成法定人数,monitors 就只会响应 status
请求。
如果 ceph -s
阻塞了,并没有收到集群的响应且输出了很多 fault
信息,很可能此时你的 monitors 全部都 down 掉了或只有部分在运行(但数量不足以形成法定人数)。
ceph -s 没完成是什么情况?
如果你到目前为止没有完成前述的几步,请返回去完成。然后你需要 ssh
登录到服务器上并使用 monitor 的管理套接字。
1.2 使用 Mon 的管理套接字
通过管理套接字,你可以用 Unix 套接字文件直接与指定守护进程交互。这个文件位于你 Mon 节点的 run
目录下,默认配置它位于 /var/run/ceph/ceph-mon.ID.asok
,但要是改过配置就不一定在那里了。如果你在那里没找到它,请检查 ceph.conf
里是否配置了其它路径,或者用下面的命令获取:
ceph-conf --name mon.ID --show-config-value admin_socket
请牢记,只有在 Mon 运行时管理套接字才可用。Mon 正常关闭时,管理套接字会被删除;如果 Mon 不运行了、但管理套接字还存在,就说明 Mon 不是正常关闭的。不管怎样,Mon 没在运行,你就不能使用管理套接字, ceph
命令会返回类似 Error 111: Connection Refused
的错误消息。
访问管理套接字很简单,就是让 ceph
工具使用 asok
文件。对于 Dumpling 之前的版本,命令是这样的:
ceph --admin-daemon /var/run/ceph/ceph-mon.<id>.asok <command>
对于 Dumpling 及后续版本,你可以用另一个(推荐的)命令:
ceph daemon mon.<id> <command>
ceph
工具的 help
命令会显示管理套接字支持的其它命令。请仔细了解一下 config get
、 config show
、 mon_status
和 quorum_status
命令,在排除 Mon 故障时它们会很有用。
1.3 理解 MON_STATUS
当集群形成法定人数后,或在没有形成法定人数时通过管理套接字, 用 ceph
工具可以获得 mon_status
信息。命令会输出关于 monitor 的大多数信息,包括部分 quorum_status
命令的输出内容。
下面是 mon_status
的输出样例:
{
"name": "c",
"rank": 2,
"state": "peon",
"election_epoch": 3