当前位置: 首页 > news >正文

手把手教你用 cephadm 在 Ubuntu 22.04 上部署生产级 Ceph 集群(Quincy/Reef 版本通用)

最近公司要上一套分布式存储,想要用 Ceph。说实话,我之前虽然接触过 Ceph,但都是测试环境玩玩,这次可是真刀真枪要上生产环境,压力山大。不过好在现在 Ceph 的部署工具已经成熟很多了,尤其是 cephadm 这套基于容器的部署方式,比早年手动编译、配置一堆服务省心太多了。

今天这篇文章就把我从零开始搭建 Ceph 集群的过程完整记录下来,全程基于Ubuntu 22.04 LTS,使用的是官方推荐的cephadm工具。无论是 Quincy(17.2.x)还是 Reef(18.2.x)版本,流程基本一致,你可以直接照着操作,部署完就能跑业务。


一、先搞清楚你要搭什么

在动手部署之前,先花一分钟搞清楚:Ceph 到底是个啥?

简单说,Ceph 是一个开源的软件定义存储(SDS)系统,它能把你一堆普通服务器的硬盘“揉”成一个超大、高可用、自动修复的统一存储池。最牛的是,它一套系统同时支持三种存储接口:

  • 块存储(RBD):像云硬盘一样挂给虚拟机或容器用;
  • 文件存储(CephFS):提供标准的 POSIX 文件系统,多个客户端可同时读写;
  • 对象存储(RGW):兼容 AWS S3 和 OpenStack Swift,适合存图片、视频、备份等海量非结构化数据。

这种“三合一”的设计,在业内非常少见。

那有没有同类产品?有,比如:

  • GlusterFS:也是开源分布式文件系统,主打文件存储,架构比 Ceph 简单,但扩展性和一致性稍弱,大规模场景下容易出现元数据瓶颈。
  • MinIO / OpenIO:专注对象存储,轻量、易用,但不支持块和文件存储,功能单一。
  • 商业方案如 VMware vSAN、Dell PowerScale:功能强、服务好,但贵得离谱,还得绑定硬件。

而 Ceph 的优势就很明显了:

真正去中心化:没有元数据服务器单点瓶颈,靠 CRUSH 算法智能分布数据;
线性扩展:加机器就能扩容,性能和容量同步涨;
自愈能力强:硬盘坏了?节点宕了?Ceph 自己默默重建副本,业务无感;
完全开源免费:社区活跃,Red Hat、SUSE、Canonical 都深度集成,连 OpenStack 和 Kubernetes 原生都支持它。

当然,Ceph 也不是没缺点——配置复杂、学习曲线陡、对网络要求高。但一旦跑稳了,那就是“省心又省钱”的代名词。尤其在私有云、边缘计算、AI 训练这些需要 EB 级存储的场景里,Ceph 几乎成了事实标准。

所以,别被它吓住。只要方法对,部署其实没那么难。接下来,咱们就一步步把它跑起来。

Ceph 不是随便几台机器就能跑起来的。它有几个核心角色:

  • Monitor(mon):负责维护集群状态,至少3个节点(奇数),不能挂。
  • Manager(mgr):提供监控、仪表盘等功能,一般和 mon 混部或单独部署2个。
  • OSD(osd):真正存数据的,每个节点挂一块或多块硬盘,越多越好。
  • 可选:MDS(用于 CephFS 文件系统)、RGW(对象存储网关)。

我们这次的目标是:3 节点最小高可用集群,每台既是 mon/mgr,也跑 OSD,适合中小规模生产环境。

硬件建议(别抠门):

  • CPU:每台至少 4 核
  • 内存:OSD 节点建议 8GB 起,最好 16GB+
  • 硬盘:每台至少 1 块 ≥1TB 的数据盘(SSD/HDD 都行,但别用系统盘)
  • 网络:千兆起步,万兆更佳,所有节点互通

二、系统准备(所有节点都要做)

1. 设置主机名和 hosts

