ES 是近乎线性扩展的分布式系统,所以可以总结成同一个测试模式:
1.使用和线上集群相同硬件配置的服务器搭建一个单节点集群。
2.使用和线上集群相同的映射创建一个 0 副本,1 分片的测试索引。
3.使用和线上集群相同的数据写入进行压测。
4.观察写入性能,或者运行查询请求观察搜索聚合性能。
5.持续压测数小时,使用监控系统记录 eps、requesttime、fielddata cache、GC count 等关键数据。
测试完成后,根据监控系统数据,确定单分片的性能拐点,或者适合自己预期值的临界点。这个数据,就是一个基准数据。之后的扩容计划,都可以以这个基准单位进行。
需要注意的是,测试是以分片为单位的,在实际使用中,因为主分片和副本分片都是在各自节点做 indexing 和 merge 操作,需要消耗同样的写入性能。所以,实际集群的容量预估中,要考虑副本数的影响。也就是说,假如你在基准测试中得到单机写入性能在 10000 eps,那么开启一个副本后所能达到的 eps 就只有 5000 了。还想写入 10000 eps 的话,就需要加一倍机器。
因为esrally 需要使用 pip3
一、PIP 3安装说明
1、下载安装
登陆服务器
[server]$ cd ~
[server]$ mkdir tmp
[server]$ cd tmp
[server]$ wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
[server]$ tar zxvf Python-3.6.2.tgz
[server]$ cd Python-3.6.2
[server]$ ./configure --prefix=$HOME/opt/python-3.6.2
[server]$ make
[server]$ make install
修改profile
[server]$ vim /etc/profile
在文件尾部加入配置
export PATH=$HOME/opt/python-3.6.2/bin:$PATH
[server]$ source /etc/profile
验证信息
[server]$ which python3
/root/opt/python-3.6.2/bin/python3
[server]$ python3 --version
Python 3.6.2
安装完毕
二 、 安装 esrally
官方文档有介绍
Install Python 3.5+ including pip3
, git 1.9+ and an appropriate JDK to run Elasticsearch Be sure that JAVA_HOME
points to that JDK. Then run the following command, optionally prefixed by sudo
if necessary:
python 3.5+
git 1.9+
JAVA_HOME 必须配置了JDK
[server]$ pip3 install esrally
如果第一步有任何问题 ,看文档 https://esrally.readthedocs.io/en/stable/install.html
[server]$ esrally configure //首次配置 检测环境,官方详细配置 https://esrally.readthedocs.io/en/stable/configuration.html
____ ____
/ __ \____ _/ / /_ __
/ /_/ / __ `/ / / / / /
/ _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
/____/
Running simple configuration. Run the advanced configuration with:
esrally configure --advanced-config
* Setting up benchmark root directory in /root/.rally/benchmarks
* Setting up benchmark source directory in /root/.rally/benchmarks/src/elasticsearch
Configuration successfully written to /root/.rally/rally.ini. Happy benchmarking!
More info about Rally:
* Type esrally --help
* Read the documentation at https://esrally.readthedocs.io/en/1.2.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
我这里的需求很简单,需要测试的是现有集群,所以使用pipeline方式,官方自带的数据样本必须要安装git ,然后下载,而且下载巨慢,可以考虑自己生成数据。
esrally --track=percolator --target-hosts=192.168.81.101:39202,192.168.81.102:39202,192.168.81.103:39202 --pipeline=benchmark-only
esrally --pipeline=benchmark-only --target-hosts=192.168.41.4:9200,192.168.41.5:9200,192.168.41.6:9200,192.168.41.7:9200,192.168.41.8:9200,192.168.41.9:9200
因 数据文件太大所以这里需要进行自定义数据集和自定义脚本进行测试(编写中)