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 繞過內核緩存的參數好像不支持。)接下來可以測試單個節點上所有的 osd 寫入性能 我這邊每臺宿主機上 osd 只有一個,所以數據與上面相同

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=iflag=direct

接下來可以測試單個節點上所有的 osd 寫入性能 我這邊每臺宿主機上 osd 只有一個,所以數據與上面相同

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=&); done

網絡基線性能

測試 Ceph OSD 節點之間的網絡的基線性能。需要在 Ceph 節點上安裝了 iper 包。iperf 是一個簡單的點對點網絡帶寬測試器,工作在 c/s 模型上。要啓動網絡基準測試,可以在第一個 Ceph 節點上使用 server 選項,在第二個 Ceph 節點中使用 client 選項執行 iperf。安裝 iperf

apt install iperf

node1 節點作爲 server,使用 6900 端口 node2 節點作爲 client 由於我這邊是千兆網絡,所以實際網絡帶寬不是很高,生產環境還是要用萬兆網絡進行連接

rados bench 基準測試

Ceph 附帶一個稱爲 rados bench 的內置基準測試工具,可以在池上測試 Ceph 集羣的性能。rados bench 工具支持寫入、順序讀取和隨機讀取基準測試,並且它還允許清理臨時基準數據。接下來我們對 libvirt-pool 池進行寫 10 秒的測試,--no-cleanup 寫完之後不清裏測試數據,後面的測試會用到這些測試數據

 rados bench -p libvirt-pool 10 write --no-cleanup

對 libvirt-pool 池進行順序讀取的測試

rados bench -p libvirt-pool 10 seq

可以看到實際用了不到十秒的時間就已經讀完了測試數據,原因就是讀操作比寫操作快,測試寫數據用了十秒,度相同的數據肯定用不到十秒的隨機讀取數據測試

rados bench -p libvirt-pool 10 rand

rados bench 的語法如下

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,單位秒

還可以使用 watch ceph-s 命令或 ceph-w 監視集羣的讀寫速度 / 操作狀態;同時,RADOS load-gen 將運行,以查看運行情況。

塊設備基準測試

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 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