假设三台机器 IP 分别是:

  • 192.168.1.10 → ceph1
  • 192.168.1.11 → ceph2
  • 192.168.1.12 → ceph3

在每台机器上执行(以 ceph1 为例):

sudohostnamectl set-hostname ceph1

然后编辑/etc/hosts,三台机器都加上:

192.168.1.10 ceph1192.168.1.11 ceph2192.168.1.12 ceph3

⚠️ 注意:主机名必须和 hosts 里一致,否则后面 cephadm 添加 host 会报错。

2. 关闭防火墙和 SELinux

Ubuntu 默认没开 SELinux,但防火墙可能开着:

sudoufw disable

检查一下:

sudoufw status# 应该显示 inactive
3. 时间同步(非常重要!)

Ceph 对时间敏感,不同步会出大问题:

sudoaptupdatesudoaptinstall-yntpsudosystemctlenable--nowntp

验证:

timedatectl# 看 NTP synchronized: yes
4. 创建统一用户并配 sudo 免密

虽然 cephadm 支持 root,但官方建议用普通用户。我们在三台机器都创建cephadmin用户:

sudouseradd-m-s/bin/bash cephadminecho"cephadmin ALL=(ALL) NOPASSWD:ALL"|sudotee/etc/sudoers.d/cephadmin

再给这个用户设个密码(可选,主要是为了 ssh 登录):

sudopasswdcephadmin

三、配置 SSH 免密登录(从管理节点到其他节点)

我们把ceph1 当作管理节点,需要能无密码登录 ceph2 和 ceph3。

切换到 cephadmin 用户:

su- cephadmin

生成密钥(一路回车):

ssh-keygen-trsa-N""

把公钥复制到其他两台机器:

ssh-copy-id cephadmin@ceph2 ssh-copy-id cephadmin@ceph3

测试:

sshceph2sshceph3# 应该不用输密码直接进

💡 如果提示主机名不匹配,可能是 DNS 或 hosts 没配好,回头检查。


四、安装 Ceph 依赖(所有节点)

回到 root 或用 sudo:

sudoaptupdatesudoaptinstall-ypython3-pipgitdocker.io

然后添加 Ceph 官方源(这里以Reef 18.2.4为例,Quincy 把reef换成quincy即可):

wget-q-O-'https://download.ceph.com/keys/release.asc'|sudoapt-keyadd-echo"deb https://download.ceph.com/debian-reef/$(lsb_release-sc)main"|sudotee/etc/apt/sources.list.d/ceph.listsudoaptupdate

📌 小技巧:国内访问慢?可以换成阿里云镜像:

echo"deb http://mirrors.aliyun.com/ceph/debian-reef/$(lsb_release-sc)main"|sudotee/etc/apt/sources.list.d/ceph.list

五、在管理节点初始化集群

只在ceph1上操作:

sudoaptinstall-ycephadm ceph-common

然后初始化集群(注意替换 IP):

sudocephadm bootstrap --mon-ip192.168.1.10 --cluster-network192.168.1.0/24

参数说明:

  • --mon-ip:当前管理节点的 IP
  • --cluster-network:OSD 之间通信的网段(建议和 public network 分开,这里图省事用了同一个)

执行后会看到一堆日志,最后输出类似:

Ceph Dashboard is now available at: URL: https://ceph1:8443/ User: admin Password: xxxxxxxx

记下这个密码!后面要登录 Web 控制台。

此时/etc/ceph/下会生成ceph.confclient.admin.keyring,这就是集群的“身份证”。


六、添加其他节点到集群

继续在 ceph1 上操作:

ceph orchhostaddceph2 ceph orchhostaddceph3

✅ 注意:这里用的是主机名,不是 IP!所以前面 hosts 配置很关键。

然后指定 mon 跑在哪几个节点(必须奇数):

ceph orch apply mon ceph1,ceph2,ceph3

mgr 一般自动部署两个,不用额外操作。


七、部署 OSD(关键步骤!)

Ceph 不会自动用你的硬盘,得手动告诉它哪些盘可以用来存数据。

