ceph性能调优需从osd线程、bluestore配置、pg分布、守护进程日志及cpu/io调度五方面入手:调整rocksdb与osd线程数、分离db/wal设备并启用lz4压缩、合理设置pg数量与crush权重、降低日志级别并停用非必要服务、绑定cpu核心且ssd/nvme使用none调度器。

如果您在使用 Linux Ceph 存储集群时观察到读写延迟升高、吞吐量未达预期或 OSD CPU/IO 利用率不均衡,则可能是由于默认配置未适配实际硬件与工作负载。以下是针对该问题的多种性能调优路径:
一、调整 OSD 线程与并发参数
Ceph OSD 进程依赖多个线程池处理不同任务,包括刷写(flush)、提交(commit)、回收(recovery)和清理(scrub)。默认线程数常无法充分利用多核 CPU 或高 IOPS 存储设备,需根据物理核心数与磁盘类型重新分配。
1、编辑 /etc/ceph/ceph.conf,在 [osd] 段下添加或修改以下参数:
2、设置 rocksdb 写入队列深度:rocksdb_max_background_compactions = 8
3、增大 OSD 处理客户端请求的线程数:osd_op_threads = 16
4、提升恢复与回填并发度:osd_recovery_threads = 8 和 osd_backfill_threads = 8
5、重启对应 OSD 服务:systemctl restart ceph-osd@
二、优化 BlueStore 后端配置
BlueStore 是 Ceph 默认对象存储引擎,其性能高度依赖元数据设备(DB/WAL)与数据设备的协同效率。若 DB/WAL 与 data 共享同一物理设备,将引发严重 IO 争抢;若未启用压缩或缓存策略,亦会加剧带宽与内存压力。
1、确认 DB/WAL 设备独立于 data 设备:ceph-volume lvm list 输出中应显示 separate db devices
2、为 BlueStore 启用 LZ4 压缩(低 CPU 开销):bluestore_compression_algorithm = lz4
3、设置压缩阈值以避免小对象压缩开销:bluestore_compression_min_blob_size = 4096
4、增大 BlueStore 缓存总量(按可用内存比例设定):bluestore_cache_size = 10737418240(即 10GB)
5、应用配置后执行:ceph-osd --mkfs --id
三、调优 CRUSH Map 与 PG 分布
PG(Placement Group)数量过少会导致单个 OSD 承载过多 PG,引发锁竞争与元数据瓶颈;分布不均则造成部分 OSD 负载远高于其他节点。CRUSH rule 权重未校准也会放大此效应。
1、计算推荐 PG 数量:pg calc
2、批量调整所有 pool 的 PG 数:ceph osd pool set
3、等待 pg_num 调整完成后再设置 pgp_num:ceph osd pool set
4、检查各 OSD 的 PG 分布偏差:ceph osd df tree | head -20,识别权重异常节点
5、对权重偏低的 OSD 执行权重修正:ceph osd crush reweight osd.
四、禁用非必要守护进程与日志行为
Ceph Monitor 和 MDS 在高负载集群中可能因频繁状态同步或日志刷写引入额外延迟;OSD 默认日志级别过高亦会显著增加磁盘写入量,尤其在 NVMe 设备上易触发写放大。
1、降低 OSD 日志级别(生产环境推荐):osd_debug = 0 与 debug_osd = 0/5(仅记录错误)
2、限制 Monitor 日志刷写频率:mon_commit_timeout = 10.0(默认 0.5s,适度放宽)
3、若未启用 CephFS,停用全部 MDS 实例:systemctl stop ceph-mds.target 并屏蔽启动:systemctl disable ceph-mds.target
4、关闭 Monitor 自动清除旧日志:mon_max_log_epochs = 0
5、重启 Monitor 服务:systemctl restart ceph-mon@
五、绑定 CPU 与调整内核 IO 调度器
OSD 进程在 NUMA 架构服务器上若跨节点访问内存或未绑定专用 CPU 核心,将导致 cache miss 增加与延迟抖动;同时,传统 CFQ 或 BFQ 调度器对 SSD/NVMe 设备支持不佳,应切换为 none 或 kyber。
1、确定 OSD 进程 PID:pgrep -f "ceph-osd.*
2、将该进程绑定至特定 CPU 核心集(如 0-7):taskset -cp 0-7
3、持久化绑定:修改 systemd service 文件,在 [Service] 下添加:ExecStartPre=/usr/bin/taskset -cp 0-7 /var/run/ceph/ceph-osd.
4、确认数据设备类型:lsblk -d -o NAME,ROTA(ROTA=0 表示 SSD/NVMe)
5、对 ROTA=0 的设备设置调度器为 none:echo none > /sys/block/











