首页
学习
活动
专区
圈层
工具
发布
43 篇文章
1
干货 | Elasitcsearch7.X集群/索引备份与恢复实战
2
干货 | Elasticsearch 运维实战常用命令清单
3
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
4
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
5
腾讯云Elasticsearch集群运维常用命令详解三(索引篇)
6
如何系统的学习 Elasticsearch ?
7
Elasitcsearch 开发运维常用命令集锦
8
Elasticsearch集群数据备份与恢复 Snapshot & Restore
9
搭建ELFK日志采集系统
10
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
11
使用 Ansible 部署 Elasticsearch 集群
12
技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置
13
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
14
Elasticsearch 生产环境集群部署最佳实践
15
ES 7.8 速成笔记(中)
16
ES 7.8 速成笔记(上)
17
如何在CentOS 7上设置生产Elasticsearch集群
18
kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署
19
ElasticSearch 7集群部署
20
在CentOS 7安装ElasticSearch 7.x
21
zabbix 监控 es 集群
22
ELK 日志报警插件 ElastAlert
23
Elasticsearch集群规划最佳实践
24
kubernetes-7:elasticsearch容器化
25
Go Elasticsearch 增删改查(CRUD)快速入门
26
go操作elasticsearch示例
27
在 Kubernetes 上搭建 EFK 日志收集系统
28
一文彻底搞定 EFK 日志收集系统
29
TKE上搭建EFK日志采集系统
30
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
31
腾讯云Elasticsearch集群规划及性能优化实践
32
【干货】Elasticsearch索引性能优化 (2)
33
让Elasticsearch飞起来!——性能优化实践干货
34
【干货】Elasticsearch的索引性能优化(3)
35
Elasticsearch性能优化实战指南
36
ElasticSearch性能优化官方建议
37
Elasticsearch 7.10.1集群压测报告(4核16G*3,AMD)
38
Elasticsearch压测之Esrally压测标准
39
通过 esrally 压测elasticsearch
40
Elasticsearch压测工具esrally部署之踩坑实录(上)
41
Elasticsearch压测工具Esrally部署之踩坑实录(下)
42
Elasticsearch压测工具Esrally部署指南
43
百亿架构之filebeat讲解

Elasticsearch压测工具esrally部署之踩坑实录(上)

说明

本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)

另外使用到:腾讯云 云服务器(Cloud Virtual Machine,CVM)

本文另有延续:

Elasticsearch压力测试 - 云+社区 - 腾讯云 (tencent.com)

Elasticsearch压测工具esrally部署之踩坑实录(下)

Elasticsearch压测工具esrally部署指南(推荐)

友情提示

环境配置

注:这套环境配置为本文验证通过的环境配置及版本,避免踩坑请尽量按照环境配置里提到的配置及版本

Esrally客户端环境版本

Linux环境:centos7.9

Python:3.6.7

Pip:10.0.1 from pip (python 3.6)

Java:openjdk version 1.8.0_302 (build 1.8.0_302-b08)

Git:2.7.5

Esrally:1.4.1

Esrally客户端环境配置

内存:32G

硬盘:SSD云硬盘 100GB

CPU个数:1

CPU核心数:16

背景

在大数据时代的今天,业务量越来越大,每天动辄都会产生上百GB、上TB的数据,所以拥有一个性能强劲的Elasticsearch集群就显得尤为重要。我们需要模拟大量网络日志、用户行为日志的读写动作,衡量各性能的指标,找出集群瓶颈所在,以确认我们需要怎样的硬件配置以及业务优化,才能满足现有的业务量,这就是我们在业务上线前所必要做的。

部署

一:安装python3

1. 下载python3.6.7源码并解压

代码语言:go
复制
[root@VM-10-15-centos ~]# wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz
Length: 22969142 (22M) [application/octet-stream]
Saving to: ‘Python-3.6.7.tgz.1’

100%[====================================================================================================================================================================================================================================>] 22,969,142  16.3MB/s   in 1.3s   
2021-10-19 17:06:33 (16.3 MB/s) - ‘Python-3.6.7.tgz.1’ saved [22969142/22969142]

