ceph性能调优

本文详细介绍了如何从硬件配置、操作系统参数、ceph配置、客户端参数和缓存层设置等方面进行Ceph性能调优,包括CPU绑定、内存分配、网络需求、SSD使用、BIOS设置和多层优化策略。
摘要由CSDN通过智能技术生成

ceph性能调优

一、硬件层面

1.1、 CPU

ceph-osd进程在运行过程中会消耗CPU资源,所以一般会为每一个ceph-osd进程绑定一个CPU核上。

ceph-mon进程并不十分消耗CPU资源,所以不必为ceph-mon进程预留过多的CPU资源。

ceph-msd也是非常消耗CPU资源的,所以需要提供更多的CPU资源。

1.2、 内存

ceph-mon和ceph-mds需要2G内存,每个ceph-osd进程需要1G内存。

1.3、 网络

万兆网络现在基本上是跑Ceph必备的,网络规划上,也尽量考虑分离cilent和cluster网络。网络接口上可以使用bond来提供高可用或负载均衡。

1.4、SSD

SSD在ceph中的使用可以有几种架构

a、 ssd作为Journal 一块SSD 对应不超过4块osd

b、 ssd作为高速ssd pool(需要更改crushmap)

1.5、BISO

a、 开启VT和HT,VH是虚拟化云平台必备的,HT是开启超线程单个处理器都能使用线程级并行计算。

b、 关闭节能设置,可有一定的性能提升。

c、 NUMA思路就是将内存和CPU分割为多个区域,每个区域叫做NODE,然后将NODE高速互联。 node内cpu与内存访问速度快于访问其他node的内存, NUMA可能会在某些情况下影响ceph-osd 。解决的方案,一种是通过BIOS关闭NUMA,另外一种就是通过cgroup将ceph-osd进程与某一个CPU Core以及同一NODE下的内存进行绑定。但是第二种看起来更麻烦,所以一般部署的时候可以在系统层面关闭NUMA。CentOS系统下,通过修改/etc/grub.conf文件,添加numa=off来关闭NUMA。

二、操作系统参数调优

1、 Kernel pid max
echo 4194303 > /proc/sys/kernel/pid_max

2、 设置MTU,交换机端需要支持该功能,系统网卡设置才有效果
配置文件追加MTU=9000
临时配置 ifconfig eth0 mtu 9000

3、 disk read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作
echo "8192" > /sys/block/sda/queue/read_ahead_kb

4、 swappiness, 主要控制系统对swap的使用
echo "vm.swappiness = 0" >> /etc/sysctl.conf ; sysctl -p

5、 I/O Scheduler,SSD要用noop,SATA/SAS使用deadline
echo "deadline" >/sys/block/vd[x]/queue/scheduler
echo "noop" >/sys/block/vd[x]/queue/scheduler

三、ceph参数调优

3.1、[global]

public network = 192.168.110.0/24     #客户端网络
cluster network = 192.168.1.0/24      #ceph集群网络
max open files =131072                #最大文件打开数

3.2、ODS参数

filestore xattr use omap为xattrs使用object map,ext4 文件系统使用xattr,xfs或者btrfsfalsetrue
filestore max sync interval日志同步到数据盘最大同步间隔515
filestore min sync interval日志同步到数据盘最小同步间隔0.110
filestore queue max ops数据盘最大接受操作数50025000
filestore queue max bytes数据盘一次操作最大字节数100<<2010485760
filestore queue committing max ops数据盘能过commit的操作数5005000
filestore queue committing max bytes数据盘能过commit的最大字节数100<<2010 485 760 000
filestore op threads并发文件系统最大操作数232
参数描述默认值建议值
journal max write bytes日志一次能够写入的最大字节数1073714824
journal max write entries日志一次能够写入的最大条目数10000
journal queue max ops同一时间内日志队列中允许的最大操作数50000
journal queue max bytes同一时间内日志队列中允许的最大字节数10485760000
参数描述默认值建议值
osd max write sizeOSD一次允许写入最大字节数(MB)90512
osd client message size cap内存中允许客户端存放的最大数据量(bytes)524 288 0002147 483 648
osd deep scrub stride执行一次深入清理时OSD能够读取最大字节数(bytes)524288131072
osd op threadsOSD守护进程能够使用的最大操作线程数216
osd disk threads在执行如恢复和清理等OSD密集型操作时允许磁盘线程数14
osd map cache sizeOSD map缓存大小(MB)5001024
osd map cache bi size内存中允许的OSD map缓存大小(MB)50128
ods mount options xfs“rw,noatime,inode64,logbsize=256k,delaylog,allocsize=4M”

