Linux Ceph 存储集群性能调优

9次阅读

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

Linux Ceph 存储集群性能调优

如果您在使用 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 = 8osd_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 –cluster ceph –conf /etc/ceph/ceph.conf(仅限新部署或可接受重格式化场景)

三、调优 CRUSH Map 与 PG 分布

PG(Placement Group)数量过少会导致单个 OSD 承载过多 PG,引发锁竞争与元数据瓶颈;分布不均则造成部分 OSD 负载远高于其他节点。CRUSH rule 权重未校准也会放大此效应。

1、计算推荐 PG 数量:pg calc (使用 ceph-tools 中的 pgcalc 工具)

2、批量调整所有 pool 的 PG 数:ceph osd pool set pg_num

3、等待 pg_num 调整完成后再设置 pgp_num:ceph osd pool set pgp_num

4、检查各 OSD 的 PG 分布偏差:ceph osd df tree | head -20,识别权重异常节点

5、对权重偏低的 OSD 执行权重修正:ceph osd crush reweight osd.(例如从 1.0 调至 1.2)

四、禁用非必要守护进程与日志行为

Ceph Monitor 和 MDS 在高负载集群中可能因频繁状态同步或日志刷写引入额外延迟;OSD 默认日志级别过高亦会显著增加磁盘写入量,尤其在 NVMe 设备上易触发写放大。

1、降低 OSD 日志级别(生产环境推荐):osd_debug = 0debug_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..pid

4、确认数据设备类型:lsblk -d -o NAME,ROTA(ROTA=0 表示 SSD/NVMe)

5、对 ROTA=0 的设备设置调度器为 none:echo none > /sys/block//queue/scheduler

text=ZqhQzanResources