ElasticSearch压测工具:esrally离线使用详解
- 2020 年 3 月 6 日
- 笔记
原创声明:本文首发腾讯云·云+社区,未经允许,不得转载
前言:
esrally是一款用于ElasticSearch的开源压测工具。默认情况下,其工作方式是:在线获取其位于海外主机上的数据集,然后在本地执行压测。因此,在国内网络情况下(或某些没有网络的主机上),在线获取数据集这一步骤将非常耗时甚至无法完成。
官网文档:https://esrally.readthedocs.io/en/latest/
然而,官网文档中,对于离线使用的方法基本是含糊其辞,几乎无法参考。
下面,通过实践和摸索,介绍一下其离线使用的方法。
环境简介:
腾讯云主机CVM:CentOS 7.6 IP:10.0.0.15
ElasticSearch实例:ES 7.5.1 IP&PORT:10.0.0.149:9200 UserName&PassWord: elastic,QAZwsx123
安装:
1,安装python3
无需卸载CentOS7自带的python2.7,直接安装python3即可
yum install python3 python3-devel.x86_64 -y
2,下载安装jdk 13
https://www.oracle.com/java/technologies/javase-jdk13-downloads.html


然后rpm安装
rpm -ivh jdk-13.0.2_linux-x64_bin.rpm
配置环境变量,在 /etc/profile文件的末尾加入以下内容
export JAVA_HOME=/usr/java/jdk-13.0.2 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
并执行下列命令使环境变量生效
source /etc/profile
3,安装 git 1.9以后的版本(略)
注意:需删除CentOS7自带的git 1.8版本。
4,安装esrally
执行下列命令
pip3 install esrally
5,检查是否完成安装
任意路径执行下列命令
esrally configure

看到上图,即表示安装完成了。
常规在线使用
特点:先下载数据集,然后解压,再进行压测,耗时非常久,动辄2-3小时甚至更久
最令人头疼的是,每次运行,都要重新在线下载。
任意路径下执行下列命令,等待结果即可(我们默认使用数据集 geonames)
esrally race --pipeline=benchmark-only --target-hosts=10.0.0.145:9200 --track=geonames --client-options="basic_auth_user:'elastic',basic_auth_password:'QAZwsx123'" --challenge=append-no-conflicts

离线使用
1,手工下载数据集
我们依旧以 geonames 数据集为例
我们在elastic官网github上可以看到esrally的数据集相关描述 https://github.com/elastic/rally-tracks
通过查看 rally-tracks/download.sh,我们可以看到,所有数据源都是从一台亚马逊主机上下载的

通过阅读代码,我们知道:数据集的主路径在 http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora
通过查看 rally-tracks/geonames/files.txt文件,我们知道了geonames的数据集名称叫 documents-2.json.bz2 和 documents-2-1k.json.bz2 。

因此,我们尝试组合上述地址,使用浏览器访问:
http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/geonames/documents-2.json.bz2

我们发现,数据集可以下载了。
同理,其他数据集,也可以通过这种方式进行手工下载。
2,数据集配置
此小节依旧以geonames为例。
数据集下载完成后,需要放置在CentOS的如下路径,若没有geonames路径,则手工创建:

3,使用离线数据进行压测
任意路径执行下列命令(务必在命令最后使用 –offline参数):
esrally race --pipeline=benchmark-only --target-hosts=10.0.0.145:9200 --track=geonames --client-options="basic_auth_user:'elastic',basic_auth_password:'QAZwsx123'" --challenge=append-no-conflicts --offline

如上图,离线压测直接开始,无需漫长的等待。
当然,这一系列的操作,目的是为了,下次进行压测时,直接可以使用上面离线数据,而无需漫长地等待在线下载了。
最后,我们可以看到压测过程如下图。

【全文完】