3.3、SSD做OSDjournal分区

3.4、PG number调整

PG和PGP数量一定要根据OSD的数量进行调整,计算公式:

Total PGs = (Total_number_of_OSD *100)/max_replication_count/pool_count

例如:OSD 15个,副本数:3. PG数目= 15*100/3 = 500 ~= 512

最后的结果要接近或者等于2的指数。增加一个集群的PG数都会导致集群重新平衡OSD负载,建议每个OSD对于的PG数目在50-100之间,减少资源消耗。tracker对性能影响较大

cephx_sign_messages=false #默认开启,对安全要求不高时建议关闭

filestore_fd_cache_size=4096 #默认256

filestore_fd_cache_shards=256 #默认16

四、客户端参数调优

[client]
rbd cache = true                  #启用RBD缓存
rbd cache size = 268435456        #允许的RBD缓存字节数
rbd cache max ditry = 134217728   #缓存中允许的脏数据字节数,超过这个值后数据写回备用存储,若为0,ceph使用的缓存模式是write-through,
#没有使用这个参数,默认缓存机制是write-back
rbd cache dirty age = 5           #脏数据自生成到写回备用存储能够在缓存中存储的时间

五、设置缓存层

5.1、新建池

#1、获取CRUSH map并反编译
ceph osd getcrushmap -o crushmapdump
crushtool -d crushmapdump -o crushmapdump-decompiled
##在当前目录下生成crushmapdump、和crushmapdump-decompiled文件

#2、编辑反编译得到的CRUSH map文件,在root default下加入下面内容
$ vim crushmapdump-decompiled
root cache {
         item osd.0 weight 0.010
        item osd.3 weight 0.010
        item osd.6 weight 0.010
}

#3、在rules后面加入CRUSH规则
rule cache-pool {
        ruleset 4
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type osd
        step emit
}
!!!如果第四步报错,在加入rules规则时复制已有的规则进行修改

#4、编译新的CRUSH map,并把它导入集群中
crushtool -c crushmapdump-decompiled -o crushmapdump-compiled
ceph osd setcrushmap -i crushmapdump-compiled 

#5、检查OSD,有一个名为cache的root bucket
ID CLASS WEIGHT  TYPE NAME            STATUS REWEIGHT PRI-AFF
-1       4.93495 root default
-3       1.63399     host isslabsvr05
 0   hdd 0.54500         osd.0            up  1.00000 1.00000
...
 0   hdd 0.00999     osd.0                up  1.00000 1.00000
 3   hdd 0.00999     osd.3                up  1.00000 1.00000
 6   hdd 0.00999     osd.6                up  1.00000 1.00000


#6、新建一个新的池,并设定crush_ruleset是4
ceph osd pool create cache-pool  32 32

$ ceph osd crush rule ls  #查询有哪些cache rule
replicated_rule
cache-pool

#设置crush rule为cache-pool
$ ceph osd pool set cache-pool crush_rule cache-pool
set pool 1 crush_rule to cache-pool

#7、进行测试
rados -p cache-pool ls      

rados -p cache-pool put object1 /etc/hosts          

$ ceph osd map cache-pool object1  
osdmap e72 pool 'cache-pool' (1) object 'object1' -> pg 1.bac5debc (1.1c) -> up ([0,3,1], p0) acting ([0,3,1], p0)

rados -p cache-pool rm object1 

5.2、新建缓存层