先看看每台机器有哪些盘(在 ceph1 上远程查):

ceph orch devicels

输出类似:

HOST PATH TYPE SIZE AVAILABLE REJECT REASONS ceph1 /dev/sdb hdd 1000G Yes None ceph2 /dev/sdb hdd 1000G Yes None ceph3 /dev/sdb hdd 1000G Yes None

如果显示AVAILABLE: No,可能是盘有分区或文件系统,得先清掉:

sudowipefs-a/dev/sdbsudosgdisk --zap-all /dev/sdb

确认可用后,一键部署所有 OSD:

ceph orch apply osd --all-available-devices

这条命令的意思是:“把所有标记为可用的硬盘都变成 OSD”。

等几分钟,再看:

ceph-s

应该能看到:

  • 3 mons
  • 2 mgrs
  • 3 osds up and in
  • 集群状态 HEALTH_OK

八、验证和使用

1. 查看集群状态
ceph-scephdfceph osd tree
2. 访问 Dashboard

浏览器打开https://ceph1:8443,用前面 bootstrap 给的账号密码登录。

首次登录会让你改密码,改完就能看到漂亮的监控界面:OSD 状态、IOPS、容量、告警……一目了然。

3. 创建 RBD 块设备(测试用)
# 创建 poolceph osd pool create rbd_pool3232# 初始化 RBDrbd pool init rbd_pool# 创建一个 10GB 的镜像rbd create rbd_pool/testimg--size10G# 映射到本地(需安装 rbd-nbd 或内核支持)sudorbd map rbd_pool/testimg

搞定!你现在已经有一个能跑虚拟机磁盘、K8s PV 的块存储了。


九、生产环境注意事项

  1. 网络分离:Public Network(客户端访问)和 Cluster Network(OSD 同步)最好走不同网卡,避免互相干扰。
  2. 硬盘规划:如果有 NVMe,可以用作 BlueStore 的 DB/WAL,大幅提升小文件性能。
  3. 副本数:默认是 3 副本,如果你只有 3 个 OSD,那就刚好;如果更多,可以调 CRUSH 规则。
  4. 监控告警:Dashboard 自带 Prometheus + Grafana,记得配置邮件或钉钉告警。
  5. 备份 keyring/etc/ceph/client.admin.keyring是命根子,丢了就管不了集群了!

最后说两句

Ceph 看似复杂,其实只要按步骤来,用 cephadm 部署并不难。我这套流程已经在多个客户现场跑了几个月,稳定得很。关键是前期规划要做好:网络、硬盘、主机名,这些细节一错,后面全是坑。

如果你觉得这篇文章对你有帮助,欢迎点赞、转发,让更多运维兄弟少走弯路。也欢迎关注我的公众号,我会持续分享真实生产环境的踩坑经验和优化技巧。


公众号:运维躬行录
个人博客:躬行笔记手把手教你用 cephadm 在 Ubuntu 22.04 上部署生产级 Ceph 集群(Quincy/Reef 版本通用)


最近公司要上一套分布式存储,想要用 Ceph。说实话,我之前虽然接触过 Ceph,但都是测试环境玩玩,这次可是真刀真枪要上生产环境,压力山大。不过好在现在 Ceph 的部署工具已经成熟很多了,尤其是 cephadm 这套基于容器的部署方式,比早年手动编译、配置一堆服务省心太多了。

今天这篇文章就把我从零开始搭建 Ceph 集群的过程完整记录下来,全程基于Ubuntu 22.04 LTS,使用的是官方推荐的cephadm工具。无论是 Quincy(17.2.x)还是 Reef(18.2.x)版本,流程基本一致,你可以直接照着操作,部署完就能跑业务。


一、先搞清楚你要搭什么

在动手部署之前,先花一分钟搞清楚:Ceph 到底是个啥?

