Elasticsearch esrally 基准测试
Contents
前言
esrally
是Elasticsearch
官方出的集群基准测试框架,使用Python
编写的。它的工作原理是:先下载需要测试的数据集,然后在本地执行测试。但因为网络原因,国内下载异常的慢,这里主要介绍如何离线使用esrally
进行测试。
同时,因为它本身是支持Docker
使用的,为了方便使用,我这里就主要使用docker-compose
来进行演示。
准备工作
为了方便离线使用,我们需要做一些前期的准备:
1. 手动下载数据集
框架的默认数据集是使用的geonames
,我们可以通过http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/geonames/documents-2.json.b2
这个链接先手动下载,可以使用下载工具进行下载,速度回更快,我是使用的aria2 + uget
,几分钟就下完了。
如果在框架内下载会很慢。
其他的数据集都可以通过该方法进行下载,具体的文件名可以通过这个项目中每个目录下的files.txt
进行查看。
其中,带有*-1k.*
的文件是--test-mode
模式下使用的,只有少量数据,可以用来进行简单的测试检查。
2. 拉取Docker
镜像
官方的镜像名为:elastic/rally
,我这里的最新版本是2.0.0
,所以使用
|
|
进行拉取镜像。
3. 调整entrypoint.sh
文件
在官方的Dockerfile
中,使用的默认执行用户为1000
,这里可能存在一些权限问题。同时,官方建议是把/rally/.rally
文件夹在本地进行映射,因为一些配置,以及数据集都是在该文件夹下的,如果不进行本地映射的话,不便于结果的保存及数据集的使用。
而在映射了/rally/.rally
文件夹后,又需要手动进行esrally configure
,所以,我就直接调整了entrypoint.sh
文件:
|
|
4. 拉取rally-tracks
项目
因为在读取数据集时,需要额外一些配置,所以我们需要将这个项目拉取到本地。
|
|
5. 编写docker-compose.yml
文件
直接使用docker run
的话,也是可以的。但为了直观和便于使用和修改,使用docker-compose
更为友好:
|
|
简单说明一下这个文件:
-
- ./myrally:/rally/.rally
主要是把配置映射到本地; -
- ./entrypoint.sh:/entrypoint.sh
主要是替换原有的entrypoint.sh
文件; -
1
esrally race --track=geonames --challenge=append-no-conflicts --offline --pipeline=benchmark-only --target-hosts={{es.host}}:9200
--track=geonames
,表示使用geonames
数据集进行测试;--offline
,表示离线使用,不去下载数据集;--target-hosts={{es.host}}:9200
,表示需要测试的ES
集群地址,端口为Http
端口。如果不设置,esrally
默认会自己启动一个ES
来进行测试;
使用
首先,我们手动创建一个文件夹myrally
,对应上面docker-compose.yml
文件中的映射名称。
启动一下镜像,使之初始化:docker-compose up
,报错不用管。这时,我们的目录结构:
|
|
可以看到在myrally
文件夹下,已经初始化了一些配置和文件。接下来,我们就可以开始正式使用了(虽然还是各种需要调整):
-
Expected a git repository at [/root/.rally/benchmarks/tracks/default] but the directory does not exist
这个错误很明显,我们只需要手动创建对应的文件夹就好了。
-
[/rally/.rally/benchmarks/tracks/default] must be a git repository.\n\nPlease run:\ngit -C /rally/.rally/benchmarks/tracks/default init
这个错误是因为需要是
Git
目录,也已经给出了解决方案,不同的是,我们是在myrally
文件夹下进行操作:1 2 3 4 5
cd myrally/benchmarks/tracks/default git init touch .gitignore git add . git commit -m "init default"
-
Could not load '/rally/.rally/benchmarks/tracks/default/geonames/track.json'. The complete track has been written to '/tmp/tmpyadq1aqi.json' for diagnos is.", '("Could not load track from \'track.json\'
这个错误就需要用到我们拉取下来的
rally-tracks
项目了:1
cp rally-tracks/geonames/ myrally/benchmarks/tracks/default/ -r
-
Cannot find /rally/.rally/benchmarks/data/geonames/documents-2.json.bz2. Please disable offline mode and retry again.
这个错误也比较明显,这时,我们就可以直接使用手动下载的数据集啦:
1 2
mkdir myrally/benchmarks/data/geonames/ -P cp geonames/documents-2.json.bz2 myrally/benchmarks/data/geonames/
到这里,我们终于可以愉快地进行测试了。
直接运行:
|
|
等待执行完毕就可以啦。
小技巧
查看日志:
|
|
总结
esrally
的使用还是非常方便的,只是因为网络原因,我们需要先手动下载数据集,并且修改一些配置。
从一开始的查询docker
镜像,到自己优化镜像、再到直接使用官方提供的镜像、并调整一些参数。还是花了我半天的时间,但收获还是满满的。
有了这个基准测试,在优化集群参数,调整集群大小方面,就更有底气,也更有说服力了。