ceph性能优化

1. ceph的优化

1.硬件选型

1.服务器

1GHz CPU*4 per MON
1GHz CPU per OSD (the more the better)

2.内存

4GB RAM per MON
1GB RAM per OSD

3.硬盘

SSD、HDD配比1:3~5(推荐使用IntelDC3700或同等级以上SSD)
每个物理节点OSD数量最好控制在单机最大网络带宽以内(每块SATA磁盘平均吞吐量约100MB/s)

4.网卡

每个物理节点最少1个万兆网卡(10G)或最少4个千M(采用多网卡bonding方式, mode4)

网卡MTU: 网卡增大MTU值,可以增强传输性能,但在交换机上需要同等的设置
临时设置 
#ifconfig etho mtu 9000I
永久设置  
#echo"MTU=9000">>/etc/sysconfig/network-script/ifcfg-eth0
#systemctl restart NetworkManager

5.使用raid卡

Write through(no cache): 建议将缓存给关闭
基于OSD做RAID

6.万兆交换机

1.硬件要求
10GB网口数量=服务器数量*2,跨多个机柜需要用到40GB级联口

2.infiniBand架构 + RDMA技术
InfinBand架构:
一种支持多并发链接的“转换线缆”技术。InfinBand的核心就是把I/0子系统从服务器主机中剥离出去,通过光纤介质,采用基于交换的端到端的传输模式连接它们,换句话来说提供一种易于使用的消息服务,这种服务可以被用来和其他应用程序,进程,存储进行通信,应用程序不需要向操作系统提交访问其他资源的请求,而是直接使用infiniBand消息服务。这就是一种交换机需要支持的技术。

RDMA技术:
RDMA(Remote Direct Memory Access)技术全称远程直接数据存储,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快递移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和文本交换操作,因而能解放内存带宽和CPU周期用于改进应用系统性能。

ceph性能优化_第1张图片

2.ceph使用accelio通讯

使用Accelio+ceph支持InfiniBand通讯。

accelio introduce:

Accelio is an Open Source high-performance, asynchronous, reliable messaging and RemoteProcedure Call (RPC) library. Accelio optimizes hardware acceleration for Remote Direct MemoryAccess(RDMA), TCP/IP and shared-memory.

https://github. com/accelio/accelio/

configure ceph:

./configure -enable -xio

ceph性能优化_第2张图片

3.系统优化

1.开启HT(超线程),充分发挥处理器的性能

2.关闭NUMA,减少跨NUMA节点访问的性能损耗

在/boot/grub2/grub.cfg中设置numa=off
vim /boot/grub2/grub.cfg

ceph性能优化_第3张图片

3.关闭节能模式,选择Performance模式

yum install kernel-tools
echo performance > /sys/devices/system/cpu${i}/cpufreq/scaling_governor 
or
cpupower frequency-set -g performance

4.CPU bound:

把osd和mon等绑定cpu

ceph性能优化_第4张图片

5.调整内存限制

#增大kernel pid max
#echo 4194303>/proc/sys/kernel/pid.max 

#SWAP的使用倾向概略率,在Centos7中,最后保留1-10之间,
#sysctl-w vm.swappiness=0

6.调整IO限制

#增大数据预读值,提高读性能
#echo "8192">/sys/block/sda/queue/read ahead kb

#IO调度策略,对于SATA/SAS选择deadline.SSD用noop
#echo"deadline">/sys/block/sd[x]/queue/scheduler  # SATA
#echo"noop">/sys/block/sd[x]/queue/scheduler      # SSD

#调整脏数据回写比例
#echo 5>/proc/sys/vm/dirty_background.ratio
#echo 10>/proc/sys/vm/dirty_ratio

7.优化网络参数

vi /etc/sysctl.d/ceph.conf
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

sysctl -p /etc/sysctl.d/ceph.conf

4.ceph优化

1.数据加速

元数据加速:bluestore的元数据使用ssd进行加速
bcache加速: 用一个ssd加速多个hdd盘。

2.优化ceph主要参数配置

journal 配置参数:

ceph性能优化_第5张图片

osd config tuning 配置参数:

ceph性能优化_第6张图片

