导读:本期聚焦于缅甸程序员创作的《Ceph分布式存储集群架构是怎样的?如何从零部署一套生产级Ceph集群》,敬请观看详情。Ceph作为开源分布式存储系统的代表,凭借统一支持对象存储、块存储和文件系统的能力,成为云平台和大规模存储场景的主流选择。本文从Ceph的核心架构入手,详细解析RADOS、Monitor、OSD、MDS等关键组件的职责与相互关系,说明CRUSH算法如何实现数据寻址与故障域隔离。随后给出完整的生产环境部署实战,涵盖硬件规划、操作系统参数调优、cephadm安装流程、集群初始化、POOL创建、块设备RBD挂载以及监控告警配置,并总结常见的踩坑点与性能优化建议,帮助读者搭建一套稳定可用的Ceph存储集群。

Ceph 是一个高度可扩展的分布式存储系统,最大的特点是统一存储架构:一套集群同时提供对象存储(RADOSGW)、块存储(RBD)和文件系统(CephFS)三种接口,底层都基于同一个分布式对象存储引擎 RADOS。这种设计避免了为不同存储类型单独建设系统,大幅降低了运维复杂度。本文将先拆解 Ceph 的架构设计,再给出一套完整的生产级部署流程。

Ceph分布式存储集群架构是怎样的?如何从零部署一套生产级Ceph集群

一、Ceph 核心架构与关键组件

Ceph 的核心思想是一切皆对象。无论上层使用块设备、文件还是原生对象接口,数据最终都被切分为固定大小的对象,存储在 RADOS(Reliable Autonomic Distributed Object Store)集群中。理解这一点,是理解 Ceph 一切行为的基础。

Ceph 集群由几类核心组件构成:Monitor 负责维护集群拓扑地图(OSD Map、PG Map、Monitor Map 等),是集群的权威大脑,生产环境至少部署 3 个甚至 5 个以实现仲裁;OSD(Object Storage Daemon)是实际存储数据的守护进程,通常一个物理盘对应一个 OSD,它同时负责数据复制、故障检测和恢复;Manager 提供监控指标和对外管理接口;MDS 仅在需要 CephFS 文件系统时部署,管理元数据。对象网关 RADOSGW 则提供兼容 S3 和 Swift 的 HTTP 接口。

与传统集中式存储依赖元数据表不同,Ceph 使用 CRUSH 算法进行数据寻址。客户端写入数据时,先计算出对象所属的 PG(Placement Group,归置组),再通过 CRUSH 算法根据集群拓扑规则计算出该 PG 应落在哪些 OSD 上。整个过程是纯计算,不需要查询中心节点,因此不存在元数据性能瓶颈,集群规模可以线性扩展到数千个节点。

CRUSH 规则树还提供了故障域隔离能力。管理员可以定义 host、rack、row、datacenter 等层级结构,指定数据副本必须分布在不同层级,避免单机架断电导致数据全部丢失。这是生产环境规划中最容易被忽视但至关重要的一环。

二、生产环境硬件规划与系统调优

部署 Ceph 之前,硬件规划直接决定了集群的上限。OSD 节点建议每台配置双路 CPU、128GB 以上内存,每块数据盘独占一个 OSD 进程;同时必须配置独立的 NVMe 盘作为 WAL 和 DB 分区(BlueStore 的 block.wal 与 block.db),否则慢日志会拖垮整个集群的写入性能。网络方面强烈建议前后端分离:公共网络(客户端流量)与集群网络(副本同步流量)各走一套万兆甚至 25GbE 网卡,避免重建数据时挤占业务带宽。

操作系统层面有几项必须调整的参数。首先是关闭透明大页,否则会导致内存分配延迟抖动;其次是将

  • 文件描述符上限调大到 65535 以上;
  • 调整 pid_max 避免进程号耗尽;
  • 每个 OSD 网卡队列开启中断绑核,减少上下文切换。

以下是一份常用的系统调优脚本:

#!/bin/bash
# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 调整文件描述符
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655350
* hard nofile 655350
root soft nofile 655350
root hard nofile 655350
EOF

# 内核参数
cat >> /etc/sysctl.conf <<EOF
kernel.pid_max = 4194303
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
EOF
sysctl -p

# 时间同步(Monitor 对时钟敏感)
yum install -y chrony
systemctl enable --now chronyd

需要特别强调的是时间同步。Ceph Monitor 对时钟漂移非常敏感,偏差超过 mon_clock_drift_allowed 阈值(默认 0.05 秒)就会触发告警甚至将 Monitor 标记为异常,因此 NTP/Chrony 是所有节点的必备服务。