简单说,Ceph 是一个开源的软件定义存储(SDS)系统,它能把你一堆普通服务器的硬盘“揉”成一个超大、高可用、自动修复的统一存储池。最牛的是,它一套系统同时支持三种存储接口:

  • 块存储(RBD):像云硬盘一样挂给虚拟机或容器用;
  • 文件存储(CephFS):提供标准的 POSIX 文件系统,多个客户端可同时读写;
  • 对象存储(RGW):兼容 AWS S3 和 OpenStack Swift,适合存图片、视频、备份等海量非结构化数据。

这种“三合一”的设计,在业内非常少见。

那有没有同类产品?有,比如:

  • GlusterFS:也是开源分布式文件系统,主打文件存储,架构比 Ceph 简单,但扩展性和一致性稍弱,大规模场景下容易出现元数据瓶颈。
  • MinIO / OpenIO:专注对象存储,轻量、易用,但不支持块和文件存储,功能单一。
  • 商业方案如 VMware vSAN、Dell PowerScale:功能强、服务好,但贵得离谱,还得绑定硬件。

而 Ceph 的优势就很明显了:

真正去中心化:没有元数据服务器单点瓶颈,靠 CRUSH 算法智能分布数据;
线性扩展:加机器就能扩容,性能和容量同步涨;
自愈能力强:硬盘坏了?节点宕了?Ceph 自己默默重建副本,业务无感;
完全开源免费:社区活跃,Red Hat、SUSE、Canonical 都深度集成,连 OpenStack 和 Kubernetes 原生都支持它。

当然,Ceph 也不是没缺点——配置复杂、学习曲线陡、对网络要求高。但一旦跑稳了,那就是“省心又省钱”的代名词。尤其在私有云、边缘计算、AI 训练这些需要 EB 级存储的场景里,Ceph 几乎成了事实标准。

所以,别被它吓住。只要方法对,部署其实没那么难。接下来,咱们就一步步把它跑起来。

Ceph 不是随便几台机器就能跑起来的。它有几个核心角色:

  • Monitor(mon):负责维护集群状态,至少3个节点(奇数),不能挂。
  • Manager(mgr):提供监控、仪表盘等功能,一般和 mon 混部或单独部署2个。
  • OSD(osd):真正存数据的,每个节点挂一块或多块硬盘,越多越好。
  • 可选:MDS(用于 CephFS 文件系统)、RGW(对象存储网关)。

我们这次的目标是:3 节点最小高可用集群,每台既是 mon/mgr,也跑 OSD,适合中小规模生产环境。

硬件建议(别抠门):

  • CPU:每台至少 4 核
  • 内存:OSD 节点建议 8GB 起,最好 16GB+
  • 硬盘:每台至少 1 块 ≥1TB 的数据盘(SSD/HDD 都行,但别用系统盘)
  • 网络:千兆起步,万兆更佳,所有节点互通

二、系统准备(所有节点都要做)

1. 设置主机名和 hosts

假设三台机器 IP 分别是:

  • 192.168.1.10 → ceph1
  • 192.168.1.11 → ceph2
  • 192.168.1.12 → ceph3

在每台机器上执行(以 ceph1 为例):

sudohostnamectl set-hostname ceph1

然后编辑/etc/hosts,三台机器都加上:

192.168.1.10 ceph1192.168.1.11 ceph2192.168.1.12 ceph3

⚠️ 注意:主机名必须和 hosts 里一致,否则后面 cephadm 添加 host 会报错。

2. 关闭防火墙和 SELinux

Ubuntu 默认没开 SELinux,但防火墙可能开着:

sudoufw disable

检查一下:

sudoufw status# 应该显示 inactive
3. 时间同步(非常重要!)

Ceph 对时间敏感,不同步会出大问题:

sudoaptupdatesudoaptinstall-yntpsudosystemctlenable--nowntp

验证:

timedatectl# 看 NTP synchronized: yes
4. 创建统一用户并配 sudo 免密

虽然 cephadm 支持 root,但官方建议用普通用户。我们在三台机器都创建cephadmin用户:

sudouseradd-m-s/bin/bash cephadminecho"cephadmin ALL=(ALL) NOPASSWD:ALL"|sudotee/etc/sudoers.d/cephadmin

