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

📅 发布时间:2026/7/5 0:27:14 👁️ 浏览次数:
手把手教你用 cephadm 在 Ubuntu 22.04 上部署生产级 Ceph 集群(Quincy/Reef 版本通用)
最近公司要上一套分布式存储想要用 Ceph。说实话我之前虽然接触过 Ceph但都是测试环境玩玩这次可是真刀真枪要上生产环境压力山大。不过好在现在 Ceph 的部署工具已经成熟很多了尤其是 cephadm 这套基于容器的部署方式比早年手动编译、配置一堆服务省心太多了。今天这篇文章就把我从零开始搭建 Ceph 集群的过程完整记录下来全程基于Ubuntu 22.04 LTS使用的是官方推荐的cephadm工具。无论是 Quincy17.2.x还是 Reef18.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 不是随便几台机器就能跑起来的。它有几个核心角色Monitormon负责维护集群状态至少3个节点奇数不能挂。Managermgr提供监控、仪表盘等功能一般和 mon 混部或单独部署2个。OSDosd真正存数据的每个节点挂一块或多块硬盘越多越好。可选MDS用于 CephFS 文件系统、RGW对象存储网关。我们这次的目标是3 节点最小高可用集群每台既是 mon/mgr也跑 OSD适合中小规模生产环境。硬件建议别抠门CPU每台至少 4 核内存OSD 节点建议 8GB 起最好 16GB硬盘每台至少 1 块 ≥1TB 的数据盘SSD/HDD 都行但别用系统盘网络千兆起步万兆更佳所有节点互通二、系统准备所有节点都要做1. 设置主机名和 hosts假设三台机器 IP 分别是192.168.1.10 → ceph1192.168.1.11 → ceph2192.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. 关闭防火墙和 SELinuxUbuntu 默认没开 SELinux但防火墙可能开着sudoufw disable检查一下sudoufw status# 应该显示 inactive3. 时间同步非常重要Ceph 对时间敏感不同步会出大问题sudoaptupdatesudoaptinstall-yntpsudosystemctlenable--nowntp验证timedatectl# 看 NTP synchronized: yes4. 创建统一用户并配 sudo 免密虽然 cephadm 支持 root但官方建议用普通用户。我们在三台机器都创建cephadmin用户sudouseradd-m-s/bin/bash cephadminechocephadmin 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 cephadminceph2 ssh-copy-id cephadminceph3测试sshceph2sshceph3# 应该不用输密码直接进 如果提示主机名不匹配可能是 DNS 或 hosts 没配好回头检查。四、安装 Ceph 依赖所有节点回到 root 或用 sudosudoaptupdatesudoaptinstall-ypython3-pipgitdocker.io然后添加 Ceph 官方源这里以Reef 18.2.4为例Quincy 把reef换成quincy即可wget-q-O-https://download.ceph.com/keys/release.asc|sudoapt-keyadd-echodeb https://download.ceph.com/debian-reef/$(lsb_release-sc)main|sudotee/etc/apt/sources.list.d/ceph.listsudoaptupdate 小技巧国内访问慢可以换成阿里云镜像echodeb http://mirrors.aliyun.com/ceph/debian-reef/$(lsb_release-sc)main|sudotee/etc/apt/sources.list.d/ceph.list五、在管理节点初始化集群只在ceph1上操作sudoaptinstall-ycephadm ceph-common然后初始化集群注意替换 IPsudocephadm bootstrap --mon-ip192.168.1.10 --cluster-network192.168.1.0/24参数说明--mon-ip当前管理节点的 IP--cluster-networkOSD 之间通信的网段建议和 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 orchhostaddceph2 ceph orchhostaddceph3✅ 注意这里用的是主机名不是 IP所以前面 hosts 配置很关键。然后指定 mon 跑在哪几个节点必须奇数ceph orch apply mon ceph1,ceph2,ceph3mgr 一般自动部署两个不用额外操作。七、部署 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确认可用后一键部署所有 OSDceph orch apply osd --all-available-devices这条命令的意思是“把所有标记为可用的硬盘都变成 OSD”。等几分钟再看ceph-s应该能看到3 mons2 mgrs3 osds up and in集群状态 HEALTH_OK八、验证和使用1. 查看集群状态ceph-scephdfceph osd tree2. 访问 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 的块存储了。九、生产环境注意事项网络分离Public Network客户端访问和 Cluster NetworkOSD 同步最好走不同网卡避免互相干扰。硬盘规划如果有 NVMe可以用作 BlueStore 的 DB/WAL大幅提升小文件性能。副本数默认是 3 副本如果你只有 3 个 OSD那就刚好如果更多可以调 CRUSH 规则。监控告警Dashboard 自带 Prometheus Grafana记得配置邮件或钉钉告警。备份 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工具。无论是 Quincy17.2.x还是 Reef18.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 不是随便几台机器就能跑起来的。它有几个核心角色Monitormon负责维护集群状态至少3个节点奇数不能挂。Managermgr提供监控、仪表盘等功能一般和 mon 混部或单独部署2个。OSDosd真正存数据的每个节点挂一块或多块硬盘越多越好。可选MDS用于 CephFS 文件系统、RGW对象存储网关。我们这次的目标是3 节点最小高可用集群每台既是 mon/mgr也跑 OSD适合中小规模生产环境。硬件建议别抠门CPU每台至少 4 核内存OSD 节点建议 8GB 起最好 16GB硬盘每台至少 1 块 ≥1TB 的数据盘SSD/HDD 都行但别用系统盘网络千兆起步万兆更佳所有节点互通二、系统准备所有节点都要做1. 设置主机名和 hosts假设三台机器 IP 分别是192.168.1.10 → ceph1192.168.1.11 → ceph2192.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. 关闭防火墙和 SELinuxUbuntu 默认没开 SELinux但防火墙可能开着sudoufw disable检查一下sudoufw status# 应该显示 inactive3. 时间同步非常重要Ceph 对时间敏感不同步会出大问题sudoaptupdatesudoaptinstall-yntpsudosystemctlenable--nowntp验证timedatectl# 看 NTP synchronized: yes4. 创建统一用户并配 sudo 免密虽然 cephadm 支持 root但官方建议用普通用户。我们在三台机器都创建cephadmin用户sudouseradd-m-s/bin/bash cephadminechocephadmin 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 cephadminceph2 ssh-copy-id cephadminceph3测试sshceph2sshceph3# 应该不用输密码直接进 如果提示主机名不匹配可能是 DNS 或 hosts 没配好回头检查。四、安装 Ceph 依赖所有节点回到 root 或用 sudosudoaptupdatesudoaptinstall-ypython3-pipgitdocker.io然后添加 Ceph 官方源这里以Reef 18.2.4为例Quincy 把reef换成quincy即可wget-q-O-https://download.ceph.com/keys/release.asc|sudoapt-keyadd-echodeb https://download.ceph.com/debian-reef/$(lsb_release-sc)main|sudotee/etc/apt/sources.list.d/ceph.listsudoaptupdate 小技巧国内访问慢可以换成阿里云镜像echodeb http://mirrors.aliyun.com/ceph/debian-reef/$(lsb_release-sc)main|sudotee/etc/apt/sources.list.d/ceph.list五、在管理节点初始化集群只在ceph1上操作sudoaptinstall-ycephadm ceph-common然后初始化集群注意替换 IPsudocephadm bootstrap --mon-ip192.168.1.10 --cluster-network192.168.1.0/24参数说明--mon-ip当前管理节点的 IP--cluster-networkOSD 之间通信的网段建议和 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 orchhostaddceph2 ceph orchhostaddceph3✅ 注意这里用的是主机名不是 IP所以前面 hosts 配置很关键。然后指定 mon 跑在哪几个节点必须奇数ceph orch apply mon ceph1,ceph2,ceph3mgr 一般自动部署两个不用额外操作。七、部署 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确认可用后一键部署所有 OSDceph orch apply osd --all-available-devices这条命令的意思是“把所有标记为可用的硬盘都变成 OSD”。等几分钟再看ceph-s应该能看到3 mons2 mgrs3 osds up and in集群状态 HEALTH_OK八、验证和使用1. 查看集群状态ceph-scephdfceph osd tree2. 访问 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 的块存储了。九、生产环境注意事项网络分离Public Network客户端访问和 Cluster NetworkOSD 同步最好走不同网卡避免互相干扰。硬盘规划如果有 NVMe可以用作 BlueStore 的 DB/WAL大幅提升小文件性能。副本数默认是 3 副本如果你只有 3 个 OSD那就刚好如果更多可以调 CRUSH 规则。监控告警Dashboard 自带 Prometheus Grafana记得配置邮件或钉钉告警。备份 keyring/etc/ceph/client.admin.keyring是命根子丢了就管不了集群了最后说两句Ceph 看似复杂其实只要按步骤来用 cephadm 部署并不难。我这套流程已经在多个客户现场跑了几个月稳定得很。关键是前期规划要做好网络、硬盘、主机名这些细节一错后面全是坑。如果你觉得这篇文章对你有帮助欢迎点赞、转发让更多运维兄弟少走弯路。也欢迎关注我的公众号我会持续分享真实生产环境的踩坑经验和优化技巧。公众号运维躬行录个人博客躬行笔记