---
title: Ceph调优
description: "- 目的"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_05_0013.html
sourcePath: /source/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_05_0013.html
indexId: 626eb41c93167dc3524d346374977f0ed52accf9e35e399afeb0563500f988d073
---
# Ceph调优

#### Ceph配置调优

- 目的
  调整Ceph配置选项，充分发挥系统硬件性能。

- 方法
  所有的ceph配置参数都是通过修改“/etc/ceph/ceph.conf”实现的。

  比方说要修改默认副本数为4，则在“/etc/ceph/ceph.conf”文件中添加“osd_pool_default_size = 4”这一行字段，然后systemctl restart ceph.target重启Ceph守护进程使之生效。

  以上操作只是对当前Ceph节点生效，需要修改所有Ceph节点的“ceph.conf”文件并重启Ceph守护进程才对整个Ceph集群生效。

  具体优化项详见表1。

**表1 Ceph参数配置**

| 参数名称 | 参数含义 | 优化建议 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| [global] | [global] | [global] |  |  |  |  |
| osd\_pool\_default\_min\_size | PG处于degraded状态不影响其IO能力，min\_size是一个PG能接受IO的最小副本数。 | 默认值：0 修改建议：1 |  |  |  |  |
| cluster\_network | 配置一层不同于public network的网段，用于OSD间副本复制/数据均衡，缓解public network网络压力。 | 默认值：/ 修改建议：192.168.4.0/24 |  |  |  |  |
| osd\_pool\_default\_size | 副本数设置。 | 默认值：3 修改建议：3 |  |  |  |  |
| mon\_max\_pg\_per\_osd | 阈值项：调大PG告警阈值 | 默认值：250 修改建议：3000 |  |  |  |  |
| mon\_max\_pool\_pg\_num | 阈值项：调大PG告警阈值 | 默认值：65536 修改建议：300000 |  |  |  |  |
| debug\_none | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_lockdep | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_context | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_crush | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds\_balancer | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds\_locker | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds\_log | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds\_log\_expire | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mds\_migrator | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_buffer | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_timer | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_filer | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_striper | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_objecter | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rados | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rbd | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rbd\_mirror | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rbd\_replay | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_journaler | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_objectcacher | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_client | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_osd | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_optracker | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_objclass | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_filestore | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_journal | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_ms | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mon | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_monc | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_paxos | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_tp | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_auth | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_crypto | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_finisher | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_reserver | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_heartbeatmap | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_perfcounter | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rgw | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_civetweb | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_javaclient | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_asok | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_throttle | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_refs | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_xio | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_compressor | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_bluestore | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_bluefs | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_bdev | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_kstore | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_rocksdb | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_leveldb | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_memdb | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_kinetic | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_fuse | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mgr | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_mgrc | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_dpdk | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| debug\_eventtrace | 关闭debug开关，减少日志打印开销 | 修改建议：0/0 |  |  |  |  |
| throttler\_perf\_counter | 默认开启，可以观察阈值是否达到瓶颈。性能调节到最佳后，建议关闭，tracker影响性能 | 默认值：True 修改建议：False |  |  |  |  |
| ms\_dispatch\_throttle\_bytes | 等待调度的最大消息数，建议调大，提高消息处理效率 | 默认值：104857600 修改建议：2097152000 |  |  |  |  |
| ms\_bind\_before\_connect | 消息队列绑定，保证多网口流量均衡 | 默认值：False 修改建议：True |  |  |  |  |
| [client] | [client] | [client] |  |  |  |  |
| rbd\_cache | 关闭客户端cache。关闭后rbd cache一直是writethrough模式 | 默认值：True 修改建议：False |  |  |  |  |
| [osd] | [osd] | [osd] |  |  |  |  |
| osd\_max\_write\_size | OSD一次可写入的最大值（MB） | 默认值：90 修改建议：256 |  |  |  |  |
| osd\_client\_message\_size\_cap | 客户端允许在内存中的最大数据（Bytes） | 默认值：524288000 修改建议：1073741824 |  |  |  |  |
| osd\_map\_cache\_size | 保留OSD Map的缓存（MB） | 默认值：50 修改建议：1024 |  |  |  |  |
| bluestore\_rocksdb\_options | rocksdb配置参数 | 默认值： 1 compression=kNoCompression,max\_write\_buffer\_number=4,min\_write\_buffer\_number\_to\_merge=1,recycle\_log\_file\_num=4,write\_buffer\_size=268435456,writable\_file\_max\_buffer\_size=0,compaction\_readahead\_size=2097152,max\_background\_compactions=2 修改建议： 1 compression=kNoCompression,max\_write\_buffer\_number=64,min\_write\_buffer\_number\_to\_merge=32,recycle\_log\_file\_num=64,compaction\_style=kCompactionStyleLevel,write\_buffer\_size=4MB,target\_file\_size\_base=4MB,max\_background\_compactions=16,level0\_file\_num\_compaction\_trigger=64,level0\_slowdown\_writes\_trigger=128,level0\_stop\_writes\_trigger=256,max\_bytes\_for\_level\_base=6GB,compaction\_threads=8,flusher\_threads=4,compaction\_readahead\_size=2MB | 1 | compression=kNoCompression,max\_write\_buffer\_number=4,min\_write\_buffer\_number\_to\_merge=1,recycle\_log\_file\_num=4,write\_buffer\_size=268435456,writable\_file\_max\_buffer\_size=0,compaction\_readahead\_size=2097152,max\_background\_compactions=2 | 1 | compression=kNoCompression,max\_write\_buffer\_number=64,min\_write\_buffer\_number\_to\_merge=32,recycle\_log\_file\_num=64,compaction\_style=kCompactionStyleLevel,write\_buffer\_size=4MB,target\_file\_size\_base=4MB,max\_background\_compactions=16,level0\_file\_num\_compaction\_trigger=64,level0\_slowdown\_writes\_trigger=128,level0\_stop\_writes\_trigger=256,max\_bytes\_for\_level\_base=6GB,compaction\_threads=8,flusher\_threads=4,compaction\_readahead\_size=2MB |
| 1 | compression=kNoCompression,max\_write\_buffer\_number=4,min\_write\_buffer\_number\_to\_merge=1,recycle\_log\_file\_num=4,write\_buffer\_size=268435456,writable\_file\_max\_buffer\_size=0,compaction\_readahead\_size=2097152,max\_background\_compactions=2 |  |  |  |  |  |
| 1 | compression=kNoCompression,max\_write\_buffer\_number=64,min\_write\_buffer\_number\_to\_merge=32,recycle\_log\_file\_num=64,compaction\_style=kCompactionStyleLevel,write\_buffer\_size=4MB,target\_file\_size\_base=4MB,max\_background\_compactions=16,level0\_file\_num\_compaction\_trigger=64,level0\_slowdown\_writes\_trigger=128,level0\_stop\_writes\_trigger=256,max\_bytes\_for\_level\_base=6GB,compaction\_threads=8,flusher\_threads=4,compaction\_readahead\_size=2MB |  |  |  |  |  |
| mon\_osd\_full\_ratio | 将OSD视为已满之前使用的磁盘空间的百分比。数据量超过这个百分比后会停止一切读写操作，直到扩容或清除数据量至小于该百分比 | 默认值：0.95 修改建议：0.97 |  |  |  |  |
| mon\_osd\_nearfull\_ratio | 将OSD视为近似之前使用的磁盘空间的百分比。数据量超过这个百分比后会产生告警，提示空间即将耗尽 | 默认值：0.85 修改建议：0.95 |  |  |  |  |
| osd\_min\_pg\_log\_entries | PGLog记录条数下阈值 | 默认值：3000 修改建议：10 |  |  |  |  |
| osd\_max\_pg\_log\_entries | PGLog记录条数上阈值 | 默认值：3000 修改建议：10 |  |  |  |  |
| bluestore\_cache\_meta\_ratio | bluestore cache中分配给meta的比例 | 默认值：0.4 修改建议：0.8 |  |  |  |  |
| bluestore\_cache\_kv\_ratio | bluestore cache中分配给kv的比例 | 默认值：0.4 修改建议：0.2 |  |  |  |  |


