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-accelpool-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. 生产避坑红线(绝对不能碰)

  1. 同池介质必须一致:存储池必须通过 CRUSH rule 或 EC profile 绑定到特定设备类(hdd 或 nvme),严禁混入其他类型 OSD。

  2. DB 分区容量硬红线:每个 HDD OSD 的 DB 分区容量必须 ≥ 对应 HDD 容量的 4%,推荐 5%~10%。本方案取 5%(400GB),满足要求且留有余量。

    官方建议原文:对于 BlueStore OSD,如果使用单独的 DB 设备,其容量建议为 HDD 容量的 4%~10%,具体取决于负载。

  3. WAL 分区容量说明:如果单独划分 WAL 分区,10GB 足够,无需按百分比计算。本方案未单独划分 WAL,因为 NVMe 作为 DB 设备已足够快,Ceph 会在 DB 分区内动态分配 WAL 空间(常规占用仅几百 MB,高并发时也稳定在 1GB~2GB 以内),完全无需手动干预。

  4. 严禁消费级硬盘:必须使用带掉电保护的企业级 NVMe/SSD/HDD。

  5. 网络必须分离:存储网络和业务网络物理隔离,避免流量争抢。

  6. HDD 整盘使用:每块 HDD 直接作为 1 个 OSD,不分区、不做 RAID。

  7. 企业级 NVMe 自带 OP:无需再额外划分未分配空间作为 OP,出厂已预留 7%~10% 空间,直接使用全部用户容量即可。

  8. 网络带宽评估:12 个 HDD 聚合带宽约 19.2Gbps,建议使用双网卡绑定(如 LACP)或多 TCP 连接分担流量,避免单口 25G 成为瓶颈。

  9. NVMe IO 隔离:单块 NVMe 承载的 OSD 总数(含 WAL/DB 分区 + 纯 NVMe OSD)建议不超过 8 个。本方案单块 NVMe 承载 7 个 OSD,安全可控。


六、方案优势总结

  1. 稳定可靠:3 副本、冗余硬件、LTS 版本,生产验证充分。
  2. 性能达标:NVMe 做 WAL+DB,HDD 随机 IO 性能提升 10~50 倍;纯 NVMe OSD 满足超高 IOPS 需求。
  3. 成本可控:仅用少量 NVMe 做加速,大部分容量用 HDD,性价比最高。
  4. 运维极简:无复杂缓存池,HDD 整盘 OSD,扩容 / 故障替换简单。
  5. 扩展性强:支持节点横向扩容,单节点可升级至 16 块 HDD。
  6. 严格遵循官方建议
    • DB 分区容量落在 4%~10% 黄金区间,确保长期健康运行
    • WAL 动态分配,无需手动干预
    • EC profile 显式绑定设备类,杜绝混盘风险
    • PG 数按官方公式计算,数据分布均匀
    • scrub/deep_scrub 限定业务低峰期,避免性能干扰
    • NVMe IO 隔离合理,防止争抢
posted @ 2026-03-03 14:40  wanghongwei-dev  阅读(0)  评论(0)    收藏  举报