YCSB壓測elasticsearch

YCSB是Yahoo開源的用於測試數據庫(主要是nosql)的性能框架,可以測試Hbase, mongo, redis,elasticSearch等,本文主要介紹壓測elasticsearch的流程。

1.安裝下載YCSB

git clone https://github.com/brianfrankcooper/YCSB.git

clone完成後,看項目目錄結構能發現,有兩個elasticsearch相關的項目

其中elasticsearch支持的版本是2.x, elasticsearch5支持的版本是5.x, 而目前公司的es版本已經升級至7.x,在YCSB中提交記錄中發現了一個版本,https://github.com/brianfrankcooper/YCSB/pull/1469 雖還未合併到主分支,但我們可以下下來,試一下。

 

重新拉取新分支代碼 :

git clone https://github.com/xosk31/YCSB.git

成功獲取到elasticsearch7的版本

 

2. 編譯打包

mvn -pl elasticsearch7 -am clean package

打包成功後:

在YCSB/elasticsearch7/target目錄下生成一個YCSB的啓動包:ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT.tar.gz

解壓:tar -xzvf ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT.tar.gz

進入ycsb-elasticsearch7-binding-0.18.0-SNAPSHOT目錄,可看到目錄結構如下:

LICENSE.txt	
NOTICE.txt
README.md
bin
lib
workloads

workloads目錄裏有預設的workloada/b/c/d/e/f幾個文件,打開後,結構類似,都有如下參數,唯一不同是的是幾個 *proportion的值不一樣

recordcount=1000    //測試數據集的總數
operationcount=1000  //測試中執行的操作總數
workload=site.ycsb.workloads.CoreWorkload

readallfields=true

readproportion=0.5   //讀數據佔操作總數的比例
updateproportion=0.5 //更新數據佔操作總數的比例
scanproportion=0     //掃描數據佔操作總數的比例
insertproportion=0   //寫數據佔操作總數的比例

requestdistribution=zipfian

 

 

 測試過程中,我們可以根據自己的實際情況,隨意的設置這幾個*proportion的值

3.壓測流程

1.在待壓測集羣上新建測試索引

YCSB不負責表的創建,所以需要自己手動創建用於測試的索引。例如在elasticsearch中,需要手動在待測集羣上創建測試索引test

2.選擇合適的 workload

本次主要做讀和寫,所以只需要準備兩個workload,  一個insertproportion值爲1, 其餘均爲0; 另一個readproportion值爲1,其餘均爲0

3.選擇合適的運行時參數

在當前目錄新增配置文件myproperties.data,  內容如下:可根據自己的實際情況配置

es.cluster.name=tj-es-staging    //es集羣名
es.index.name= middle_review_test
es.index.key=middle_review_test  //es索引名,提前已經建好的測試索引
es.number_of_shards=1       //es的分片數
es.number_of_replicas=1    //分片的副本數
es.remote=true    //是否是遠程測試
es.newdb=false
es.hosts.list=tjstaging.api.es.srv:80   //es集羣的ip或者域名:port, 多個用逗號隔開
es.security.ssl=false            //是否需要進行SSL證書驗證
es.security.ssl.path=changeme    //SSL證書目錄
es.authentication=true           //是否需要身份驗證
es.credentials.user=changeme     //用戶名
es.credentials.password=changeme //密碼

本次qps預設爲30, 100, 200 ,所以將 -threads分別設置爲30, 100, 200即可。除了在 workload 中配置參數外,YCSB 還支持其他運行時參數,比較有用的是-threads,用於設置客戶端線程數,默認爲 1

4.裝載數據(loading phase)

./bin/ycsb load elasticsearch7 -P workloads/workloada -P myproperties.data -s 

裝載數據的主要作用是,爲測試做數據準備,比如需要壓測更新操作,若沒有load操作,則會提示待更新的數據不存在。

可以觀察下裝在數據的輸出日誌,無論配置的workloada是什麼樣的,都只執行insert操作。

[OVERALL], RunTime(ms), 16220
[OVERALL], Throughput(ops/sec), 61.652281134401974
[TOTAL_GCS_PS_Scavenge], Count, 2
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 23
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.14180024660912455
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 2
[TOTAL_GC_TIME], Time(ms), 23
[TOTAL_GC_TIME_%], Time(%), 0.14180024660912455
[CLEANUP], Operations, 1
[CLEANUP], AverageLatency(us), 2133.0
[CLEANUP], MinLatency(us), 2132
[CLEANUP], MaxLatency(us), 2133
[CLEANUP], 95thPercentileLatency(us), 2133
[CLEANUP], 99thPercentileLatency(us), 2133


[INSERT], Operations, 1000
[INSERT], AverageLatency(us), 14927.496
[INSERT], MinLatency(us), 9568
[INSERT], MaxLatency(us), 76351
[INSERT], 95thPercentileLatency(us), 23343
[INSERT], 99thPercentileLatency(us), 44575
[INSERT], Return=OK, 1000

5.運行測試(transaction phase)

壓測qps 30:

./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 30

壓測qps 100:

./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 100

壓測qps 200:

./bin/ycsb run elasticsearch7 -P workloads/workloada -P myproperties.data -s -threads 200

6.結果解析

Operations                   執行的操作數
AverageLatency            平均響應時間
MinLatency                  最小響應時間
MaxLatency                 最大響應時間
95thPercentileLatency   p95
99thPercentileLatency   p99

 

根據最終的結果,用excel繪製柱狀圖,效果如下:

寫AverageLatency                                                                     寫p99

 

 

讀AverageLatency                                                                  讀p99

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章