三、使用 cephadm 部署集群实战

从 Octopus 版本开始,官方推荐使用 cephadm 进行部署,它基于容器方式运行所有守护进程,通过 SSH 管理集群节点,摆脱了对 Ansible、Salt 等外部工具的依赖。下面以三节点集群为例演示完整流程。

假设三台服务器:node1(192.168.10.11)、node2(192.168.10.12)、node3(192.168.10.13),每台额外挂载一块 /dev/sdb 数据盘。首先在 node1 上安装引导程序:

# 安装 cephadm
dnf install -y cephadm

# 拉取引导镜像并初始化集群
cephadm bootstrap --mon-ip 192.168.10.11

# 初始化完成后输出 dashboard 访问信息
# 将公钥分发到其他节点
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3

# 添加节点
ceph orch host add node2 192.168.10.12
ceph orch host add node3 192.168.10.13

# 查看 OSD 可用设备
ceph orch device ls

# 以所有可用磁盘创建 OSD
ceph orch apply osd --all-available-devices

# 检查集群状态
ceph -s
ceph osd tree

ceph -s 显示 HEALTH_OK 且三个 OSD 均为 up 状态时,说明集群基础层已经就绪。接下来创建存储池并验证数据读写。创建 POOL 时需要指定 PG 数量,官方建议根据 OSD 数量与副本数计算,公式为:PG 总数 = 每 OSD 100 个 PG × OSD 数量 ÷ 副本数,结果向上取最近的 2 的幂次:

# 创建 3 副本存储池,32 个 PG
ceph osd pool create rbd_pool 32 32
ceph osd pool set rbd_pool size 3
ceph osd pool set rbd_pool min_size 2
rbd pool init rbd_pool

# 创建块设备镜像并挂载到客户端
rbd create rbd_pool/disk01 --size 100G
rbd map rbd_pool/disk01

# 格式化并使用
mkfs.xfs /dev/rbd0
mount /dev/rbd0 /mnt/ceph_rbd
df -h /mnt/ceph_rbd

至此,一套具备容错能力的块存储服务已经可用。客户端写入的数据会被切分为 4MB 大小的对象,经 CRUSH 计算后分布到三个不同节点的 OSD 上,任意一台节点故障,集群会在秒级感知并自动触发数据重建,业务无感知。

四、常见踩坑点与性能优化建议

部署完成后,生产运行阶段还有几个高频问题值得注意。第一是full ratio 告警:默认在集群使用率达到 85% 时会阻止写入,95% 时进入只读,因此必须提前规划容量并配置告警,不要等到集群满了再扩容。第二是PG 数量不合理:PG 太少会导致单个 PG 数据倾斜,太多则加重 Monitor 负担,建议使用 ceph osd pool autoscale-status 检查并开启 pg_autoscale 自动调节。第三是重建风暴:一个节点宕机恢复后,大量数据同时回填会挤占业务 I/O,可以降低 osd_recovery_max_activeosd_max_backfills 来限速。

性能优化方面,几点经验值得参考:

  • 启用 BlueStore 而非旧的 Filestore,前者直接管理裸盘,减少一层文件系统开销,写放大更小;
  • 为 WAL 分配独立 NVMe 分区,通常 10GB 到 20GB 即可显著提升小块随机写性能;
  • osd_op_threads 与 OSD 数量匹配,并确认 ms_bind_ipv6 等网络配置与实际环境一致;
  • 块存储场景在客户端开启 RBD 缓存,设置 rbd_cache = true 与合理的 rbd_cache_max_dirty 阈值。

监控层面,建议同时启用 Ceph Dashboard 和 Prometheus 告警。Dashboard 可通过以下命令重置账户密码并开启模块:

ceph mgr module enable dashboard
ceph dashboard ac-user-create admin administrator
ceph dashboard ac-user-set-password admin YourStrongPassword
ceph config set mgr mgr/dashboard/ssl false
ceph mgr module disable dashboard && ceph mgr module enable dashboard

总体而言,Ceph 的部署难度并不算高,真正的挑战在于容量规划、故障域设计和日常运维调优。掌握 CRUSH 规则树的编写与 PG 分布的观察方法,理解 Monitor 仲裁机制与 OSD 数据恢复流程,才能让集群在长期运行中保持健康稳定。建议在正式上线前,主动演练节点宕机、磁盘损坏等故障场景,验证副本冗余是否真正生效,这是一套生产级 Ceph 集群上线前不可省略的验收步骤。

Ceph分布式存储集群架构部署实战修改时间:2026-08-31 23:09:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。