測試吞吐量:
測試系統吞吐量不是關鍵,最重要的是在使用DRBD性能前後的影響;該測試使用一個512M的塊到drbd設備,進行對比測試
#!/bin/bash resource=r0 test_device=`drbdadm sh-dev $resource` test_ll_device=`drbdadm sh-ll-dev $resource` drbdadm primary $resource for i in $(seq 5) do dd if=/dev/zero of=$test_device bs=512M count=1 oflag=direct done drbdadm down $resource for i in $(seq 5) do dd if=/dev/zero of=$test_ll_device bs=512M count=1 oflag=direct done drbdadm up $resource
注意:
1、dd 要使用關鍵字 oflag=direct 即寫文件的時候忽略cache的影響;還有一個可選的關鍵字iflag=directio, 用來控制源文件和目標文件的讀寫方式爲directio;
2、以上腳本是需要兩個角色是secondary的時候進行測試;
3、測試完,在設定primary node 並掛載/dev/drbd0的時候會提示“mount: you must specify the filesystem type”,需要重新格式化/dev/drbd0
優化部分:
這個主要還是看硬件,磁盤的轉速啊,網絡的吞吐啊,
調整參數建議:
net { max-buffers 8000; max-epoch-size 8000; sndbuf-size 0; }
max-buffers:是drbd數據寫入到磁盤緩衝區的最大數,默認爲2048,對於RAID陣列建議調整爲8000;
max-epoch-size 是兩個寫入瓶頸的最大允許寫的數量,建議修改爲8000;
sndbuf-size: TCP發送緩衝區大小,設置爲0,可以自動調節大小;
syncer { rate 90M; al-extents 257; }
al-extents: 活動日誌的大小,多少個x4M 的block;增大這個值的好處是:
減少更新元數據到drbd 設備上的頻率;
降低同步數據時對IO流的中斷數量;
提高drbd設備相應速度;
存在的風險是:當primary node crash 後,所有的活動數據(al-extentsx 4M block)需要重新同步,這個時間secondary node 是outdate狀態,修復時間變長;
sync rate 參數設置,只有 backgroud re-synchronization纔會受限於該參數的設置;另一個同步進程只負責同步一些block的更改,不受限該參數;所以改值不要設置的太大,以防佔用太多的帶寬,導致IO出現同步異常;
disk { on-io-error detach; disk-flushes no; }
磁盤考慮不少於6塊15K的sas磁盤做raid10,或者直接使用ssd ,如果raid 卡有bbu電池保護的話,可以考慮進行禁止drbd的磁盤刷寫;
可以參考官網推薦,更改IO調度算法:
echo deadline > /sys/block/<device>/queue/scheduler (sas盤可以用deadline;ssd的話可以考慮使用noop調度算法)