使用 cephadm + Docker 镜像在三台服务器上部署 Ceph 集群(含网络规划与 OSD DB/WAL 分离)

使用 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.61
  • ceph-62 10.192.121.62
  • ceph-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/tcp6789/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. 验收清单:部署完成后必须验证什么

建议至少覆盖以下检查项,形成可签字的验收记录:

  1. 集群健康:ceph -s 可解释、无异常崩溃
  2. 主机纳管:ceph orch host ls 三台均在线
  3. MON 仲裁:3 MON 成员且分布到 3 台主机
  4. MGR 备份:至少 1 个 standby MGR
  5. OSD 分布:ceph osd tree OSD 在三台主机合理分布
  6. 网络配置:public_network(及 cluster_network)符合规划
  7. 防火墙: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)

只要把"规划---实施---验收---运维"这条链条写完整,后续扩容与排障会轻松很多。

相关推荐
Sheep Shaun2 小时前
深入理解AVL树:从概念到完整C++实现详解
服务器·开发语言·数据结构·c++·后端·算法
颢珂智库Haokir Insights2 小时前
如何把 MCP 接入到文档 / Issue / CI,形成可复用的工程外脑
服务器·人工智能·ai编程·vllm·vibecoding
为什么要做囚徒2 小时前
Docker实战系列之Root目录迁移指南:单机环境下的完整实践
运维·docker·容器
南梦浅2 小时前
[特殊字符]️ Docker 镜像加速器完整配置流程下面是在 CentOS 7 系统上配置 Docker 镜像加速器的完整步骤
linux·docker·centos
卓应米老师3 小时前
【网络配置实战】堆叠的配置
运维·服务器·网络·华为认证
咸鱼翻身小阿橙3 小时前
SQL上半部分
服务器·数据库·sql
weixin_462446233 小时前
使用 Docker / Docker Compose 部署 PdfDing —— 个人 PDF笔记
笔记·docker·pdf
2301_767902643 小时前
第 4 章 docker容器
运维·docker·容器
历程里程碑3 小时前
Linux 2 指令(2)进阶:内置与外置命令解析
linux·运维·服务器·c语言·开发语言·数据结构·ubuntu