再给这个用户设个密码(可选,主要是为了 ssh 登录):

sudopasswdcephadmin

三、配置 SSH 免密登录(从管理节点到其他节点)

我们把ceph1 当作管理节点,需要能无密码登录 ceph2 和 ceph3。

切换到 cephadmin 用户:

su- cephadmin

生成密钥(一路回车):

ssh-keygen-trsa-N""

把公钥复制到其他两台机器:

ssh-copy-id cephadmin@ceph2 ssh-copy-id cephadmin@ceph3

测试:

sshceph2sshceph3# 应该不用输密码直接进

💡 如果提示主机名不匹配,可能是 DNS 或 hosts 没配好,回头检查。


四、安装 Ceph 依赖(所有节点)

回到 root 或用 sudo:

sudoaptupdatesudoaptinstall-ypython3-pipgitdocker.io

然后添加 Ceph 官方源(这里以Reef 18.2.4为例,Quincy 把reef换成quincy即可):

wget-q-O-'https://download.ceph.com/keys/release.asc'|sudoapt-keyadd-echo"deb https://download.ceph.com/debian-reef/$(lsb_release-sc)main"|sudotee/etc/apt/sources.list.d/ceph.listsudoaptupdate

📌 小技巧:国内访问慢?可以换成阿里云镜像:

echo"deb http://mirrors.aliyun.com/ceph/debian-reef/$(lsb_release-sc)main"|sudotee/etc/apt/sources.list.d/ceph.list

五、在管理节点初始化集群

只在ceph1上操作:

sudoaptinstall-ycephadm ceph-common

然后初始化集群(注意替换 IP):

sudocephadm bootstrap --mon-ip192.168.1.10 --cluster-network192.168.1.0/24

参数说明:

  • --mon-ip:当前管理节点的 IP
  • --cluster-network:OSD 之间通信的网段(建议和 public network 分开,这里图省事用了同一个)

执行后会看到一堆日志,最后输出类似:

Ceph Dashboard is now available at: URL: https://ceph1:8443/ User: admin Password: xxxxxxxx

记下这个密码!后面要登录 Web 控制台。

此时/etc/ceph/下会生成ceph.confclient.admin.keyring,这就是集群的“身份证”。


六、添加其他节点到集群

继续在 ceph1 上操作:

ceph orchhostaddceph2 ceph orchhostaddceph3

✅ 注意:这里用的是主机名,不是 IP!所以前面 hosts 配置很关键。

然后指定 mon 跑在哪几个节点(必须奇数):

ceph orch apply mon ceph1,ceph2,ceph3

mgr 一般自动部署两个,不用额外操作。


七、部署 OSD(关键步骤!)

Ceph 不会自动用你的硬盘,得手动告诉它哪些盘可以用来存数据。

先看看每台机器有哪些盘(在 ceph1 上远程查):

ceph orch devicels

输出类似:

HOST PATH TYPE SIZE AVAILABLE REJECT REASONS ceph1 /dev/sdb hdd 1000G Yes None ceph2 /dev/sdb hdd 1000G Yes None ceph3 /dev/sdb hdd 1000G Yes None

如果显示AVAILABLE: No,可能是盘有分区或文件系统,得先清掉:

sudowipefs-a/dev/sdbsudosgdisk --zap-all /dev/sdb

确认可用后,一键部署所有 OSD:

ceph orch apply osd --all-available-devices

这条命令的意思是:“把所有标记为可用的硬盘都变成 OSD”。

等几分钟,再看:

ceph-s

应该能看到:

  • 3 mons
  • 2 mgrs
  • 3 osds up and in
  • 集群状态 HEALTH_OK

八、验证和使用

1. 查看集群状态
ceph-scephdfceph osd tree
2. 访问 Dashboard

浏览器打开https://ceph1:8443,用前面 bootstrap 给的账号密码登录。

首次登录会让你改密码,改完就能看到漂亮的监控界面:OSD 状态、IOPS、容量、告警……一目了然。

