文档首页 > > 调优指南> Ceph块存储 调优指南(鲲鹏920 for CentOS 7.6)> 均衡型配置调优>

Ceph调优

Ceph调优

分享
更新时间:2021/03/03 GMT+08:00

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集群生效。Ceph参数优化项如表1所示:

    表1 Ceph参数配置

    参数名称

    参数说明

    优化建议

    [global]

    cluster_network

    配置一层不同于Public Network的网段,用于OSD间副本复制/数据均衡,缓解Public Network网络压力。

    修改建议:192.168.4.0/24,不同于Public即可

    public_network

    修改建议:192.168.3.0/24,不同于Cluster即可

    osd_pool_default_size

    副本数设置。

    修改建议:3

    osd_memory_target

    该选项设置了每个OSD进程能申请到的内存大小。

    修改建议:4294967296

    其他配置选项优化可参考表2

    表2 其他参数配置

    参数名称

    参数含义

    优化建议

    [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_memory_target

    该选项设置了每个OSD进程能申请到的内存大小。

    默认值:4294967296

    修改建议:4294967296

    [mon]

    mon_clock_drift_allowed

    monitor间的clock drift。

    默认值:0.05

    修改建议:1

    mon_osd_min_down_reporters

    向monitor报告down的最小OSD数。

    默认值:2

    修改建议:13

    mon_osd_down_out_interval

    标记一个OSD状态为down和out之前Ceph等待的秒数。

    默认值:600

    修改建议:600

    [OSD]

    osd_journal_size

    osd journal大小。

    默认值:5120

    修改建议:20000

    osd_max_write_size

    OSD一次可写入的最大值(MB)。

    默认值:90

    修改建议:512

    osd_client_message_size_cap

    客户端允许在内存中的最大数据(Bytes)。

    默认值:100

    修改建议:2147483648

    osd_deep_scrub_stride

    在Deep Scrub时候允许读取的字节数(Bytes)。

    默认值:524288

    修改建议:131072

    osd_map_cache_size

    保留OSD Map的缓存(MB)。

    默认值:50

    修改建议:1024

    osd_recovery_op_priority

    恢复操作优先级,取值1-63,值越高占用资源越高。

    默认值:3

    修改建议:2

    osd_recovery_max_active

    同一时间内活跃的恢复请求数。

    默认值:3

    修改建议:10

    osd_max_backfills

    一个OSD允许的最大backfills数。

    默认值:1

    修改建议:4

    osd_min_pg_log_entries

    修建PGLog是保留的最小PGLog数。

    默认值:3000

    修改建议:30000

    osd_max_pg_log_entries

    修建PGLog是保留的最大PGLog数。

    默认值:3000

    修改建议:100000

    osd_mon_heartbeat_interval

    OSD ping一个monitor的时间间隔(单位S)。

    默认值:30

    修改建议:40

    ms_dispatch_throttle_bytes

    等待派遣的最大消息数。

    默认值:104857600

    修改建议:1048576000

    objecter_inflight_ops

    客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限。

    默认值:1024

    修改建议:819200

    osd_op_log_threshold

    一次显示多少操作的log。

    默认值:5

    修改建议:50

    osd_crush_chooseleaf_type

    CRUSH规则用到chooseleaf时的bucket的类型。

    默认值:1

    修改建议:0

    journal_max_write_bytes

    journal一次性写入的最大字节数(Bytes)。

    默认值:10485760

    修改建议:1073714824

    journal_max_write_entries

    journal一次性写入的最大记录数。

    默认值:100

    修改建议:10000

    [Client]

    rbd_cache

    RBD缓存。

    默认值:True

    修改建议:True

    rbd_cache_size

    RBD缓存大小(Bytes)。

    默认值:33554432

    修改建议:335544320

    rbd_cache_max_dirty

    缓存为write-back时允许的最大dirty字节数(Bytes),如果为0,使用write-through。

    默认值:25165824

    修改建议:134217728

    rbd_cache_max_dirty_age

    在被刷新到存储盘前dirty数据存在缓存的时间(seconds)。

    默认值:1

    修改建议:30

    rbd_cache_writethrough_until_flush

    该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写。设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。

    默认值:True

    修改建议:False

    rbd_cache_max_dirty_object

    最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分。

    每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能。

    默认值:0

    修改建议:2

    rbd_cache_target_dirty

    开始执行回写过程的脏数据大小,不能超过“rbd_cache_max_dirty”

    默认值:16777216

    修改建议:235544320

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分布参数配置如表3所示:

    表3 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>”即可。

    具体优化项如表4所示。

    表4 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。

压缩算法配置参数调优

  • 目的

    调整压缩算法相关配置参数,使压缩算法性能发挥到最优。

  • 方法

    Ceph默认bluestore_min_alloc_size_hdd为32KB,该参数会影响压缩算法压缩后最终数据的大小,调小该参数,可以发挥压缩算法的压缩率优势。

    Ceph默认osd进程中处理IO请求的线程数为5,当使能压缩算法后,线程数会造成性能瓶颈,调大线程数,可以发挥压缩算法的性能优势。

    PG分布参数配置如下所示:

    参数名称

    参数说明

    优化建议

    bluestore_min_alloc_size_hdd

    bluestore存储引擎中hdd数据盘的对象最小分配大小。

    默认值:32768

    修改建议:8192

    osd_op_num_shards_hdd

    osd进程针对hdd数据盘的分片个数。

    默认值:5

    修改建议:12

    osd_op_num_threads_per_shard_hdd

    osd进程针对hdd数据盘平均每个分片的线程数。

    默认值:1

    修改建议:2

Bcache使能调优

Bcache是Linux内核块层cache,它使用SSD来作为HDD硬盘的cache,从而起到加速作用。Bcache内核模块需要重新编译内核使能,具体移植指导及部署指导请参考《Bcache 用户指南(CentOS 7.6)》。

IO直通工具调优

IO直通工具是针对Ceph均衡型场景下的一个流程优化工具,可以自动检测Ceph集群中的OSD设备进行优化。具体使用指导请参考《IO直通工具 用户指南》。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区论坛频道来与我们联系探讨

智能客服提问云社区提问