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周期用于改进应用系统性能。
使用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
1.开启HT(超线程),充分发挥处理器的性能
2.关闭NUMA,减少跨NUMA节点访问的性能损耗
在/boot/grub2/grub.cfg中设置numa=off
vim /boot/grub2/grub.cfg
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
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
1.数据加速
元数据加速:bluestore的元数据使用ssd进行加速
bcache加速: 用一个ssd加速多个hdd盘。
2.优化ceph主要参数配置
journal 配置参数:
osd config tuning 配置参数:
osd - recovery tuning 配置参数:
osd - client tuning 配置参数:
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
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
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