Ceph生产最佳实践存储方案(通用虚拟化/私有云场景)
Ceph生产最佳实践存储方案(通用虚拟化/私有云场景)
一、方案整体定位
- 适用场景:企业私有云、虚拟化平台(VMware/OpenStack/KVM)、容器云存储、通用文件 / 对象存储
- 核心原则:稳定优先、性能达标、成本可控、运维极简
- 架构选型:3 节点起步(最小生产集群)、3 副本保障可靠性、BlueStore 原生架构、NVMe+HDD 双介质分层(无复杂缓存池)
- 硬性满足:每块机械盘(HDD)直接作为 1 个 OSD,不分区、不做 RAID
二、单节点硬件最佳配置
1. 核心硬件清单(单节点)
| 硬件类型 | 配置要求 | 选型理由 |
|---|---|---|
| CPU | 2 颗 × 12 核 24 线程(Intel Xeon Silver/AMD EPYC 7003 系列) | 每个 OSD 至少分配 1 物理核,12 个 OSD+Monitor/Manager 进程,24 线程冗余充足 |
| 内存 | 128GB DDR4/DDR5 ECC | 每个 OSD 推荐 8GB 内存(元数据缓存),12×8GB=96GB,剩余 32GB 给系统和 Monitor |
| 系统盘 | 2 块 × 480GB 企业级 SATA SSD(RAID 1) | 安装操作系统、Ceph 软件、Monitor/Manager 元数据,RAID 1 保障系统可靠性 |
| 数据盘(HDD) | 12 块 × 8TB 企业级 SAS 10K/12K HDD | 每块整盘作为 1 个 OSD,不分区、不做 RAID,12 块是单节点最优密度,兼顾容量与性能 |
| 高速缓存盘(NVMe) | 2 块 × 3.2TB 企业级 NVMe SSD(带掉电保护) | 每块 NVMe 划分多个分区,同时承担 HDD OSD 的 WAL+DB 和 纯 NVMe OSD 两种角色,实现介质分层加速 |
| 网络卡 | 2 块 × 25Gbps SFP28 网卡(双端口) | 分离存储网络和业务网络,25Gbps 匹配 NVMe+HDD 混合集群的性能上限 |
| 电源 | 冗余电源(1+1) | 生产环境底线,避免单点电源故障 |
2. 硬盘拓扑与分配(核心落地细节)
拓扑原则
- 故障域隔离:2 块 NVMe 分别连接不同的 PCIe 通道,12 块 HDD 均匀分布在 2 个 SAS 控制器上。
- 对称分配:每块 NVMe 承载 6 个 HDD OSD 的 WAL+DB 分区,剩余空间用于创建纯 NVMe OSD。
- DB 分区容量严格按照官方建议区间(HDD 容量的 4%~10%):以 8TB HDD 为例,DB 分区容量应在 320GB ~ 800GB 之间,本方案取 400GB,满足要求且留有冗余。
- WAL 分区无需单独划分:生产环境最推荐的做法是:不单独拆分 WAL 分区,直接将 WAL 和 DB 合并在同一个高速分区内,Ceph 会自动在分区内分配 WAL 空间,既保证 WAL 在高速介质上,又避免手动分区的容量浪费,运维更简单,完全符合官方设计逻辑。(若考虑单独划分 WAL 分区(强烈不推荐),此时建议容量为 10GB 即可,绝对不可超过 25GB。)
- IO 隔离考量:单块 NVMe 承载的 OSD 总数(含 HDD 加速的 WAL/DB 分区 + 纯 NVMe OSD)建议不超过 8 个,以避免多 OSD 争抢 IO 导致延迟飙升。本方案单块 NVMe 承载 7 个 OSD(6 个 HDD 的 WAL/DB 分区 + 1 个纯 NVMe OSD),完全在安全范围内,冗余充足。
单节点硬盘分配表(详细)
| 硬盘类型 | 数量 | 单盘容量 | 用途 | 分配方式 |
|---|---|---|---|---|
| 系统 SSD | 2 | 480GB | 操作系统 + Monitor | RAID 1,分区安装系统 |
| 数据 HDD | 12 | 8TB | OSD Data 分区 | 每块整盘作为 1 个 OSD,不分区 |
| 高速 NVMe | 2 | 3.2TB | HDD OSD 的 WAL+DB + 纯 NVMe OSD | 具体分区方案如下(以 /dev/nvme0n1 为例): - 划分 6 个 400GB 分区(nvme0n1p1~p6),分别对应 6 个 HDD OSD 的 WAL+DB - 剩余空间 800GB 划分为 1 个独立分区(nvme0n1p7),用于创建 1 个纯 NVMe OSD(可支持更高性能需求) 另一块 NVMe 同样操作,最终单节点共: - 12 个 HDD OSD(全部由 NVMe 加速) - 2 个纯 NVMe OSD(提供低延迟存储池) |
重要说明:
- 每个 HDD OSD 的 DB 分区容量 = 400GB = 8TB × 5%,落在官方建议的 4%~10% 区间内。
- WAL 分区本方案未单独划分,因为 NVMe 作为 DB 设备已足够快,Ceph 会在 DB 分区内动态分配 WAL 空间。常规虚拟化场景下 WAL 占用仅几百 MB,高并发写入场景也稳定在 1GB~2GB 以内,永远不会占用大容量空间,完全无需手动干预。
- 企业级 NVMe SSD 出厂时已预留 7%~10% 的 OP 空间,无需再额外划分未分配空间。
- 分区时务必使用
parted进行 4K 对齐,并记录所有硬盘的/dev/disk/by-id/路径,防止盘符漂移。
三、Ceph 软件配置最佳实践
1. 基础软件栈
- 操作系统:Ubuntu 22.04 LTS / RHEL 9.2(LTS 版本,稳定优先)
- Ceph 版本:Quincy 17.2.7 / Reef 18.2.2(LTS 长期支持版本,生产验证充分)
- 部署工具:Cephadm(官方推荐,容器化部署,运维简单)
2. OSD 创建命令
前置准备
- 所有 HDD 整盘清空,无分区:
wipefs -a /dev/sd[对应HDD] - NVMe 按上述方案划分好分区,使用
parted确保对齐 - 记录所有硬盘的
by-id路径:ls -l /dev/disk/by-id/
创建 HDD OSD(使用 NVMe 分区加速)
# 示例:创建第1个HDD OSD,HDD为/dev/sda,对应的WAL+DB分区为/dev/nvme0n1p1
cephadm shell -- ceph-volume lvm create \
--bluestore \
--data /dev/disk/by-id/[HDD的by-id路径] \
--block.db /dev/disk/by-id/[NVMe分区by-id路径]
无需单独指定
--block.wal,Ceph 会自动在 DB 分区内动态分配 WAL 空间。
创建纯 NVMe OSD
# 示例:创建纯 NVMe OSD,数据盘为 /dev/nvme0n1p7(剩余空间分区)
cephadm shell -- ceph-volume lvm create \
--bluestore \
--data /dev/disk/by-id/[NVMe分区by-id路径]
纯 NVMe OSD 无需额外 DB/WAL 分区,数据直接存储在 NVMe 上,性能最优。
3. BlueStore 参数优化(生产默认值微调)
# 全局开启压缩(zstd算法,节省20%~40%空间,性能损失<5%)
ceph config set global bluestore_compression_algorithm zstd
ceph config set global bluestore_compression_mode force
# HDD OSD优化(4K对齐,提升小文件性能)
ceph config set osd bluestore_min_alloc_size_hdd 4096
# 限制scrub和deep_scrub时间窗口,避免影响业务(默认全天可运行)
ceph config set osd osd_scrub_begin_hour 2 # 常规scrub凌晨2点开始
ceph config set osd osd_scrub_end_hour 6 # 早上6点前结束
ceph config set osd osd_deep_scrub_begin_hour 2 # 深度scrub同样限制在凌晨2-6点
ceph config set osd osd_deep_scrub_end_hour 6
四、存储池设计(分层存储,性能成本兼顾)
1. 核心存储池规划
| 存储池名称 | 介质类型 | 副本 / 纠删码 | 用途 | 容量规划 |
|---|---|---|---|---|
.mgr |
系统 SSD | 3 副本 | Manager 元数据 | 自动创建,无需干预 |
.mon |
系统 SSD | 3 副本 | Monitor 元数据 | 自动创建,无需干预 |
pool-vm-system-nvme |
纯 NVMe | 3 副本 | 虚拟机系统盘、容器镜像 | 单节点 2 个纯 NVMe OSD,3 节点共 6 个 OSD,可用容量 ≈ 6 × 800GB / 3 = 1.6TB |
pool-vm-data-hdd-accel |
NVMe 加速的 HDD | 3 副本 | 虚拟机数据盘、业务数据 | 12×8TB×3 节点 / 3 副本 = 96TB 可用容量 |
pool-backup-ec |
HDD(冷数据) | EC 8+3 | 冷数据备份、归档 | 12×8TB×3 节点 × (8/11) ≈ 209TB 可用容量 |
命名说明:
pool-vm-data-hdd-accel明确表示该池由 带 NVMe 加速的 HDD OSD 组成,避免与纯 NVMe 池混淆。- 各池内 OSD 介质性能一致,杜绝混合介质带来的性能干扰。
容量共享说明:
pool-vm-data-hdd-accel和pool-backup-ec共用同一批 HDD OSD,物理裸容量为 288 TB。因此两个池的实际可用容量并非独立计算值之和,而是取决于数据分布。规划时需根据业务需求分配物理空间,并利用 Ceph 配额和监控确保不超用。上表所列 96 TB 和 209 TB 仅为理论最大值,实际部署时应按比例分配,例如 30 TB(3 副本池)+ 150 TB(EC 池)的组合可满足多数场景。
2. 创建 CRUSH 设备类及存储池命令
为确保存储池只使用指定介质类型的 OSD,必须创建对应的 CRUSH rule 或直接在纠删码配置文件中绑定设备类。
复制池(Replicated Pool)
# 创建基于 host 故障域、选择 hdd 类 OSD 的 rule
ceph osd crush rule create-replicated rule-hdd default host hdd
# 创建基于 host 故障域、选择 nvme 类 OSD 的 rule
ceph osd crush rule create-replicated rule-nvme default host nvme
# 创建虚拟机系统盘池(纯NVMe) - PG数 = 6 OSD × 10 ≈ 60,取2的幂次64
ceph osd pool create pool-vm-system-nvme 64 64 replicated rule-nvme
ceph osd pool application enable pool-vm-system-nvme rbd
# 创建虚拟机数据盘池(NVMe加速HDD) - PG数 = 36 OSD × 10 ≈ 360,取2的幂次512(最低256也可,但512分布更均匀)
ceph osd pool create pool-vm-data-hdd-accel 256 256 replicated rule-hdd
# 注意:36个OSD时,官方建议PG数在256~512之间,本方案取256,兼顾性能和资源占用。
ceph osd pool application enable pool-vm-data-hdd-accel rbd
纠删码池(Erasure Coded Pool)
官方推荐在 erasure-code-profile 中直接指定 crush-device-class,从底层锁定介质类型,避免后续误用。
# 创建显式绑定hdd设备类的EC配置文件,故障域为host
ceph osd erasure-code-profile set ec-8-3 \
k=8 m=3 \
crush-failure-domain=host \
crush-device-class=hdd
# 创建EC池,无需额外指定rule,自动继承profile中的介质和故障域配置
ceph osd pool create pool-backup-ec 64 64 erasure ec-8-3
ceph osd pool application enable pool-backup-ec rgw
说明:EC 池的 PG 数通常可以较小,因为其数据分布机制与复制池不同。64 个 PG 在 36 个 HDD OSD 上足够。
五、运维监控与避坑红线
1. 核心监控指标(Prometheus+Grafana)
-
集群健康:
ceph health、OSD 在线率(≥99.9%) -
性能指标:OSD IOPS(HDD≥100 IOPS、NVMe≥5000 IOPS)、读写延迟(写延迟 < 10ms)
-
容量指标:OSD 使用率(≤80%,超过 70% 触发扩容预警)、DB 分区使用率(≤70%)
DB 分区使用率超过 70% 应尽快扩容或调整,否则可能导致 OSD 异常。
-
硬盘健康:SMART 信息监控(重点关注
Reallocated_Sector_Ct、NVMe 寿命剩余)
2. 生产避坑红线(绝对不能碰)
-
同池介质必须一致:存储池必须通过 CRUSH rule 或 EC profile 绑定到特定设备类(hdd 或 nvme),严禁混入其他类型 OSD。
-
DB 分区容量硬红线:每个 HDD OSD 的 DB 分区容量必须 ≥ 对应 HDD 容量的 4%,推荐 5%~10%。本方案取 5%(400GB),满足要求且留有余量。
官方建议原文:对于 BlueStore OSD,如果使用单独的 DB 设备,其容量建议为 HDD 容量的 4%~10%,具体取决于负载。
-
WAL 分区容量说明:如果单独划分 WAL 分区,10GB 足够,无需按百分比计算。本方案未单独划分 WAL,因为 NVMe 作为 DB 设备已足够快,Ceph 会在 DB 分区内动态分配 WAL 空间(常规占用仅几百 MB,高并发时也稳定在 1GB~2GB 以内),完全无需手动干预。
-
严禁消费级硬盘:必须使用带掉电保护的企业级 NVMe/SSD/HDD。
-
网络必须分离:存储网络和业务网络物理隔离,避免流量争抢。
-
HDD 整盘使用:每块 HDD 直接作为 1 个 OSD,不分区、不做 RAID。
-
企业级 NVMe 自带 OP:无需再额外划分未分配空间作为 OP,出厂已预留 7%~10% 空间,直接使用全部用户容量即可。
-
网络带宽评估:12 个 HDD 聚合带宽约 19.2Gbps,建议使用双网卡绑定(如 LACP)或多 TCP 连接分担流量,避免单口 25G 成为瓶颈。
-
NVMe IO 隔离:单块 NVMe 承载的 OSD 总数(含 WAL/DB 分区 + 纯 NVMe OSD)建议不超过 8 个。本方案单块 NVMe 承载 7 个 OSD,安全可控。
六、方案优势总结
- 稳定可靠:3 副本、冗余硬件、LTS 版本,生产验证充分。
- 性能达标:NVMe 做 WAL+DB,HDD 随机 IO 性能提升 10~50 倍;纯 NVMe OSD 满足超高 IOPS 需求。
- 成本可控:仅用少量 NVMe 做加速,大部分容量用 HDD,性价比最高。
- 运维极简:无复杂缓存池,HDD 整盘 OSD,扩容 / 故障替换简单。
- 扩展性强:支持节点横向扩容,单节点可升级至 16 块 HDD。
- 严格遵循官方建议:
- DB 分区容量落在 4%~10% 黄金区间,确保长期健康运行
- WAL 动态分配,无需手动干预
- EC profile 显式绑定设备类,杜绝混盘风险
- PG 数按官方公式计算,数据分布均匀
- scrub/deep_scrub 限定业务低峰期,避免性能干扰
- NVMe IO 隔离合理,防止争抢

浙公网安备 33010602011771号