鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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]

    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_context

    debug_crush

    debug_mds

    debug_mds_balancer

    debug_mds_locker

    debug_mds_log

    debug_mds_log_expire

    debug_mds_migrator

    debug_buffer

    debug_timer

    debug_filer

    debug_striper

    debug_objecter

    debug_rados

    debug_rbd

    debug_rbd_mirror

    debug_rbd_replay

    debug_journaler

    debug_objectcacher

    debug_client

    debug_osd

    debug_optracker

    debug_objclass

    debug_filestore

    debug_journal

    debug_ms

    debug_mon

    debug_monc

    debug_paxos

    debug_tp

    debug_auth

    debug_crypto

    debug_finisher

    debug_reserver

    debug_heartbeatmap

    debug_perfcounter

    debug_rgw

    debug_civetweb

    debug_javaclient

    debug_asok

    debug_throttle

    debug_refs

    debug_xio

    debug_compressor

    debug_bluestore

    debug_bluefs

    debug_bdev

    debug_kstore

    debug_rocksdb

    debug_leveldb

    debug_memdb

    debug_kinetic

    debug_fuse

    debug_mgr

    debug_mgrc

    debug_dpdk

    debug_eventtrace

    throttler_perf_counter

    默认开启,可以观察阈值是否达到瓶颈。性能调节到最佳后,建议关闭,tracker影响性能

    默认值:True

    修改建议:False

    ms_dispatch_throttle_bytes

    等待调度的最大消息数,建议调大,提高消息处理效率

    默认值:104857600

    修改建议:2097152000

    ms_bind_before_connect

    消息队列绑定,保证多网口流量均衡

    默认值:False

    修改建议:True

    [client]

    rbd_cache

    关闭客户端cache。关闭后rbd cache一直是writethrough模式

    默认值:True

    修改建议:False

    [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
    

    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 evalceph pg dump随时查看当前PG分布情况。
    • 通过ceph balancer mode upmap以及ceph balancer on使Ceph PG自动均衡优化,Ceph每隔60秒会调整少量PG分布。通过ceph balancer evalceph 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_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。