#1、设置缓存池,绑定存储池做为缓存池
ceph osd pool create  EC-pool 16 16
ceph osd tier add EC-pool  cache-pool

#2、设置缓存模式为writeback 或者read-only
 ceph osd tier cache-mode cache-pool writeback
 
 #3、设置池的overlay,把标准池中的所有客户端请求转到缓存池
 ceph osd tier set-overlay EC-pool cache-pool

5.3、配置缓存层

#1、为缓存池启用hit set tracking,生产级别的缓存层通常使用bloom过滤器
ceph osd pool set  cache-pool hit_set_type bloom

#2、启用hit_set_count,即缓存池中存储的hit set的次数
ceph osd pool set  cache-pool hit_set_count 1

#3、启用hist_set_count,这是是hit set在缓存池中的有效期,以秒为单位
ceph osd pool set  cache-pool hit_set_period 300

#4、缓存分层代理开始从缓存池中将对象写回后端存储或者删除前,允许存放的最大字节数
ceph osd pool set  cache-pool target_max_bytes 1000000

#5、启用target_max_objects,它是缓存分层代理开始从缓存池中将对象写回后端存储或者删除前,允许存放的最大对象数
ceph osd pool set  cache-pool target_max_objects 10000

#6、启用cache_min_flush_age和cache_min_evict_age,它们是缓存分层代理将数据从缓存层刷新到存储层然后在缓存层中删除这些数据的最小时间间隔(以秒为单位)
ceph osd pool set  cache-pool cache_min_flush_age 300
ceph osd pool set  cache-pool cache_min_evict_age 300

#7、启用cache_target_dirty_ratio,它是缓存分层代理开始将数据写回存储层前,允许缓存池中被修改的数据总量所占池总量的百分比
ceph osd pool set  cache-pool cache_target_dirty_ratio .01

#8、启用cache_target_full_ratio,它是缓存分层代理开始将数据写回存储层前,允许缓存池存放未经修改的数据总量占缓存池总容量的百分比
ceph osd pool set  cache-pool cache_target_full_ratio 0.2

#9、新建一个500M的临时文件,将把它写入EC池中,最终它会被写入一个缓存池中
dd if=/dev/zero of=/tmp/file1 bs=1M count=500

5.4、测试缓存层

#1、将上一步生成的500M文件写入EC池中
rados -p EC-pool put object1 /tmp/file1

#2、查看跟踪变化
rados -p EC-pool ls
rados -p cache-pool ls
date

#3、300s后,cache_min_evict_age 300,缓存代理将从缓存池中迁移object1 到EC存储池,缓存池中object1将被删除
rados -p EC-pool ls
rados -p cache-pool ls
date
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph存储系统具有高可靠性和可扩展性等优势,但在实际使用过程中,要想使其性能达到最优,还需要进行一些性能调优和实战操作。 首先,对于存储节点的硬件配置,需要选择性能更强的硬件,如采用更高配置的CPU、更大容量的内存、更快速度的磁盘等,这样可以提高存储节点处理数据的速度和效率。同时,还要对网络连接进行优化,选择更快的网卡和更佳的网络拓扑结构,可以提高节点之间数据的传输效率。 接着,Ceph存储系统还可通过提高集群的带宽和调整相关参数来实现性能优化。在带宽方面,可以增加节点间的链路数量和带宽,通过升级集群架构和网络设备等,提高数据传输的速度和效率。在参数设置方面,可以结合实际情况对相关参数进行调整,如调整I/O线程池大小、磁盘缓存大小等,以优化节点的I/O性能,提高数据的读写速度。 在实战操作方面,需要注意节点间的平衡负载,保证每个节点的工作负荷均衡,并监测节点的健康状态,及时发现和解决问题。同时,在存储数据的过程中,还要避免对数据进行频繁的读写操作,减少磁盘读写次数,以提高存储系统的性能。 总之,Ceph存储系统的性能调优和实战操作对于系统的性能和稳定性具有重要的影响,需要综合考虑硬件、网络、参数等多方面因素,定期检查和优化,以充分发挥Ceph存储系统的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值