使用 cephadm + Docker 镜像在三台服务器上部署 Ceph 集群(含网络规划与 OSD DB/WAL 分离)
本文记录一次在三台服务器上用 cephadm 通过 Docker 容器镜像部署 Ceph 集群的完整流程,并重点说明:
- 如何做网络规划与配置(单网/双网)
- 如何做磁盘规划与 OSD 部署(BlueStore DB/WAL 分离)
- 一份"可交付、可审计"的操作文档应包含哪些内容
环境假设如下:
- 三台服务器 IP:
10.192.121.61 ~ 10.192.121.63 10.192.121.61作为 bootstrap 节点- 集群以容器镜像方式运行 Ceph(Docker)
1. 为什么选择 cephadm + 容器镜像
cephadm 是 Ceph 官方推荐的部署与编排方式之一,核心优势是:
- 以守护进程容器化方式运行(环境一致、升级更可控)
- 通过 orchestrator 对主机与服务进行统一管理(mon/mgr/osd 自动编排)
- 适合从 3 节点小集群到生产规模集群的演进
另外,Ceph 版本建议选择仍在维护期的发行系列(Active Releases),避免使用已 EOL 的版本带来的安全与稳定风险。
2. 部署前的总体规划(先写清楚再动手)
2.1 节点命名与解析
建议先统一主机名,并在三台机器上维护一致的解析(有 DNS 更好;没有就用 /etc/hosts):
ceph-61 10.192.121.61ceph-62 10.192.121.62ceph-63 10.192.121.63
这样做的收益是:后续 cephadm 管理、日志定位、故障处理都更直观。
2.2 网络规划:单网 vs 双网
Ceph 至少需要一个 public network;如果不指定 cluster network,也可以工作(即单网方案)。官方说明了这一点:未单独指定 cluster network 时,内部复制/恢复等流量也会走 public network。
本文给两套方案:
方案 A:单网(最常见、最省事)
- public network:
10.192.121.0/24 - cluster network:不单独设置
方案 B:双网(更优性能/更好隔离)
- public network:
10.192.121.0/24 - cluster network:例如
10.192.122.0/24(需要第二张 NIC 或 VLAN) - 官方也建议 cluster network 不应从 public/互联网可达(安全与隔离考虑)。
如果你只有一个网段,就用方案 A;后续需要再升级到双网时,再做变更也可以。
3. 前置条件检查(每台主机都要做)
cephadm 部署通常要求系统具备 systemd、容器运行时(Docker/Podman)、时间同步、LVM 等能力。
3.1 时间同步
三台机器必须 NTP/chrony 正常同步。时间漂移会影响 MON 仲裁、证书、日志等稳定性。
3.2 Docker 运行时
- 三台机器都安装 Docker
docker ps正常- 若使用私有仓库镜像:三台都需要
docker login,并验证能拉取指定镜像
3.3 防火墙与端口
启用防火墙的环境下,至少需要允许 Ceph 的关键端口(建议仅对白名单网段放通):
- MON:
3300/tcp、6789/tcp - OSD:
6800-7568/tcp(默认范围)
4. 网络配置要点(强烈建议做一致性治理)
4.1 OS 层:固定 IP、MTU、链路冗余
- 确保 IP 固定为
.61/.62/.63 - 三台机器 MTU 必须一致(1500 或 9000,混用容易出问题)
- 若有 bonding/LACP,按网络规范配置,保证链路冗余与带宽聚合
4.2 Ceph 层:显式指定 public_network
建议显式配置 public 网络,避免自动检测出错(尤其是多网卡、多网段时)。在进入 cephadm shell 后执行:
bash
ceph config set mon public_network 10.192.121.0/24
该命令格式来自官方 MON service 文档。
5. 选择 Ceph 版本与镜像策略
5.1 版本选择
建议优先选 Active Releases 中仍在维护期的系列(例如 Squid、Tentacle),避免选已 EOL 的版本。
5.2 镜像 tag 的建议
不要用 latest,务必用带版本号的 tag,确保可复现、可审计:
- 公有:
quay.io/ceph/ceph:vX.Y.Z - 私有:
registry.example.com/ceph/ceph:vX.Y.Z
cephadm 在 bootstrap 时支持用 --image 指定镜像;相关能力在厂商文档中也有明确描述。
6. Bootstrap:在 10.192.121.61 上初始化集群
6.1 获取并安装 cephadm
官方支持通过包管理或下载 cephadm 二进制方式安装,注意不要混用。
(命令会因发行版略有不同,本文不绑定某特定 OS,按你环境选用对应的官方方式即可。)
6.2 执行 bootstrap(单网方案)
bash
cephadm --image <你的Ceph镜像> bootstrap \
--mon-ip 10.192.121.61
bootstrap 会生成并落盘关键配置(如 ceph.conf、admin keyring 等),并初始化 MON/MGR。
如果你使用双网(方案 B),可在 bootstrap 时指定 cluster network:
bash
cephadm --image <你的Ceph镜像> bootstrap \
--mon-ip 10.192.121.61 \
--cluster-network 10.192.122.0/24
--cluster-network 的含义与 CIDR 形式要求在官方说明中有提及。
6.3 基本健康检查
bash
cephadm shell
ceph -s
ceph orch ls
7. 纳管 62/63:让 cephadm 统一管理三台主机
cephadm 会在集群中维护一对 SSH key,可导出公钥并分发到其他主机。
在 .61 执行:
bash
cephadm shell -- ceph cephadm get-pub-key > ~/ceph.pub
ssh-copy-id -f -i ~/ceph.pub root@10.192.121.62
ssh-copy-id -f -i ~/ceph.pub root@10.192.121.63
cephadm shell -- ceph orch host add ceph-62 10.192.121.62
cephadm shell -- ceph orch host add ceph-63 10.192.121.63
cephadm shell -- ceph orch host ls
这套流程在官方主机管理文档里也有对应说明。
8. 扩展 MON/MGR:3 节点建议 3 MON + 2 MGR
默认 bootstrap 只有 1 个 MON+1 个 MGR。生产上通常建议 3 或 5 个 MON,以获得可靠仲裁;3 节点场景建议 3 个 MON 分散到三台机器,并增加 standby MGR。
示例:
bash
cephadm shell -- ceph orch apply mon --placement="3 ceph-61 ceph-62 ceph-63"
cephadm shell -- ceph orch apply mgr --placement="2 ceph-61 ceph-62"
9. 磁盘与 OSD:配置 BlueStore DB/WAL 分离(核心)
9.1 BlueStore 的 DB/WAL 分离价值
BlueStore 支持将 RocksDB(DB)与 WAL 放到更快介质(SSD/NVMe),而数据盘用 HDD/大容量 SSD,从而提升随机写、恢复与元数据操作的性能。
cephadm 的 OSD service 规格中明确支持 data_devices/db_devices/wal_devices 以及 db_slots/wal_slots 等字段,用于把一块 DB/WAL 盘切片供多个 OSD 共享。
9.2 上 OSD 前的盘符核对(非常关键)
在每台机器确认盘符与用途,避免误清盘:
bash
lsblk -o NAME,SIZE,MODEL,ROTA,TYPE,MOUNTPOINT
原则:
- 数据盘/DB盘/WAL盘都不应被挂载
- 不应残留旧 LVM、mdraid、旧 ceph 签名
9.3 推荐方式:用 DriveGroup 统一编排 OSD
在 .61 创建 osd-drivegroup.yaml(示例按"数据盘为 HDD,DB/WAL 为 SSD/NVMe"写;你要按实际盘数调整 slots 与 limit):
yaml
service_type: osd
service_id: osd_default
placement:
host_pattern: 'ceph-*'
spec:
data_devices:
rotational: 1
db_devices:
rotational: 0
limit: 1
wal_devices:
rotational: 0
limit: 1
db_slots: 6
wal_slots: 6
字段含义与可用性在官方 OSD service 规格中有明确描述。
应用该配置:
bash
cephadm shell -- ceph orch apply -i osd-drivegroup.yaml
观察部署与结果:
bash
cephadm shell -- ceph orch ps --daemon-type osd
cephadm shell -- ceph osd tree
cephadm shell -- ceph -s
9.4 两种常见 DB/WAL 策略
策略 1:DB/WAL 共用同一块 NVMe(更简单)
- 适合三节点中小集群
- 运维简单、成本更低
策略 2:DB 与 WAL 分离到不同 NVMe(更强性能)
- 适合高写入、低延迟场景
- 但成本更高,且盘规划更复杂
10. 验收清单:部署完成后必须验证什么
建议至少覆盖以下检查项,形成可签字的验收记录:
- 集群健康:
ceph -s可解释、无异常崩溃 - 主机纳管:
ceph orch host ls三台均在线 - MON 仲裁:3 MON 成员且分布到 3 台主机
- MGR 备份:至少 1 个 standby MGR
- OSD 分布:
ceph osd treeOSD 在三台主机合理分布 - 网络配置:public_network(及 cluster_network)符合规划
- 防火墙:MON 端口与 OSD 端口范围按策略放通
11. 从"部署步骤"到"可交付操作文档":你还应补齐哪些内容
很多部署教程到"跑起来"就结束了,但真正的交付物还应包含 Day-2 运维与风险控制。一个完整的操作文档/交付文档,建议至少包含:
- 文档元信息:版本、变更记录、审批/复核人、维护窗口
- 架构规划:节点/网络拓扑/存储拓扑(数据盘、DB/WAL 盘、slots 策略)
- 前置条件:systemd、docker、ntp、lvm 等检查项
- 标准流程(SOP):bootstrap、纳管新主机、扩容 OSD、扩容 MON/MGR
- 验收与基线:健康检查命令输出留档、关键配置导出
- Day-2 运维:故障处理 SOP、升级策略、回滚方案、安全策略
结语
三节点 Ceph 集群用 cephadm + Docker 镜像部署,可以做到流程标准化、扩容一致性强、服务编排可控。真正的难点往往不在"安装成功",而在:
- 网络规划是否清晰(单网/双网、MTU、一致性)
- 磁盘规划是否合理(DB/WAL 分离与 slots 策略)
- 文档是否可审计、可复现、可交接(SOP + 验收 + Day-2)
只要把"规划---实施---验收---运维"这条链条写完整,后续扩容与排障会轻松很多。