3. 创建 RBD 块设备(测试用)
# 创建 poolceph osd pool create rbd_pool3232# 初始化 RBDrbd pool init rbd_pool# 创建一个 10GB 的镜像rbd create rbd_pool/testimg--size10G# 映射到本地(需安装 rbd-nbd 或内核支持)sudorbd map rbd_pool/testimg

搞定!你现在已经有一个能跑虚拟机磁盘、K8s PV 的块存储了。


九、生产环境注意事项

  1. 网络分离:Public Network(客户端访问)和 Cluster Network(OSD 同步)最好走不同网卡,避免互相干扰。
  2. 硬盘规划:如果有 NVMe,可以用作 BlueStore 的 DB/WAL,大幅提升小文件性能。
  3. 副本数:默认是 3 副本,如果你只有 3 个 OSD,那就刚好;如果更多,可以调 CRUSH 规则。
  4. 监控告警:Dashboard 自带 Prometheus + Grafana,记得配置邮件或钉钉告警。
  5. 备份 keyring/etc/ceph/client.admin.keyring是命根子,丢了就管不了集群了!

最后说两句

Ceph 看似复杂,其实只要按步骤来,用 cephadm 部署并不难。我这套流程已经在多个客户现场跑了几个月,稳定得很。关键是前期规划要做好:网络、硬盘、主机名,这些细节一错,后面全是坑。

如果你觉得这篇文章对你有帮助,欢迎点赞、转发,让更多运维兄弟少走弯路。也欢迎关注我的公众号,我会持续分享真实生产环境的踩坑经验和优化技巧。


公众号:运维躬行录
个人博客:躬行笔记

http://www.jsqmd.com/news/453545/

相关文章:

  • Qwen3-0.6B-FP8应用开发:Python源码分析工具
  • 天津普通装修哪家公司口碑好?2026最新FAQ解答 - 速递信息
  • C 语言测验
  • AI智能体在设备预测性维护的场景应用|从被动抢修到主动预测,构建智能工厂新范式
  • 2026年太原清水混凝土装饰公司口碑排名,有实力的品牌企业汇总 - 工业品牌热点
  • 提升开发效率:coze-loop AI代码优化器从入门到精通实战
  • 多无人机动态避障路径优化:基于阿尔法进化(Alpha Evolution,AE)算法的多个无人机动态避障路径规划(MATLAB代码
  • 2026年盘点贵阳老牌的新能源汽修培训,口碑好的是哪家 - 工业品网
  • Allegro PCB整体旋转
  • call间接调用
  • PAT 乙级 1111
  • 亲测推荐:氢气压缩机厂家实战案例
  • F.动态规划-入门DP-打家劫舍:2140. 解决智力问题
  • Vue3重新登录后Store内容未清理解释
  • OpenClaw MAC Mini 配置
  • 揭秘 PyTorch 底层黑魔法:Stride 机制与“零拷贝”的艺术
  • AI写真不求人:ComfyUI Qwen人脸生成图像实战教程
  • Spring的xml方式声明式事务控制
  • 2026年江苏宇灿智能装备有限公司产品好用吗,宇灿智能装备可信度高吗排名 - myqiye
  • RetinaFace在Linux系统上的部署教程:从零开始搭建人脸检测环境
  • Gemma-3-12B-IT在STM32嵌入式开发中的边缘计算应用
  • Python字符串strip函数作用
  • MouseEngine 进一步美化你的光标
  • 【2025最新】基于SpringBoot+Vue的产业园区智慧公寓管理系统管理系统源码+MyBatis+MySQL
  • 【书生·浦语】internlm2-chat-1.8b效果惊艳:长篇小说续写风格一致性保持演示
  • GLM-Image WebUI部署教程:系统监控(GPU温度/显存/负载)集成方案
  • 键位映射操作:KeybMap的使用方法
  • Java Web 车险理赔信息管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • RVC在内容创作中的应用:短视频配音/虚拟主播落地实践
  • Hash哈希表以及代码