Ceph怎么部署MON监视节点并维持奇数节点选主高可用

大晨酱_2547

大晨酱_2547

2026-10-25

601人浏览

原创

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

ceph怎么部署mon监视节点并维持奇数节点选主高可用

必须用奇数个 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:

Warp
Warp

Warp是一款面向开发者的 AI 终端和智能体开发环境。

下载
  • 所有目标 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 就能自己完成选举和状态同步。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

80

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

60

15

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

40

15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

140

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

120

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

120

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

100

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

80

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

100

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.3万人学习