#### PG分布调优

- 目的
  调整每个OSD上承载的PG数量，使每个OSD的负载更加均衡。

- 方法
  Ceph默认为每个存储池分配8个“pg/pgp”，在创建存储池的时候使用ceph osd pool create {pool-name} {pg-num} {pgp-num}指定“pg/pgp”数量，或者使用ceph osd pool set {pool_name} pg_num {pg-num}和ceph osd pool set {pool_name} pgp_num {pgp-num}修改已创建好的存储池的“pg/pgp”数量。修改完成后使用ceph osd pool get {pool_name} pg_num/pgp_num查看存储池的“pg/pgp”数量。

  “ceph balancer mode”默认为“none”，用ceph balancer mode upmap命令调整为“upmap”。“ceph balancer”功能默认不打开，ceph balancer on/off用来打开/关闭“ceph balancer”功能。

  PG分布参数配置如表2所示：

**表2 PG分布参数配置**

| 参数名称 | 参数说明 | 优化建议 |
| --- | --- | --- |
| pg\_num | Total PGs = (Total\_number\_of\_OSD \* 100) / max\_replication\_count，得出的结果向上取到最近的2的整数次幂。 | 默认值：8 现象：pg数量太少的话会有warning提示 修改建议：根据计算公式具体计算得到的值 |
| pgp\_num | pgp数量设置为与pg相同。 | 默认值：8 现象：pgp数量建议与pg数量相同 修改建议：根据计算公式具体计算得到的值 |
| ceph\_balancer\_mode | 使能balancer均衡器插件，并设置均衡器插件模式为“upmap”。 | 默认值：none 现象：若PG数量不均衡会出现个别OSD负载较大而成为瓶颈 修改建议：upmap |


  每个OSD上承载的PG数量应相同或非常接近，否则容易出现个别OSD压力较大成为瓶颈，运用balancer插件可以实现PG分布优化，可通过ceph balancer eval或ceph pg dump随时查看当前PG分布情况。 通过ceph balancer mode upmap以及ceph balancer on使Ceph PG自动均衡优化，Ceph每隔60秒会调整少量PG分布。通过ceph balancer eval或ceph pg dump随时查看当前PG分布情况，若PG分布情况不再变化，则说明分布已达到最佳。 上述每个OSD对应的PG分布主要影响写入的负载均衡。除了每个OSD对应的PG数量优化外，主PG的分布情况也需要视情况优化，即尽可能地将主PG均匀分布到各个OSD上。


