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

 

原文地址:https://www.cnblogs.com/happySmily/p/13815889.html