mon必须为奇数个,因采用paxos变体算法,需过半节点存活才能形成仲裁(quorum);3节点容1故障,2或4节点挂1个即无法达成多数派,导致集群不可用。

必须用奇数个 MON 节点,3 个是生产环境最低要求;少于 3 个或偶数个会导致仲裁失败、集群不可用。
为什么 MON 必须是奇数个
MON 使用 Paxos 变体算法做分布式共识,依赖“过半存活”才能形成仲裁(quorum)。3 个节点允许挂掉 1 个,5 个允许挂掉 2 个;而 2 或 4 个节点挂掉 1 个就只剩一半,无法达成多数派——此时 ceph -s 会卡在 HEALTH_WARN,ceph quorum_status 显示 "quorum": []。
红帽官方明确建议只部署奇数个 MON,且不推荐从 2 个扩到 4 个这种“伪高可用”路径。
用 ceph-deploy 添加新 MON 节点的实操要点
假设已有 ceph-mon1,要加 ceph-mon2 和 ceph-mon3:
- 所有目标 MON 主机必须提前配置好
/etc/hosts解析、SSH 免密、NTP 时间同步(误差需 ceph-deploy mon add 会卡住或静默失败 - 在管理节点执行:
ceph-deploy mon add ceph-mon2,再执行ceph-deploy mon add ceph-mon3—— 不要并行执行,顺序添加更稳 - 添加后立刻验证:
ceph quorum_status --format json-pretty,确认输出中"quorum"字段包含全部三个节点 ID,且"election_epoch"有递增 - 检查 MON 端口监听:
ss -tlnp | grep :6789和ss -tlnp | grep :3300,v1/v2 协议端口都要通
MON 扩容后常见故障现象与排查
新加 MON 启动后不进 quorum,或反复退出选举:
-
systemctl status ceph-mon@ceph-mon2查看日志,重点找"failed to join quorum"或"no valid monitor map" - 检查各 MON 的
/var/lib/ceph/mon/ceph-*/keyring是否一致:任意两节点执行md5sum /var/lib/ceph/mon/ceph-*/keyring,不一致说明 keyring 未同步,需手动拷贝或重跑ceph-deploy gatherkeys - 确认所有 MON 的
fsid相同:ceph mon dump | head -1,不同 fsid 会被当成本质不同集群处理 - 防火墙常被忽略:确保
6789(v1)和3300(v2)端口在所有 MON 节点间双向放行,iptables -L -n | grep 6789快速确认
MON 配置里容易被改错的关键参数
不要手动编辑 /etc/ceph/ceph.conf 中 MON 相关字段,除非你清楚后果:
-
mon initial members只在集群初始化时有效,扩容后修改它不会生效,反而可能干扰后续ceph-mon进程启动 -
mon host必须写全所有 MON 的 v2 地址(如v2:192.168.100.35:3300,v2:192.168.100.36:3300,v2:192.168.100.37:3300),客户端和 OSD 都靠它发现 MON,漏写一个就可能导致部分组件失联 - 避免混用 v1/v2 地址:Ceph Pacific 及以后版本默认启用 v2 协议,
mon host中只写 v2 地址更干净;若保留 v1,务必确保所有节点都支持且配置一致
真正需要人工干预的,往往不是配置文件,而是网络连通性、时间同步精度、keyring 一致性这三个点。它们不出问题,3 个 MON 就能自己完成选举和状态同步。











