一.Cosbench工具介紹
cosbench是intel開源的針對對象存儲開發的測試工具
二.Cosbench安裝
運行環境: 這里我們的系統是Centos7.6
依賴軟件: JDK nmap-ncat
# 安裝JDK
[root@k8s-01 ~]# yum install java nmap-ncat
# 通過wget下載,或者直接通過瀏覽器輸入下面的鏈接下載
[root@k8s-01 ~]# wget https://github.com/intel-cloud/cosbench/releases/download/v0.4.2.c4/0.4.2.c4.zip
# 解壓
[root@k8s-01 ~]# unzip 0.4.2.c4.zip
# 解壓后文件說明
[root@k8s-01 ~]# cd 0.4.2.c4
[root@k8s-01 0.4.2.c4]# ls -al *.sh
-rw-r--r-- 1 root root 2639 Jul 9 2014 cli.sh # munipulate workload through command line
-rw-r--r-- 1 root root 2944 Apr 27 2016 cosbench-start.sh # start internal scripts called by above scripts
-rw-r--r-- 1 root root 1423 Dec 30 2014 cosbench-stop.sh # stop internal scripts called by above scripts
-rw-r--r-- 1 root root 727 Apr 27 2016 start-all.sh # start both controller and driver on current node
-rw-r--r-- 1 root root 1062 Jul 9 2014 start-controller.sh # start controller only on current node
-rw-r--r-- 1 root root 1910 Apr 27 2016 start-driver.sh # start driver only on current node
-rw-r--r-- 1 root root 724 Apr 27 2016 stop-all.sh # stop both controller and driver on current node
-rw-r--r-- 1 root root 809 Jul 9 2014 stop-controller.sh # stop controller olny on current node
-rw-r--r-- 1 root root 1490 Apr 27 2016 stop-driver.sh # stop diriver only on current node
三.Cosbench啟動
- 運行cosbench之前先執行unset http_proxy
# 刪除http_proxy環境變量
[root@k8s-01 0.4.2.c4]# unset http_proxy
- 啟動cosbench
[root@k8s-01 0.4.2.c4]# sh start-all.sh
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
.
Starting cosbench-log_0.4.2 [OK]
Starting cosbench-tomcat_0.4.2 [OK]
Starting cosbench-config_0.4.2 [OK]
Starting cosbench-http_0.4.2 [OK]
Starting cosbench-cdmi-util_0.4.2 [OK]
Starting cosbench-core_0.4.2 [OK]
Starting cosbench-core-web_0.4.2 [OK]
Starting cosbench-api_0.4.2 [OK]
Starting cosbench-mock_0.4.2 [OK]
Starting cosbench-ampli_0.4.2 [OK]
Starting cosbench-swift_0.4.2 [OK]
Starting cosbench-keystone_0.4.2 [OK]
Starting cosbench-httpauth_0.4.2 [OK]
Starting cosbench-s3_0.4.2 [OK]
Starting cosbench-librados_0.4.2 [OK]
Starting cosbench-scality_0.4.2 [OK]
Starting cosbench-cdmi-swift_0.4.2 [OK]
Starting cosbench-cdmi-base_0.4.2 [OK]
Starting cosbench-driver_0.4.2 [OK]
Starting cosbench-driver-web_0.4.2 [OK]
Successfully started cosbench driver!
Listening on port 0.0.0.0/0.0.0.0:18089 ...
Persistence bundle starting...
Persistence bundle started.
----------------------------------------------
!!! Service will listen on web port: 18088 !!!
----------------------------------------------
======================================================
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench controller ...
.
Starting cosbench-log_0.4.2 [OK]
Starting cosbench-tomcat_0.4.2 [OK]
Starting cosbench-config_0.4.2 [OK]
Starting cosbench-core_0.4.2 [OK]
Starting cosbench-core-web_0.4.2 [OK]
Starting cosbench-controller_0.4.2 [OK]
Starting cosbench-controller-web_0.4.2 [OK]
Successfully started cosbench controller!
Listening on port 0.0.0.0/0.0.0.0:19089 ...
Persistence bundle starting...
Persistence bundle started.
----------------------------------------------
!!! Service will listen on web port: 19088 !!!
----------------------------------------------
# 查看java進程
[root@k8s-01 0.4.2.c4]# ps -ef |grep java
root 2209528 1 1 11:13 pts/5 00:00:05 java -Dcosbench.tomcat.config=conf/driver-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.driver -console 18089
root 2209784 1 1 11:13 pts/5 00:00:05 java -Dcosbench.tomcat.config=conf/controller-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.controller -console 19089
root 2220882 2134956 0 11:21 pts/5 00:00:00 grep --color=auto java
由上面的信息可知,cosbench啟動成功,運行兩個JAVA進程,driver和controller。可以通過提示的端口進行界面訪問。
http://${IP}:19088/controller/
- 界面訪問驗證
三.Cosbench配置文件說明
進入conf目錄下,查看s3-config-sample.xml配置文件內容如下:
[root@k8s-01 conf]# cat s3-config-sample.xml
<?xml version="1.0" encoding="UTF-8" ?>
<workload name="s3-sample" description="sample benchmark for s3">
<storage type="s3" config="accesskey=<accesskey>;secretkey=<scretkey>;proxyhost=<proxyhost>;proxyport=<proxyport>;endpoint=<endpoint>" />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="8" runtime="30">
<operation type="read" ratio="80" config="cprefix=s3testqwer;containers=u(1,2);objects=u(1,10)" />
<operation type="write" ratio="20" config="cprefix=s3testqwer;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" />
</work>
</workstage>
<workstage name="cleanup">
<work type="cleanup" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,20)" />
</workstage>
<workstage name="dispose">
<work type="dispose" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" />
</workstage>
</workflow>
</workload>
下面對配置文件的參數進行說明:
- workload name : 測試時顯示的任務名稱,這里可以自行定義
- description : 描述信息,這里可以自己定義
- storage type: 存儲類型,這里配置為s3即可
- config : 對該類型的配置,
- workstage name : cosbench是分階段按順序執行,此處為init初始化階段,主要是進行bucket的創建,workers表示執行該階段的時候開啟多少個工作線程,創建bucket通過不會計算為性能,所以單線程也可以;config處配置的是存儲桶bucket的名稱前綴;containers表示輪詢數,上例中將會創建以s3testqwer為前綴,后綴分別為1和2的bucket
- prepare階段 : 配置為bucket寫入的數據,workers和config以及containers與init階段相同,除此之外還需要配置objects,表示一輪寫入多少個對象,以及object的大小。
- main階段 : 這里是進行測試的階段,runtime表示運行的時間,時間默認為秒
- operation type : 操作類型,可以是read、write、delete等。ratio表示該操作所占有操作的比例,例如上面的例子中測試讀寫,read的比例為80%,write的比例為20%; config中配置bucket的前綴后綴信息。注意write的sizes可以根據實際測試進行修改
- cleanup階段 : 這個階段是進行環境的清理,主要是刪除bucket中的數據,保證測試后的數據不會保留在集群中
- dispose階段 : 這個階段是刪除bucket
配置完成后,就可以啟動測試,這里提供兩種啟動測試的方法:
- 通過腳本啟動
# 配置文件示例如下
[root@k8s-01 0.4.2.c4]# cat s3-config-sample.xml
<?xml version="1.0" encoding="UTF-8" ?>
<workload name="s3-sample" description="sample benchmark for s3">
<storage type="s3" config="accesskey=UZJ537657WDBUXE2CY6G;secretkey=8nIQByhEIsSkIe70aCHoD5HD73lDNNaqXbCSb0Hj;endpoint=http://192.168.30.117:7480" />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="cprefix=cephcosbench;containers=r(1,2)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="cprefix=cephcosbench;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="10" runtime="60">
<operation type="read" ratio="80" config="cprefix=cephcosbench;containers=u(1,2);objects=u(1,10)" />
<operation type="write" ratio="20" config="cprefix=cephcosbench;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" />
</work>
</workstage>
<workstage name="cleanup">
<work type="cleanup" workers="1" config="cprefix=cephcosbench;containers=r(1,2);objects=r(1,20)" />
</workstage>
<workstage name="dispose">
<work type="dispose" workers="1" config="cprefix=cephcosbench;containers=r(1,2)" />
</workstage>
</workflow>
</workload>
# 執行啟動
[root@k8s-01 0.4.2.c4]# sh cli.sh submit s3-config-sample.xml
Accepted with ID: w1
- 通過頁面上傳workload文件,也就是上面的配置文件進行啟動
四.測試結果分析
啟動后,可以通過界面查看任務運行情況:
測試完成后,顯示的結果如下:
下面對測試完成的結果進行分析:
- Op-Type : 操作類型
- Op-Count : 操作總數
- Byte-Count : 操作產生的Byte
- Avg-ResTime : 操作產生的平均時間
- Avg-ProcTime : 操作的平均時間,這個是主要的延時參考,它反映了平均每次請求的時延
- Throughput : 吞吐量,主要反映了操作的並發程度,也是重要的參考
- Bandwidth : 帶寬,反映了操作過程中的平均帶寬情況
- Succ-Ratio : 操作的成功率
五.集群測試
這里我們的集群配置為:
3節點服務器 + 256G內存 + 4*4T SATA + 4*4 SSD盤 + 三副本
這里由於我們的網卡是千兆網卡,以目前我們集群的配置分析來看,網絡應該是一個瓶頸,這里我們可以進行下驗證測試:
5.1 測試下集群RADOS性能
這里我們使用rados工具對datapool進行壓測:
- 在同一個集群客戶端我們同時執行三個進程進行壓測
[root@ceph01 ~]# rados bench 300 write -b 4M -t 64 -p datapool --cleanup
- 觀察壓測結果