osd - recovery tuning 配置参数:

ceph性能优化_第7张图片

osd - client tuning 配置参数:

ceph性能优化_第8张图片

ceph.conf配置

[global]#全局设置
fsid = 88caa60a-e6d1-4590-a2b5-bd4e703e46d9           #集群标识ID 
mon host = 10.0.1.21,10.0.1.22,10.0.1.23            #monitor IP 地址
auth cluster required = cephx                  #集群认证
auth service required = cephx                           #服务认证
auth client required = cephx                            #客户端认证
osd pool default size = 2                             #最小副本数
osd pool default min size = 1                           #PG 处于 degraded 状态不影响其 IO 能力,min_size是一个PG能接受IO的最小副本数
osd pool default pg num = 128                           #pool的pg数量
osd pool default pgp num = 128                          #pool的pgp数量
public network = 10.0.1.0/24                            #公共网络(monitorIP段) 
cluster network = 10.0.1.0/24                           #集群网络
max open files = 131072                                 #默认0#如果设置了该选项,Ceph会设置系统的max open fds
mon initial members = controller1, controller2, compute01 #初始monitor (由创建monitor命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1                             #默认值0.05#monitor间的clock drift
mon osd min down reporters = 13                         #默认值1#向monitor报告down的最小OSD数
mon osd down out interval = 600      #默认值300      #标记一个OSD状态为down和out之前ceph等待的秒数
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd journal size = 20000 #默认5120                      #osd journal大小
osd journal = /var/lib/ceph/osd/$cluster-$id/journal #osd journal 位置
osd mkfs type = xfs                                     #格式化系统类型
osd mkfs options xfs = -f -i size=2048                  #强制格式化
filestore xattr use omap = true                         #默认false#为XATTRS使用object map,EXT4文件系统时使用,XFS或者btrfs也可以使用
filestore min sync interval = 10                        #默认0.1#从日志到数据盘最小同步间隔(seconds)
filestore max sync interval = 15                        #默认5#从日志到数据盘最大同步间隔(seconds)
filestore queue max ops = 25000                        #默认500#数据盘最大接受的操作数
filestore queue max bytes = 1048576000      #默认100   #数据盘一次操作最大字节数(bytes
filestore queue committing max ops = 50000 #默认500     #数据盘能够commit的操作数
filestore queue committing max bytes = 10485760000 #默认100 #数据盘能够commit的最大字节数(bytes)
filestore split multiple = 8 #默认值2                  #前一个子目录分裂成子目录中的文件的最大数量
filestore merge threshold = 40 #默认值10               #前一个子类目录中的文件合并到父类的最小数量
filestore fd cache size = 1024 #默认值128              #对象文件句柄缓存大小
journal max write bytes = 1073714824 #默认值1048560    #journal一次性写入的最大字节数(bytes)
journal max write entries = 10000 #默认值100         #journal一次性写入的最大记录数
journal queue max ops = 50000  #默认值50            #journal一次性最大在队列中的操作数
journal queue max bytes = 10485760000 #默认值33554432   #journal一次性最大在队列中的字节数(bytes)
osd max write size = 512 #默认值90                   #OSD一次可写入的最大值(MB)
osd client message size cap = 2147483648 #默认值100    #客户端允许在内存中的最大数据(bytes)
osd deep scrub stride = 131072 #默认值524288         #在Deep Scrub时候允许读取的字节数(bytes)
osd op threads = 16 #默认值2                         #并发文件系统操作数
osd disk threads = 4 #默认值1                        #OSD密集型操作例如恢复和Scrubbing时的线程
osd map cache size = 1024 #默认值500                 #保留OSD Map的缓存(MB)
osd map cache bl size = 128 #默认值50                #OSD进程在内存中的OSD Map缓存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默认值rw,noatime,inode64  #Ceph OSD xfs Mount选项
osd recovery op priority = 2 #默认值10              #恢复操作优先级,取值1-63,值越高占用资源越高
osd recovery max active = 10 #默认值15              #同一时间内活跃的恢复请求数 
osd max backfills = 4  #默认值10                  #一个OSD允许的最大backfills数
osd min pg log entries = 30000 #默认值3000           #修建PGLog是保留的最大PGLog数
osd max pg log entries = 100000 #默认值10000         #修建PGLog是保留的最大PGLog数
osd mon heartbeat interval = 40 #默认值30            #OSD ping一个monitor的时间间隔(默认30s)
ms dispatch throttle bytes = 1048576000 #默认值 104857600 #等待派遣的最大消息数
objecter inflight ops = 819200 #默认值1024           #客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
osd op log threshold = 50 #默认值5                  #一次显示多少操作的log
osd crush chooseleaf type = 0 #默认值为1              #CRUSH规则用到chooseleaf时的bucket的类型
##############################################################
[client]
rbd cache = true #默认值 true      #RBD缓存
rbd cache size = 335544320 #默认值33554432           #RBD缓存大小(bytes)
rbd cache max dirty = 134217728 #默认值25165824      #缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through
rbd cache max dirty age = 30 #默认值1                #在被刷新到存储盘前dirty数据存在缓存的时间(seconds)
rbd cache writethrough until flush = false #默认值true  #该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写
              #设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
