ceph 性能測試
在將 Ceph 集羣用於生產工作之前,應該首先對它進行基準測試。基準測試提供關於羣集在讀、寫、延遲和其他工作負載期間執行情況的大致結果。在進行真正的基準測試之前,最好通過測量連接到羣集節點的硬件(如磁盤和網絡)的性能,爲預期的最大性能建立一個基準。磁盤性能基線測試將分兩步完成。首先,我們將測量單個磁盤的性能,在此之後,將同時測量連接到一個 Ceph OSD 節點的所有磁盤性能。爲了獲得磁盤讀寫性能,我們可以使用 dd 命令並設置 oflag 參數以直接繞過磁盤緩存以獲得真實的結果。
測試單磁盤寫入性能
清空頁面緩存
echo 3 > /proc/sys/vm/drop_caches
使用 dd 編寫一個大小爲 10G 的名爲 deleteme 的文件,該文件填充爲 0/dev/zero 作爲 Ceph OSD 安裝目錄的輸入文件,即 / var/lib/ceph/osd/cep-0/:
dd if=/dev/zero of=/var/lib/ceph/osd/ceph-0/zero bs=10G count=1
重複執行後取平均值,我這邊沒有繞過內核緩存,所以測試出來的結果會偏高,(ubuntu 系統執行 dd 繞過內核緩存的參數好像不支持。)
for i in `mount | grep osd | awk '{print $3}'`; do (dd if=/dev/zero of=$i/zero bs=10G count=1 &) ; done
osd 單盤讀性能測試
清空頁面緩存
echo 3 > /proc/sys/vm/drop_caches
dd if=/var/lib/ceph/osd/ceph-0/deleteme of=/dev/null bs=10G count=1 iflag=direct
echo 3 > /proc/sys/vm/drop_caches
for i in `mount | grep osd | awk '{print $3}'`; do (dd if=$i/zero of=/dev/null bs=10G count=1 &); done
網絡基線性能
測試 Ceph OSD 節點之間的網絡的基線性能。需要在 Ceph 節點上安裝了 iper 包。iperf 是一個簡單的點對點網絡帶寬測試器,工作在 c/s 模型上。要啓動網絡基準測試,可以在第一個 Ceph 節點上使用 server 選項,在第二個 Ceph 節點中使用 client 選項執行 iperf。安裝 iperf
apt install iperf
node1 節點作爲 server,使用 6900 端口
rados bench 基準測試
Ceph 附帶一個稱爲 rados bench 的內置基準測試工具,可以在池上測試 Ceph 集羣的性能。rados bench 工具支持寫入、順序讀取和隨機讀取基準測試,並且它還允許清理臨時基準數據。接下來我們對 libvirt-pool 池進行寫 10 秒的測試,--no-cleanup 寫完之後不清裏測試數據,後面的測試會用到這些測試數據
rados bench -p libvirt-pool 10 write --no-cleanup
rados bench -p libvirt-pool 10 seq
可以看到實際用了不到十秒的時間就已經讀完了測試數據,原因就是讀操作比寫操作快,測試寫數據用了十秒,度相同的數據肯定用不到十秒的
rados bench -p libvirt-pool 10 rand
rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t --no-cleanup
-p: -p或-poo指定池名.
<seconds>:測試時間(以秒爲單位)。
<writelseqlrand>:測試類型,例如寫入、順序讀取或隨機讀取。
-b: 塊大小,默認情況下塊大小爲4M。
-t: 併發線程數;默認值爲16
--no-clean up:由rados工作臺寫入池的臨時數據,不被清除。當這些數據與順序讀取或隨機讀取一起使用時,它們將被用於讀取操作。默認情況下數據會清理。
RADOS load-gen
rados load-gen 是 CEPH 提供的另一個測試工具, 像它的命名一樣,rados load-gen 工具能用來在 Ceph cluster 上生成負載和用於模擬高負載場景。
rados -p libvirt-pool load-gen --num-objects 200 --min-object-size 4M --max-object-size 8M --max-ops 10 --read-percent 0 --min-op-len 1M --max-op-len 4M --target-throughput 2G --run-length 20
命令行格式及參數說明:
rados -p <pool-name> load-gen
--num-objects: 生成測試用的對象數,默認 200
--min-object-size: 測試對象的最小size,默認 1KB,單位byte
--max-object-size: 測試對象的最大size,默認 5GB,單位byte
--min-ops: 最小IO操作數,相當於iodepth
--max-ops: 最大IO操作數,相當於iodepth
--min-op-len: 壓測IO的最小operation size,默認 1KB,單位byte
--max-op-len: 壓測IO的最大operation size,默認 2MB,單位byte
--max-backlog: 一次提交IO的吞吐量上限,默認10MB/s (單位MB)
--percent: 讀操作所佔的百分百
--target-throughput: 目標吞吐量,默認 5MB/s (單位MB)
--run-length: 運行的時間,默認60s,單位秒
塊設備基準測試
ceph rbd 命令行接口提供了一個稱爲 bench-write 的選項,這是一個在 Ceph Rados Block Device 上執行寫基準測試操作的工具。可以使用 bench-write 工具的不通選項來調整塊大小,線程數和 io 模式。首先創建一個塊設備並將其映射至 ceph 客戶端
rbd create libvirt-pool/289 --size 10240 --image-feature layering
rbd info -p libvirt-pool --image 289
rbd map libvirt-pool/289
rbd showmapped
mkfs.xfs /dev/rbd2
mkdir -p /mnt/289
mount /dev/rbd2 /mnt/289
df -h /mnt/289
對 289 寫入 5G 大小的測試
rbd bench-write libvirt-pool/289 --io-total 5368709200
rbd bench-write <RBD image name>
--io-size:寫入大小,單位 byte,默認4M;
--io-threads:線程數,默認 16;
--io-total:寫入總字節,單位爲字節,默認 1024M;
--io-pattern <seq|rand>:寫模式,默認爲 seq 即順序寫;
使用 fio 對 ceph rbd 進行基準測試
安裝 fio
apt install fio -y
寫入 fio 配置文件
vim write.fio
[write-4M]
ioengine=rbd
direct=1 # 排除OS的IO緩存機制的影響
size=5g # 每個fio進程/線程的最大讀寫
lockmem=1G # 鎖定所使用的內存大小
runtime=30 # 運行時間
group_reporting # 多個job合併出報告
numjobs=1
iodepth=32
pool=libvirt-pool
clientname=admin
rbdname=289
rw=write #讀寫模式,支持隨機讀寫、順序讀寫
bs=4M
filename=/dev/rbd0
啓動 fio 測試
fio write.fio
公衆號:運維開發故事
github:https://github.com/orgs/sunsharing-note/dashboard
博客**:https://www.devopstory.cn**
愛生活,愛運維
我是 wanger,《運維開發故事》公衆號團隊中的一員,一線運維農民工,這裏不僅有硬核的技術乾貨,還有我們對技術的思考和感悟,歡迎關注我們的公衆號,期待和你一起成長!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/0T86M4GYHvTup0dQ6gUm-Q