运维知识
悠悠
2026年3月8日

手把手教你用 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 为例):

sudo hostnamectl set-hostname ceph1

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

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

2. 关闭防火墙和 SELinux

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

sudo ufw disable

检查一下:

sudo ufw status
# 应该显示 inactive

3. 时间同步(非常重要!)

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

sudo apt update
sudo apt install -y ntp
sudo systemctl enable --now ntp

验证:

timedatectl
# 看 NTP synchronized: yes

4. 创建统一用户并配 sudo 免密

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

sudo useradd -m -s /bin/bash cephadmin
echo "cephadmin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin

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

sudo passwd cephadmin

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

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

切换到 cephadmin 用户:

su - cephadmin

生成密钥(一路回车):

ssh-keygen -t rsa -N ""

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

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

测试:

ssh ceph2
ssh ceph3
# 应该不用输密码直接进
💡 如果提示主机名不匹配,可能是 DNS 或 hosts 没配好,回头检查。

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

回到 root 或用 sudo:

sudo apt update
sudo apt install -y python3-pip git docker.io

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

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo "deb https://download.ceph.com/debian-reef/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update

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

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

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

只在 ceph1 上操作:

sudo apt install -y cephadm ceph-common

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

sudo cephadm bootstrap --mon-ip 192.168.1.10 --cluster-network 192.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 orch host add ceph2
ceph orch host add ceph3
✅ 注意:这里用的是主机名,不是 IP!所以前面 hosts 配置很关键。

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

ceph orch apply mon ceph1,ceph2,ceph3

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


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

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

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

ceph orch device ls

输出类似:

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,可能是盘有分区或文件系统,得先清掉:

sudo wipefs -a /dev/sdb
sudo sgdisk --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 -s
ceph df
ceph osd tree

2. 访问 Dashboard

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

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

3. 创建 RBD 块设备(测试用)

# 创建 pool
ceph osd pool create rbd_pool 32 32

# 初始化 RBD
rbd pool init rbd_pool

# 创建一个 10GB 的镜像
rbd create rbd_pool/testimg --size 10G

# 映射到本地(需安装 rbd-nbd 或内核支持)
sudo rbd 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 部署并不难。我这套流程已经在多个客户现场跑了几个月,稳定得很。关键是前期规划要做好:网络、硬盘、主机名,这些细节一错,后面全是坑。

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


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

文章目录

博主介绍

热爱技术的云计算运维工程师,Python全栈工程师,分享开发经验与生活感悟。
欢迎关注我的微信公众号@运维躬行录,领取海量学习资料

微信二维码