[root@VM-10-15-centos ~]# tar -zxvf Python-3.6.7.tgz 

2. 编译并安装

代码语言:go
复制
[root@VM-10-15-centos ~]# cd Python-3.6.7/
[root@VM-10-15-centos Python-3.6.7]# ./configure prefix=/usr/local/python3
[root@VM-10-15-centos Python-3.6.7]# make && make install

3. 配置python3环境变量

代码语言:go
复制
[root@VM-10-15-centos Python-3.6.7]# echo 'export PYTHON3_HOME=/usr/local/python3' >> /etc/profile
[root@VM-10-15-centos Python-3.6.7]# echo 'export PATH=$PATH:$PYTHON3_HOME/bin' >> /etc/profile
[root@VM-10-15-centos Python-3.6.7]# tail -2 /etc/profile
export PYTHON3_HOME=/usr/local/python3
export PATH=$PATH:$PYTHON3_HOME/bin
[root@VM-10-15-centos Python-3.6.7]# source /etc/profile

4. 验证

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# python3 -V
Python 3.6.7
[root@VM-10-15-centos Python-3.6.7]# pip3 -V
pip 10.0.1 from /usr/local/python3/lib/python3.6/site-packages/pip (python 3.6)

二:安装JDK

1. 安装java

代码语言:javascript
复制
[root@VM-10-15-centos ~]# yum -y install java-1.8.0
Installed:
  java-1.8.0-openjdk.x86_64 1:1.8.0.302.b08-0.el7_9                                                                                                                                                                                                                           

Complete!

2. 配置java环境变量

代码语言:javascript
复制
[root@VM-10-15-centos esrally]# which java
/usr/bin/java
[root@VM-10-15-centos esrally]# ll /usr/bin/java 
lrwxrwxrwx 1 root root 22 Oct 19 18:20 /usr/bin/java -> /etc/alternatives/java
[root@VM-10-15-centos esrally]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Oct 19 18:20 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java

最终定位到java命令位于/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre,所以将这个目录配置为JAVA_HOME

代码语言:javascript
复制
[root@VM-10-15-centos esrally]# echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre' >> /etc/profile
[root@VM-10-15-centos esrally]# tail -1 /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre
[root@VM-10-15-centos esrally]# source /etc/profile
[root@VM-10-15-centos esrally]# echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre

这个JAVA_HOME的配置是必要的,我们在使用esrally时会用到它。

三:安装esrally

1. 安装esrally

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# pip3 install esrally
Installing collected packages: docutils, urllib3, jmespath, six, python-dateutil, botocore, s3transfer, boto3, tabulate, psutil, thespian, MarkupSafe, Jinja2, elasticsearch, py-cpuinfo, zipp, typing-extensions, importlib-metadata, pyrsistent, attrs, jsonschema, certifi, esrally
  Running setup.py install for tabulate ... done
  Running setup.py install for psutil ... done
  Running setup.py install for thespian ... done
  Running setup.py install for py-cpuinfo ... done
Successfully installed Jinja2-2.10.3 MarkupSafe-2.0.1 attrs-21.2.0 boto3-1.10.32 botocore-1.13.50 certifi-2021.10.8 docutils-0.15.2 elasticsearch-7.0.5 esrally-1.4.1 importlib-metadata-4.8.1 jmespath-0.10.0 jsonschema-3.1.1 psutil-5.6.5 py-cpuinfo-3.2.0 pyrsistent-0.18.0 python-dateutil-2.8.2 s3transfer-0.2.1 six-1.16.0 tabulate-0.8.5 thespian-3.9.3 typing-extensions-3.10.0.2 urllib3-1.26.7 zipp-3.6.0

2. 验证

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# esrally --version
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 783, in resolve
    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (urllib3 1.26.7 (/usr/local/python3/lib/python3.6/site-packages), Requirement.parse('urllib3<1.26,>=1.20; python_version >= "3.4"'), {'botocore'})

