一、硬件選型
(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工具