
最近公司要上一套分布式存储,想要用 Ceph。说实话,我之前虽然接触过 Ceph,但都是测试环境玩玩,这次可是真刀真枪要上生产环境,压力山大。不过好在现在 Ceph 的部署工具已经成熟很多了,尤其是 cephadm 这套基于容器的部署方式,比早年手动编译、配置一堆服务省心太多了。
今天这篇文章就把我从零开始搭建 Ceph 集群的过程完整记录下来,全程基于 Ubuntu 22.04 LTS,使用的是官方推荐的 cephadm 工具。无论是 Quincy(17.2.x)还是 Reef(18.2.x)版本,流程基本一致,你可以直接照着操作,部署完就能跑业务。
在动手部署之前,先花一分钟搞清楚:Ceph 到底是个啥?
简单说,Ceph 是一个开源的 软件定义存储(SDS)系统,它能把你一堆普通服务器的硬盘“揉”成一个超大、高可用、自动修复的统一存储池。最牛的是,它一套系统同时支持三种存储接口:
这种“三合一”的设计,在业内非常少见。
那有没有同类产品?有,比如:
而 Ceph 的优势就很明显了:
✅ 真正去中心化:没有元数据服务器单点瓶颈,靠 CRUSH 算法智能分布数据; ✅ 线性扩展:加机器就能扩容,性能和容量同步涨; ✅ 自愈能力强:硬盘坏了?节点宕了?Ceph 自己默默重建副本,业务无感; ✅ 完全开源免费:社区活跃,Red Hat、SUSE、Canonical 都深度集成,连 OpenStack 和 Kubernetes 原生都支持它。
当然,Ceph 也不是没缺点——配置复杂、学习曲线陡、对网络要求高。但一旦跑稳了,那就是“省心又省钱”的代名词。尤其在私有云、边缘计算、AI 训练这些需要 EB 级存储的场景里,Ceph 几乎成了事实标准。
所以,别被它吓住。只要方法对,部署其实没那么难。接下来,咱们就一步步把它跑起来。
Ceph 不是随便几台机器就能跑起来的。它有几个核心角色:
我们这次的目标是:3 节点最小高可用集群,每台既是 mon/mgr,也跑 OSD,适合中小规模生产环境。
硬件建议(别抠门):
假设三台机器 IP 分别是:
在每台机器上执行(以 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 会报错。
Ubuntu 默认没开 SELinux,但防火墙可能开着:
sudo ufw disable检查一下:
sudo ufw status
# 应该显示 inactiveCeph 对时间敏感,不同步会出大问题:
sudo apt update
sudo apt install -y ntp
sudo systemctl enable --now ntp验证:
timedatectl
# 看 NTP synchronized: yes虽然 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我们把 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 没配好,回头检查。
回到 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.conf 和 client.admin.keyring,这就是集群的“身份证”。
继续在 ceph1 上操作:
ceph orch host add ceph2
ceph orch host add ceph3✅ 注意:这里用的是主机名,不是 IP!所以前面 hosts 配置很关键。
然后指定 mon 跑在哪几个节点(必须奇数):
ceph orch apply mon ceph1,ceph2,ceph3mgr 一般自动部署两个,不用额外操作。
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应该能看到:
ceph -s
ceph df
ceph osd tree浏览器打开 https://ceph1:8443,用前面 bootstrap 给的账号密码登录。
首次登录会让你改密码,改完就能看到漂亮的监控界面:OSD 状态、IOPS、容量、告警……一目了然。
# 创建 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 的块存储了。
/etc/ceph/client.admin.keyring 是命根子,丢了就管不了集群了!Ceph 看似复杂,其实只要按步骤来,用 cephadm 部署并不难。我这套流程已经在多个客户现场跑了几个月,稳定得很。关键是前期规划要做好:网络、硬盘、主机名,这些细节一错,后面全是坑。