一、硬件选型
(1)服务器
1GHz CPU per OSD (the more the better)
1GB RAM per OSD
1GHz CPU*4 per MON
4GB RAM per MON
(2)硬盘
SSD、HDD配比1:3~5 (推荐使用Intel DC 3700或同等级以上SSD)
每个物理节点OSD数量最好控制在单机最大网络带宽以内(每块SATA磁盘平均吞吐量100MB/s)
(3)网卡
每个物理节点最多1个10G或最少4个1000M(采用多网卡bonding方式,mode4)
(4)RAID
write through(no cache)
Raid1(OSD)
(5)IDRAC/ILO
(6)10G switch
10GB网口数量 = 服务器数量*2,跨多个机柜需要用到40GB级联口
InfinBand架构是一种支持多并发链接的“转换线缆”技术。InfinBandr的核心就是把I/O子系统从服务器主机中剥离出去,通过光纤介质,采用基于交换的端到端的传输模式连接他们。
RDMA
RDMA(Remote Direct Memory Access)技术全称远程直接数据存储,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快递移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和文本交换操作,因而能解放内存带宽和CPU周期用于改进应用系统性能。
二、Accelio + ceph
(1)Accelio:https://github.com/accelio/accelio/
Accelio is an Open Soure high-performance, asynchronous, reliable messaging and RemoteProcedure Call(RPC) library. Accelio optimizes hardware acceleration for Remote Direct MemoryAccess (RADMA),TCP/IP and shared-memory.
(2)Configure ceph
./configure -enable-xio
三、Ceph + Infiniband(RDMA)
SATA SSD
PCIe SSD
四、系统优化
(1)开启HT,充分发挥处理器的性能
(2)关闭NUMA,减少跨NUMA节点访问的性能损耗
- 添加内核参数numa=off
- 在BIOS里关闭NUMA
(3)关闭节能模式,选择Performance模式
- for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;do [ -f $CPUFREQ] || continue;echo -n performance > $CPUFREQ;done
- 在BISO里设置
(4)CPU bound
(5)Memory Limit
增大kernel pid max
$:echo 4194303 > /proc/sys/kernel/pid_max
增大数据预读值,提高读性能
$:echo "8192" > /sys/block/sda/queue/read_ahead_kb
SWAP的使用倾向概略率,在centos7中,最后保留1-10之间
$:sysctl -w vm.swappiness=0
IO调度策略,对于SATA/SAS 选择deadline.SSD用noop
$:echo "deadline" > /sys/block/sd[x]/queue/scheduler
$:echo "noop" > /sys/block/sd[x]/queue/scheduler
调整脏数据回写比例
$:echo 5 > /proc/sys/vm/diry_background_ratio
$:echo 10 > /proc/sys/vm/dirty_ratio
(6)文件系统
推荐选择XFS文件系统,并保证4k对齐。添加以下挂载参数
rw,noatime,nodiratime,nobarrier,inode64,logbufs=8,logbsize=256k,delaylog
(7)上层应用
- 在fio测试中可以发现,iodepth值对测试结果有着显著的影响,所以client端能够选用Linux aio库,理论上是可以在一定程度上优化性能
- 云环境中的VM,可以使用virtio scsi实现多队列支持
(8)网卡MTU
网卡增大MTU值,可以增强传输性能,但在交换机上需要同等的设置
临时设置
$:ifconfig eth0 mtu 9000
永久设置
$:echo "MTU=9000" >> /etc/sysconfig/network-script/ifcfg-eth0
$:service network restart
参数名 | 描述 | 默认值 | 建议值 |
public network | 客户端访问网络 | 192.168.100.0/24 | |
cluster network | 集群网络 | 192.168.1.0/24 | |
max open files | 如果设置了该选项,Ceph会设置系统的max open fds | 0 | 131072 |
filestore xattr use omap0 | 为XATTRS使用object map,EXT4文件系统时使用,XFS或者btrfs也可以使用 | false | true |
filestore max syncinterval | 从日志到数据盘最大同步间隔(seconds) | 5 | 15 |
filestore min sync interval | 从日志到数据最小同步间隔(seconds) | 0.1 | 10 |
filestore queue max sync interval | 数据盘最大接受的操作数 | 500 | 2500 |
filestore queue min sync interval | 数据盘一次操作最大字节数(bytes) | 100<<20 | 10485760 |
filestore queue commiting max ops | 数据盘能够commit的操作数 | 500 | 5000 |
filestore queue commiting min ops | 数据盘能够commit的最大字节数(bytes) | 100<<20 | 1048760000 |
filestore op threads | 并发文件系统操作数 | 2 | 32 |
osd journal size | OSD日志大小(MB) | 5120 | 20000 |
journal max write bytes | journal一次性写入的最大字节数(bytes) | 10<<20 | 1073714824 |
journal max write entries | journal一次性写入的最大记录数 | 100 | 10000 |
journal queue max ops | journal一次性最大在对列中的操作数 | 500 | 50000 |
journal queue max bytes | journal一次性最大在队列中的字节数(bytes) | 10<<20 | 10485760000 |
osd max write size | osd一次可写入的最大值(MB) | 90 | 512 |
osd client write size | 客户端允许在内存中的最大数据(bytes) | 524288000 | 2147483648 |
osd client message size cap | 在Deep scrub时候允许读取的字节数(bytes) | 524288 | 131072 |
osd deep scrub stride | OSD进程操作的线程数 | 2 | 8 |
osd op threads | OSD密集型操作例如恢复和scrubbing时的线程 | 1 | 4 |
osd map cache size | 保留OSD Map的缓存(MB) | 500 | 1024 |
osd map cache blsize | OSD进程在内存中的OSD Map缓存(MB) | 50 | 128 |
osd recovery op priority | 恢复操作优先级。取值1-63,值越高占用资源越高 | 10 | 4 |
osd recovery max active | 同一时间内活跃的恢复请求数 | 15 | 10 |
osd max backflls | 一个OSD允许的最大backfills数 | 10 | 4 |
rbd cache | RBD缓存 | true | true |
rbd cache size | RBD缓存大小(bytes) | 33554432 | 268435456 |
rbd cache max dirty | 缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through | 25165824 | 134217728 |
rbd cache max dirty age | 在被刷新到存储盘前dirty数据存在缓存的时间(seconds) | 1 | 5 |
(9)条带设置
(10)tcmalloc
- 调整max thread cache :TCMALLOC_MAX_TOTAL_CACHE_BYTES=128M
- @@-3026+3027@@ /etc/init.d/cepe
3. cmd="$SYSTEMD_RUN -r bash -c '$files $cmd --cluster $cluster -f' "
五、性能测试
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-cleanup
$:rados -p rbd cleanup --prfix benchmark_data_ubuntu-ceph-06_30928
2、FIo工具