Elasticsearch
集群压力测试
压力测试
- 压力 测试的目的.
- 容量规划/性能优化/版本间性能比较/性能问题诊断
- 确定系统稳定性,考察系统功能极限和隐患
- 压力 测试的方法与步骤
- 测试计划(确定测试场景和测试数据集)
- 脚本开发
- 测试环境搭建(不同的软硬件配置) &运行测试
- 分析比较结果
测试目标&测试数据
-
测试目标
- 测试集群的读写性能 /做集群容量规划
- 对ES配置参数进行修改,评估优化效果
- 修改Mapping 和Setting, 对数据建模进行优化,并测试评估性能改进
- 测试ES新版本,结合实际场景和老版本进行比较,评估是否进行升级.
-
测试数据
- 数据量/数据分布
测试脚本
- ES本身提供了REST API, 所以,可以通过很多传统的性能测试工具
- Load Runner ( 商业软件,支持录制+重放+ DSL )
- JMeter ( Apache 开源,Record & Play)
- Gatling (开源,支持写Scala 代码+ DSL)
- 专门为 Elasticsearch 设计的工具
- ES Pref & Elasticsearch-stress-test
- Elastic Rally
ES Rally 简介
-
Elastic官方开源,基于Python 3的压力测试工具
- https://github. com/elastic/rally
- 性能测试结果比较: https://elast icsearch-benchmarks. elastic. co
-
功能介绍
- 自动创建,配置,运行测试,并且销毁ES集群
- 支持不同的测试数据 的比较,也支持将数据导入ES集群,进行二次分析.
- 支持测试时指标数据的搜集,方便对测试结果进行深度的分析
Rally的安装以及入门
-
安装运行
- Python3.4+和pip3/JDK8/git1.9+.
- 运行pip3 install esrally
- 运行esrally configure
-
运行
- 运行esrally - distribution-version=7.1.0
- 运行1000 条测试数据: esrally - distribut ion-version=7.1. 0 --test-mode
Rally基本概念讲解
-
Tournament -定义测试目标,多个race组成
- Esrally list races
-
Track -赛道: 测试数据和测试场景与策略
- https://gi thub. com/elastic/rally-tracks
- esrally list tracks
-
Car- 执行测试方案
- 不同配置的es实例
-
Award-测试结果和报告
Benchmark Reports
运行一个测试
什么是压测的流程.
- Pipeline 指的是压测的一个流程
- Esrally list pipelines
- 默认的流程
- From-source-complete
- From-source-skip-build
- From-distribution
- Benchmark-only (对 已有的集群进行测试)
自定义&分布式测试
-
Car
- https://esrally. readthedocs. io/en/latest/car. html
- 使用自建的集群
-
Track
- 自带的测试数据集: Nyc_ _taxis 4.5 G / logging 1. 2G
- 更多的测试数据集:. https://gi thub. com/elastic/rally-tracks
-
分布式测试
- https://esrally. readthedocs. io/en/lates t/recipes. html#recipe-distributed-load-driver
实例:比较不同的版本的性能
-
测试
- esrally race 一-distribution-version=6. 0.0 – track=nyc_ _taxis - -challenge=append-no-conflicts --user-tag=" version:6.0.0”
- esrally race 一-distribution-version=7. 1.0一- track=nyc_ _taxis - -challenge=append-no-conflicts --user-tag=“version:7. 1.0”
-
比较结果
- esrally list races
- esrally compare --baseline=[6. 0. 0 race] --contender=[7. 1.0 race]
实例:比较不同Mapping 的性能
-
测试
-
esrally race – distribution-version=7.1.0 – track=nyc_ taxis – challenge=append -no- conflicts --user-tag=" enableSource:true" --include-tasks=" type: index”
-
修改: benchmarks/ tracks/ defaul t/nyc_ taxis/mappings. json,修改_ source. enabled为false
-
esrally race --distribution-version=7. 1.0 --track=nyc_ _taxis --challenge=append-no-conflicts - -user- tag=’ enabl eSource:false”- - inc lude-tasks=" type: index
-
-
比较
- esrally compare - -baseline=[enableAll race] --contender=[disableAll race]
实例:测试现有集群的性能
- 测试
- esrally race --pipeline=benchmark-only --target-hosts=127. 0. 0.1:9200 – track=geonames-- challenge=append- -no-conflicts
demo API
pip3 install esrally
esrally configure
# 只测试 1000条数据
esrally --distribution-version=7.1.0 --test-mode
# 测试完整数据
esrally --distribution-version=7.1.0
段合并优化及注意事项
Lucene Index 原理回顾
Merge优化
-
ES和Lucene 会自动进行Merge操作
-
Merge 操作相对比较重,需要优化,降低对系统的影响
-
优化点一: .降低分段产生的数量/频率
- 可以将Refresh Interval 调整到分钟级别/ indices. memory. index_ buffer size (默认是10%)
- 尽量避免文档的更新操作
-
优化点二: 降低最大分段大小,避免较大的分段继续参与Merge, 节省系统资源。(最终会有多个分段)
- Index. merge. policy. segments_ per_ tier, 默认为10,越 小需要越多的合并操作
- Index. merge. pol icy. max_ merged segment, 默认5 GB,操作此大小以后, 就不再参与后续的合并操作