这里发现无法通过验证,报错信息关键词为:

代码语言:javascript
复制
Requirement.parse('urllib3<1.26,>=1.20; python_version >= "3.4"')

urllib3要求<1.26并且>=1.20,我们来看一下当前urllib3的版本:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# pip3 list | grep urllib3
urllib3            1.26.7   

很显然,版本大于1.26了,那我们安装1.25吧:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# pip3 install urllib3==1.25
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting urllib3==1.25
  Downloading http://mirrors.tencentyun.com/pypi/packages/81/9b/715e96377cc1f87e71d9d4259c6f88bf561a539622ba3042e73188e0bc2d/urllib3-1.25-py2.py3-none-any.whl (149kB)
    100% |████████████████████████████████| 153kB 1.8MB/s 
Installing collected packages: urllib3
  Found existing installation: urllib3 1.26.7
    Uninstalling urllib3-1.26.7:
      Successfully uninstalled urllib3-1.26.7
Successfully installed urllib3-1.25

再次执行esrally命令:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# esrally --version
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/utils/io.py", line 18, in <module>
    import bz2
  File "/usr/local/python3/lib/python3.6/bz2.py", line 23, in <module>
    from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'

又报了一个错,经过确认,这个问题是因为缺少bzip2的开发包,需要安装bzip2-devel之后再重新编译python。

安装bzip2开发包:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# yum -y install bzip2-devel
Running transaction
  Installing : bzip2-devel-1.0.6-13.el7.x86_64                                                                                                                                                                                                                            1/1 
  Verifying  : bzip2-devel-1.0.6-13.el7.x86_64                                                                                                                                                                                                                            1/1 

Installed:
  bzip2-devel.x86_64 0:1.0.6-13.el7                                                                                                                                                                                                                                           

Complete!

重新编译安装python:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# cd Python-3.6.7/
[root@VM-10-15-centos Python-3.6.7]# ./configure prefix=/usr/local/python3
[root@VM-10-15-centos Python-3.6.7]# make && make install

再次执行esrally命令:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# esrally --version
esrally 1.4.1

配置esrally:

代码语言:javascript
复制
[root@VM-10-15-centos Python-3.6.7]# esrally configure
[root@VM-10-15-centos Python-3.6.7]# ll ~/.rally
total 16
drwxr-xr-x 6 root root 4096 Oct 20 11:04 benchmarks
-rw-r--r-- 1 root root 1354 Oct 19 19:25 logging.json
drwxr-xr-x 2 root root 4096 Oct 19 19:25 logs
-rw-r--r-- 1 root root  674 Oct 19 19:43 rally.ini

执行此命令后会在当前用户根目录下生成 .rally 目录,至此,esrally就安装好了。

验证实例

我们根据官方文档来执行一个例子:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

Traceback (most recent call last):

  File "/usr/local/python3/lib/python3.6/site-packages/elasticsearch/connection/http_urllib3.py", line 2, in <module>
    import ssl
  File "/usr/local/python3/lib/python3.6/ssl.py", line 101, in <module>
    import _ssl             # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'

验证失败,发现又报错了。经过确认,这个是由于缺少openssl开发包,需要安装openssl-devel之后再重新编译python。

1. 安装openssl开发包

代码语言:javascript
复制
[root@VM-10-15-centos ~]# yum -y install openssl-devel 
Installed:
  openssl-devel.x86_64 1:1.0.2k-22.el7_9                                                                                                                                                                                                                                      

Dependency Installed:
  keyutils-libs-devel.x86_64 0:1.5.8-3.el7   krb5-devel.x86_64 0:1.15.1-50.el7   libcom_err-devel.x86_64 0:1.42.9-19.el7   libkadm5.x86_64 0:1.15.1-50.el7   libselinux-devel.x86_64 0:2.5-15.el7   libsepol-devel.x86_64 0:2.5-10.el7   libverto-devel.x86_64 0:0.2.5-4.el7  
  pcre-devel.x86_64 0:8.32-17.el7           