rbd cache max dirty object = 2 #默认值0              #最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分
      #每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能
rbd cache target dirty = 235544320 #默认值16777216    #开始执行回写过程的脏数据大小,不能超过 rbd_cache_max_dirty

5.性能测试

1.rados工具

rados -p rbd bench -b 4194304 60 write -t 32 --no-cleanup
rados -p rbd bench -b 4194304 60 seq -t 32 --no-clenanup
rados -p rbd cleanup --prefix benchmark_data_ubuntu-ceph

2.fio工具

1.在fio测试中可以发现,iodepth值对测试结果有着显著的影响,所以client端能够选用linuxaio库,理论上是可以在一定程度上优化性能.

4K随机写:
fio --direct=1 --thread=1 --lockmem=1 --ioengine=libaio --random_generator=tausworthe64 --group_reporting=1 --readwrite=randwrite -numjobs=10 --blocksize=4k --iodepth=32 --size=10M --filename=/dev/bcache0 --name=randwrite-test

4k随机读:
fio --direct=1 --thread=1 --lockmem=1 --ioengine=libaio --random_generator=tausworthe64 --group_reporting=1 --readwrite=randread -numjobs=10 --blocksize=4k --iodepth=32 --size=10M --filename=/dev/bcache0 --name=randwrite-test

6.探索方向

1.鲲鹏硬件加速使能ceph(包含加速加密)
https://gitee.com/openeuler/sds_doc/blob/master/ceph/2%20-%20%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F/%E9%B2%B2%E9%B9%8F%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F%E5%99%A8ceph%E4%BD%BF%E8%83%BD%E6%8C%87%E5%8D%97.md

2.rocksdb性能调优
https://gitee.com/openeuler/sds_doc/blob/master/ceph/1%20-%20%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/osd%E4%B8%AD%E7%9A%84rocksdb%E8%B0%83%E4%BC%98%E6%8C%87%E5%8D%97%20%E6%B1%A0%E4%BF%A1%E6%B3%BD(XSKY).md

3.使用spdk代替kernel driver进行加速
https://zhuanlan.zhihu.com/p/545311134?utm_id=0

4.探讨如何降低LSM tree压缩的写放大和空间放大问题?
https://www.bilibili.com/video/BV1Hg4y1j7vv/?spm_id_from=333.337.search-card.all.click&vd_source=f7050ed1d78b437c78f09935d9d1a633

5.鲲鹏的优化
https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephfile_05_0011.html
《1》 KAE zlib压缩
《2》 Bcache加速
《3》 使用BoostKit提性能
《4》 使用ceph ec存储池性能提升。

参考

https://www.infoq.cn/article/slhxsdjaykaza3tgkyqc
https://www.hikunpeng.com/document/detail/zh/kunpengsdss/basicAccelFeatures/ioaccel/kunpengecturbo_20_0013.html
https://bbs.huaweicloud.com/blogs/346804
https://blog.csdn.net/smart9527_zc/article/details/85345377

你可能感兴趣的:(ceph,ceph,性能优化,服务器)