一、esrally压测执行步骤回顾
通过上图可以得知,esrally执行命令的步骤如下:
- 先判断本地有没有ES6.0.0的实例,如果没有就去下载ES6.0.0的实例
- 判断本地有没有http_logs的track压测数据集,如果没有就去下载http_logs的track
- 执行append-no-conflicts的压测方案
- 生成压测结果
二、自定义集群
1、关键参数
--pipeline:流水线
- from-distribution:默认的,是指esrally在官方打好的包下载下来,解压运行
- from-sources-complete:支持从源码本地编译、打包再运行,对于ES开发人员有用
- benchmark-only:自定义集群时需要使用的pipeline,只进行压测而不去管理ES实例
- from-sources-skip-build:与from-sources-complete相互呼应,利用源码方式但是跳过编译、打包
--target-hosts:执行集群的连接地址
--cluster-health:检查集群状态,根据设定的健康状态来判断是否进行压测,默认为Green,可以修改为Yellow
最终命令版本如下:
esrally race --pipeline=benchmark-only --target-hosts=127.0.0.1:9200 --cluster-health=yellow
三、自定义数据集
1、esrally自带的数据集
可以通过如下命令查看现有的数据集,从而针对自己的情况选择合适的数据集
esrally list tracks
esrally本身自带的数据集:
- geonames、geopoint:都是和地理位置相关的,如果需要测试ES在地理位置处理的性能可以选用
- http_logs:是http_server的,如果要测服务器日志、redis日志、apache日志可以选用
- ......
2、Track的组成
2.1、Data的定义
2.2、Challenges定义
一个track.json是可以有多个challenges压测方案的,下面针对challenges压测方案进行介绍
- name:压测方案的名称
- default:如果用户在跑esrally时没有指定challenge的话,那么就跑default为true的challenge压测方案,每次只能跑一个challenge
- index-settings:相关配置,例如"index.number_of_replicas":0就是不需要副本
- schedule:具体需要跑的任务
- operation:操作
- operation-type:操作类型,上图为bulk(批量写操作),bulk-size为每次写多少条
- warmup-time-period:ES预热时间
- clients:并发用户数
3、自定义数据集实践
第一步:在tracks下创建MyTracks/demo_track2文件夹
第二步:获取数据,从esrally文档中下载的allCountry文档,利用下面的代码将其转化为json格式(压测数据准备就绪)
#!encoding=utf-8
import json
cols = (("geonameid", "int", True),
("name", "string", True),
("asciiname", "string", False),
("alternatenames", "string", False),
("latitude", "double", True),
("longitude", "double", True),
("feature_class", "string", False),
("feature_code", "string", False),
("country_code", "string", True),
("cc2", "string", False),
("admin1_code", "string", False),
("admin2_code", "string", False),
("admin3_code", "string", False),
("admin4_code", "string", False),
("population", "long", True),
("elevation", "int", False),
("dem", "string", False),
("timezone", "string", False))
def main():
with open("allCountries.txt", "rt", encodin