Dependency Updated:
  openssl.x86_64 1:1.0.2k-22.el7_9                                                                                                    openssl-libs.x86_64 1:1.0.2k-22.el7_9                                                                                                   

Complete!

再次验证:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[ERROR] Cannot race. Error in race control (('Cannot load track None. List the available tracks with esrally list tracks.', None))

Getting further help:
*********************
* Check the log files in /root/.rally/logs for errors.
* Read the documentation at https://esrally.readthedocs.io/en/1.4.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
* Raise an issue at https://github.com/elastic/rally/issues and include the log files in /root/.rally/logs.

-------------------------------
[INFO] FAILURE (took 8 seconds)
-------------------------------

这个报错是因为缺少git命令,无法加载track,需要安装一下git。

2. 安装Git命令

代码语言:javascript
复制
[root@VM-10-15-centos ~]# yum -y install git                                                                                                                                                                                                                   4/4 

Installed:
  git.x86_64 0:1.8.3.1-23.el7_8                                                                                                                                                                                                                                               

Dependency Installed:
  perl-Error.noarch 1:0.17020-2.el7                                                       perl-Git.noarch 0:1.8.3.1-23.el7_8                                                       perl-TermReadKey.x86_64 0:2.30-20.el7                                                      

Complete!

再次验证:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[WARNING] No Internet connection detected. Automatic download of track data sets etc. is disabled.
[ERROR] Cannot race. Error in race control (('[/root/.rally/benchmarks/tracks/default] must be a git repository.\n\nPlease run:\ngit -C /root/.rally/benchmarks/tracks/default init', None))

Getting further help:
*********************
* Check the log files in /root/.rally/logs for errors.
* Read the documentation at https://esrally.readthedocs.io/en/1.4.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
* Raise an issue at https://github.com/elastic/rally/issues and include the log files in /root/.rally/logs.

--------------------------------
[INFO] FAILURE (took 12 seconds)
--------------------------------

这次报错信息变了,关键词信息为:

代码语言:javascript
复制
Please run:
git -C /root/.rally/benchmarks/tracks/default init

那我们初始化一下目录吧:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# git -C /root/.rally/benchmarks/tracks/default init
Unknown option: -C
usage: git [--version] [--help] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

很显然,命令不兼容这个版本的git,通过了解,esrally需要安装git版本>=1.9,所以需要重新安装一下git。

这里我们需要通过编译的方式安装git,首先安装编译依赖:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
Installed:
  expat-devel.x86_64 0:2.1.0-12.el7                                                    gettext-devel.x86_64 0:0.19.8.1-3.el7                                                    perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7                                                   

Dependency Installed:
  gdbm-devel.x86_64 0:1.10-8.el7              gettext-common-devel.noarch 0:0.19.8.1-3.el7   git.x86_64 0:1.8.3.1-23.el7_8           libdb-devel.x86_64 0:5.3.21-25.el7     perl-ExtUtils-Install.noarch 0:1.58-299.el7_9   perl-ExtUtils-Manifest.noarch 0:1.61-244.el7  
  perl-ExtUtils-ParseXS.noarch 1:3.18-3.el7   perl-Git.noarch 0:1.8.3.1-23.el7_8             perl-Test-Harness.noarch 0:3.28-3.el7   perl-devel.x86_64 4:5.16.3-299.el7_9   pyparsing.noarch 0:1.5.6-9.el7                  systemtap-sdt-devel.x86_64 0:4.0-13.el7       

Complete!