#### OSD绑核

- 目的
  建议将OSD进程绑定到固定CPU上。

- 方法
  通过修改“/etc/ceph/ceph.conf”文件，添加“osd_numa_node = <NUM>”即可。

  具体优化项如表3所示。

**表3 OSD绑核参数配置**

| 参数名称 | 参数说明 | 优化建议 |
| --- | --- | --- |
| [osd.n] | [osd.n] | [osd.n] |
| osd\_numa\_node | 将osd.n守护进程绑定到指定空闲NUMA节点上，此处的空闲NUMA节点指处理网卡软中断的节点以外的节点。 | 默认值：无 现象：若OSD进程所在CPU和与网卡中断相同，可能会出现个别CPU的压力过大的情况 修改建议：分离CPU负载压力，避免OSD进程与网卡中断或其他高CPU消耗的进程运行在同一NUMA节点上 |


  Ceph OSD守护进程应当与网卡软中断在不同的NUMA节点上处理，否则在网络压力大的时候容易出现CPU瓶颈。Ceph默认会将OSD进程均匀地分配到所有CPU core，可以在ceph.conf中加入osd_numa_node配置选项，避免OSD进程与网卡中断或其他高CPU消耗的进程运行在同一NUMA节点上。 网络性能调优将网卡软中断绑定到所属NUMA节点的CPU core上，当网络压力较大时，绑定了软中断的CPU core利用率较高，建议将osd_numa_node设置为与网卡不同的NUMA节点。例如，通过命令cat /sys/class/net/ <网口名> /device/numa_node查询到网卡归属于NUMA节点2，则设置osd_numa_node = 0或者osd_numa_node = 1，尽量避免OSD与网卡软中断使用相同的CPU core。