下载git源码:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.7.5.tar.gz
ERROR: cannot verify mirrors.edge.kernel.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  Issued certificate has expired.
To connect to mirrors.edge.kernel.org insecurely, use `--no-check-certificate'.

竟然报了个错,提示需要指定--no-check-certificate,那我们指定一下吧:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.7.5.tar.gz --no-check-certificate
Saving to: ‘git-2.7.5.tar.gz’

100%[====================================================================================================================================================================================================================================>] 5,724,154    424KB/s   in 79s    

2021-10-19 18:58:08 (71.2 KB/s) - ‘git-2.7.5.tar.gz’ saved [5724154/5724154]

解压并编译安装:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# tar -zxvf git-2.7.5.tar.gz
[root@VM-10-15-centos ~]# cd git-2.7.5/
[root@VM-10-15-centos git-2.7.5]# make prefix=/usr/local/git all
[root@VM-10-15-centos git-2.7.5]# make prefix=/usr/local/git install

配置git环境变量:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# echo 'export GIT2_HOME=/usr/local/git' >> /etc/profile
[root@VM-10-15-centos git-2.7.5]# echo 'export PATH=$PATH:$GIT2_HOME/bin' >> /etc/profile
[root@VM-10-15-centos git-2.7.5]# tail -2 /etc/profile
export GIT2_HOME=/usr/local/git
export PATH=$PATH:$GIT2_HOME/bin
[root@VM-10-15-centos git-2.7.5]# source /etc/profile

验证:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# git --version
git version 1.8.3.1

GG了,看来系统命令路径比用户命令的路径的优先级要高:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# which git
/usr/bin/git
[root@VM-10-15-centos git-2.7.5]# /usr/bin/git --version
git version 1.8.3.1

没办法,那我们只能卸载掉操作系统系统的git命令了:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# rpm -qa | grep -w git
git-1.8.3.1-23.el7_8.x86_64
[root@VM-10-15-centos git-2.7.5]# rpm -e git-1.8.3.1-23.el7_8.x86_64
error: Failed dependencies:
	git = 1.8.3.1-23.el7_8 is needed by (installed) perl-Git-1.8.3.1-23.el7_8.noarch
	git is needed by (installed) gettext-devel-0.19.8.1-3.el7.x86_64

报了个错,提示git命令有依赖,但是看了下面的两个包,都是我们需要用到的,所以只能强制卸载这个git了,加个--deps参数:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# rpm -e git-1.8.3.1-23.el7_8.x86_64 --nodeps
[root@VM-10-15-centos git-2.7.5]# git --version
-bash: /usr/bin/git: No such file or directory

再次加载环境变量,让bash识别到我们的用户命令路径:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# source /etc/profile
[root@VM-10-15-centos git-2.7.5]# git --version
git version 2.7.5

我们再次执行一下git目录初始化命令:

代码语言:javascript
复制
[root@VM-10-15-centos git-2.7.5]# git -C /root/.rally/benchmarks/tracks/default init
Reinitialized existing Git repository in /root/.rally/benchmarks/tracks/default/.git/

发现已经可以执行了,那我们再运行一下官方的esrally例子,来确认一下esrally是否可用:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[WARNING] Could not update tracks. Continuing with your locally available state.
[ERROR] Cannot race. Error in mechanic (('Could not clone from [https://github.com/elastic/rally-teams] to [/root/.rally/benchmarks/teams/default]', None))

Getting further help:
*********************
* Check the log files in /root/.rally/logs for errors.
* Read the documentation at https://esrally.readthedocs.io/en/1.4.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
* Raise an issue at https://github.com/elastic/rally/issues and include the log files in /root/.rally/logs.

---------------------------------
[INFO] FAILURE (took 308 seconds)
---------------------------------

报错提示无法克隆,那我们就手动克隆吧。

3. 手动克隆rally-teams

代码语言:javascript
复制
[root@VM-10-15-centos ~]# git clone https://github.com/elastic/rally-teams /root/.rally/benchmarks/teams/default
Cloning into '/root/.rally/benchmarks/teams/default'...
remote: Enumerating objects: 2020, done.
remote: Counting objects: 100% (198/198), done.
remote: Compressing objects: 100% (129/129), done.
remote: Total 2020 (delta 100), reused 100 (delta 36), pack-reused 1822
Receiving objects: 100% (2020/2020), 240.94 KiB | 52.00 KiB/s, done.
Resolving deltas: 100% (1031/1031), done.
Checking connectivity... done.

克隆成功,我们再来运行一下官方的esrally例子,确认esrally是否可用:

代码语言:javascript
复制
[root@VM-10-15-centos esrally]# esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[WARNING] Could not update tracks. Continuing with your locally available state.
[WARNING] Track [geonames] uses the deprecated property [cluster-settings]. Please replace it with an explicit call to the cluster settings API.
[INFO] Preparing for race ...
[INFO] Downloading Elasticsearch 5.0.0 (26.1 MB total size)                         [100%]
[ERROR] Cannot race. ('Cannot launch Elasticsearch as root. Please run Rally as a non-root user.', None)
	Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/mechanic.py", line 565, in receiveMsg_StartNodes
    self.mechanic.start_engine()
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/mechanic.py", line 680, in start_engine
    self.nodes = self.launcher.start(self.node_configs)
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/launcher.py", line 130, in start
    return [self._start_node(node_configuration, node_count_on_host) for node_configuration in node_configurations]
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/launcher.py", line 130, in <listcomp>
    return [self._start_node(node_configuration, node_count_on_host) for node_configuration in node_configurations]
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/launcher.py", line 159, in _start_node
    node_pid = self._start_process(binary_path, env)
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/launcher.py", line 210, in _start_process
    raise exceptions.LaunchError("Cannot launch Elasticsearch as root. Please run Rally as a non-root user.")
esrally.exceptions.LaunchError: ('Cannot launch Elasticsearch as root. Please run Rally as a non-root user.', None)


Getting further help:
*********************
* Check the log files in /root/.rally/logs for errors.
* Read the documentation at https://esrally.readthedocs.io/en/1.4.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
* Raise an issue at https://github.com/elastic/rally/issues and include the log files in /root/.rally/logs.

---------------------------------
[INFO] FAILURE (took 135 seconds)
---------------------------------

这次又报了一个新的错误,提示不能使用root用户来启动elasticsearch,请用非root用户运行,那好吧,我们换个用户:

代码语言:javascript
复制
[root@VM-10-15-centos esrally]# useradd dy
[root@VM-10-15-centos esrally]# su - dy

然后重复一遍上面的操作,配置esrally:

代码语言:shell
复制
[dy@VM-10-15-centos ~]$ esrally configure

手动克隆rally-teams:

代码语言:shell
复制
[dy@VM-10-15-centos ~]$ git clone https://github.com/elastic/rally-teams ~/.rally/benchmarks/teams/default
Cloning into '/home/dy/.rally/benchmarks/teams/default'...
remote: Enumerating objects: 2020, done.
remote: Counting objects: 100% (198/198), done.
remote: Compressing objects: 100% (129/129), done.
remote: Total 2020 (delta 100), reused 100 (delta 36), pack-reused 1822
Receiving objects: 100% (2020/2020), 240.94 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1031/1031), done.
Checking connectivity... done.

然后我们再执行试一下:

代码语言:shell
复制
[dy@VM-10-15-centos ~]$ esrally --distribution-version=5.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[INFO] Preparing for race ...
[WARNING] Could not update teams. Continuing with your locally available state.
[ERROR] Cannot race. ('Cannot download Elasticsearch distribution from [https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.0-linux-x86_64.tar.gz]. Please check that the specified version [5.0.0] is correct.', None)
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/mechanic.py", line 565, in receiveMsg_StartNodes
    self.mechanic.start_engine()
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/mechanic.py", line 676, in start_engine
    binaries = self.supply()
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/supplier.py", line 218, in __call__
    supplier.fetch()
  File "/usr/local/python3/lib/python3.6/site-packages/esrally/mechanic/supplier.py", line 361, in fetch
    "version [%s] is correct." % (download_url, self.version))
esrally.exceptions.SystemSetupError: ('Cannot download Elasticsearch distribution from [https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.0-linux-x86_64.tar.gz]. Please check that the specified version [5.0.0] is correct.', None)


Getting further help:
*********************
* Check the log files in /home/dy/.rally/logs for errors.
* Read the documentation at https://esrally.readthedocs.io/en/1.4.1/
* Ask a question on the forum at https://discuss.elastic.co/c/elasticsearch/rally
* Raise an issue at https://github.com/elastic/rally/issues and include the log files in /home/dy/.rally/logs.

---------------------------------
[INFO] FAILURE (took 135 seconds)
---------------------------------

4. 切换elasticsearch版本

这里发现反复执行都无法下载elasitcsearch 5.0.0的包,那我们就换个6.0.0的版本吧:

代码语言:shell
复制
[dy@VM-10-15-centos ~]$ esrally --distribution-version=6.0.0

    ____        ____
   / __ \____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|\__,_/_/_/\__, /
                /____/

[WARNING] Could not update tracks. Continuing with your locally available state.
[INFO] Preparing for race ...
[INFO] Downloading Elasticsearch 6.0.0 (26.7 MB total size)                         [100%]
[INFO] Downloading data for track geonames (252.9 MB total size)                  [100.0%]
[INFO] Decompressing track data from [/home/dy/.rally/benchmarks/data/geonames/documents-2.json.bz2] to [/home/dy/.rally/benchmarks/data/geonames/documents-2.json] (resulting size: 3.30 GB) ... [OK]
[INFO] Preparing file offset table for [/home/dy/.rally/benchmarks/data/geonames/documents-2.json] ... [OK]
[INFO] Racing on track [geonames], challenge [append-no-conflicts] and car ['defaults'] with version [6.0.0].

Running delete-index                                                           [100% done]
Running create-index                                                           [100% done]
Running check-cluster-health                                                   [100% done]
Running index-append                                                           [100% done]
Running refresh-after-index                                                    [100% done]
Running force-merge                                                            [100% done]
Running refresh-after-force-merge                                              [100% done]
Running wait-until-merges-finish                                               [100% done]
Running index-stats                                                            [100% done]
Running node-stats                                                             [100% done]
Running default                                                                [100% done]
Running term                                                                   [100% done]
Running phrase                                                                 [100% done]
Running country_agg_uncached                                                   [100% done]
Running country_agg_cached                                                     [100% done]
Running scroll                                                                 [100% done]
Running expression                                                             [100% done]
Running painless_static                                                        [100% done]
Running painless_dynamic                                                       [100% done]
Running large_terms                                                            [100% done]
Running large_filtered_terms                                                   [100% done]
Running large_prohibited_terms                                                 [100% done]

在压测的过程中,我们发现esrally在本地启动了一个单机版的es,端口为39200:

代码语言:javascript
复制
[root@VM-10-15-centos ~]# netstat -ntpl | grep java
tcp6       0      0 127.0.0.1:39200         :::*                    LISTEN      10239/java          
tcp6       0      0 127.0.0.1:39300         :::*                    LISTEN      10239/java          
[dy@VM-10-15-centos distributions]$ curl localhost:39200
{
  "name" : "rally-node-0",
  "cluster_name" : "rally-benchmark",
  "cluster_uuid" : "Sov2ib1YRQaFvM2BK_cFsQ",
  "version" : {
    "number" : "6.0.0",
    "build_hash" : "8f0685b",
    "build_date" : "2017-11-10T18:41:22.859Z",
    "build_snapshot" : false,
    "lucene_version" : "7.0.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
[dy@VM-10-15-centos distributions]$ curl localhost:39200/_cluster/health?pretty
{
  "cluster_name" : "rally-benchmark",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 5,
  "active_shards" : 5,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[dy@VM-10-15-centos distributions]$ curl localhost:39200/_cat/indices?pretty
green open geonames f0F3JQEmQA6asmM_rWXtrw 5 0 11396503 0 3.2gb 3.2gb

压测过程中,CPU使用率还是比较高的:

最终输出了一份压测报告,但由于篇幅次数限制的缘故,无法贴上压测报告。

感兴趣的同学可以移步:Elasticsearch单机本地16核32G压测报告

截图来源 —— Elasticsearch单机本地16核32G压测报告

小结

至此,esrally的安装和实例验证就结束了。后续会使用这个esrally客户端,对当前Elasticsearch市面上几大主流的配置机型进行实际压测,届时会继续分享给大家。

下一篇
举报
领券