Elasticsearch 压力测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 压力测试相关的知识,希望对你有一定的参考价值。
参考技术A俗话说 "知己知彼,百战不殆",当我们上线一个新的系统或应用的时候,至少要知道这个系统或应用的上线在哪里,做直接的数据可能就是【吞吐量】是多少,【延时】是多少,【瓶颈】是什么。更多关于压测的指导可参考 CoolShell 的性能测试应该怎么做?
rally es 官方提供的一款压测工具。同时官方也将 es 的实时压测结果放在了 https://elasticsearch-benchmarks.elastic.co/ , 你可以将你自己的结果与它进行对比,官方是使用 2 台服务器进行压测,一台运行 rally, 一台运行 es, 服务器的配置如下:
rally 是汽车拉力赛的意思,所以关于它里面术语也是跟汽车的拉力赛有关。
如下实例,使用 pmc 样本数据对一个已存在的 es 实例进行压力测试,使用 track-params 对默认的压测参数进行覆盖,对这次测试以 version:5.5.0 进行 tag 标记。
压测数据类型: pmc (学术论文)
单节点,普通硬盘,副本数0
单节点,4块普通硬盘组成 RAID0,副本数0
压测数据类型: eventdata
单节点,普通硬盘,副本数0
单节点,4块普通硬盘组成 RAID0,副本数0
3节点,4块普通硬盘组成 RAID0,副本数0
3节点,4块普通硬盘组成 RAID0,副本数1
压测数据类型: geonames
单节点,普通硬盘,副本数0
单节点,4块普通硬盘组成 RAID0,副本数0
3节点,4块普通硬盘组成 RAID0,副本数0
https://segmentfault.com/a/1190000011174694#articleHeader0
分布式全文检索引擎Elasticsearch与实践踩坑系列
念在天涯,心在咫尺
全文检索、分词中文语义对媒体单位来说有着特殊重要意义。
年前对大约1T(3亿条)日志做全文检索压力测试,Elasticsearch看起来很火爆,又有很多产品使用Facebook、github、stackoverflow),值得一试。把以往实践过程中整理了不少资料以及踩过的坑,整理做个系列。
Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful的搜索引擎,能够实现近实时(NRT)搜索,稳定、可靠、安装方便。性能不错、水平扩展、文档齐全、社区火爆,这几点很重要。
如果之前已经了解过分布式存储系统、query切词、检索相关性策略,Elasticsearch的使用学习起来会很快。
1 基础概念
Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时。Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往写句柄写入的数据刷新之后,读句柄重新打开,这才能读到新写入的数据。
名词解释:
Cluster:集群。
Index:索引,Index相当于关系型数据库的DataBase。
Type:类型,这是索引下的逻辑划分,一般把有共性的文档放到一个类型里面,相当于关系型数据库的table。
Document:文档,Json结构,这点跟MongoDB差不多。
Shard、Replica:分片,副本。
分片有两个好处,一个是可以水平扩展,另一个是可以并发提高性能。在网络环境下,可能会有各种导致分片无法正常工作的问题,所以需要有失败预案。ES支持把分片拷贝出一份或者多份,称为副本分片,简称副本。副本有两个好处,一个是实现高可用(HA,High Availability),另一个是利用副本提高并发检索性能。
分片和副本的数量可以在创建index的时候指定,index创建之后,只能修改副本数量,不能修改分片
2 搭建ElasticSearch
1.安装JDK
Elasticsearch是基于Java开发是一个Java程序,运行在Jvm中,所以第一步要安装JDK
yum install -y java-1.8.0-openjdk-devel
2.下载elasticsearch
https://artifacts.elastic.co/downloads/elasticsearch/ 是ELasticsearch的官方站点,如果需要下载最新的版本,进入官网下载即可。可以下载到本地电脑然后再导入CentOS中,也可以直接在CentOS中下载。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.1.rpm
3.配置目录
安装完毕后会生成很多文件,包括配置文件日志文件等等,下面几个是最主要的配置文件路径
/etc/elasticsearch/elasticsearch.yml # els的配置文件/etc/elasticsearch/jvm.options # JVM相关的配置,内存大小等等/etc/elasticsearch/log4j2.properties # 日志系统定义/var/lib/elasticsearch # 数据的默认存放位置
4.创建用于存放数据与日志的目录
数据文件会随着系统的运行飞速增长,所以默认的日志文件与数据文件的路径未来可能不能满足我们的需求,那么手动创建日志与数据文件路径,可以使用NFS、可以使用Raid等等方便以后的管理与扩展
mkdir /els/{log,date}chown -R elasticsearch.elasticsearch /els/*
5.集群配置
vim /etc/elasticsearch cluster.name: aubin-cluster # 集群名称node.name: els1 # 节点名称,仅仅是描述名称,用于在日志中区分path.data: /var/lib/elasticsearch
# 数据的默认存放路径path.logs: /var/log/elasticsearch # 日志的默认存放路径network.host: 192.168.0.1 # 当前节点的IP地址http.port: 9200 # 对外提供服务的端口,9300为集群服务的端口discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"] # 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析discovery.zen.minimum_master_nodes: 2 # 为了避免脑裂,集群节点数最少为 半数+1
6.JVM配置
由于Elasticsearch是Java开发的,所以可以通过/etc/elasticsearch/jvm.options
配置文件来设定JVM的相关设定。如果没有特殊需求按默认即可。
不过其中还是有两项最重要的-Xmx1g
与-Xms1g
JVM的最大最小内存。如果太小会导致Elasticsearch刚刚启动就立刻停止。太大会拖慢系统本身
vim /etc/elasticsearch/jvm.options-Xms1g # JVM最大、最小使用内存-Xmx1g
7.启动Elasticsearch
由于启动Elasticsearch会自动启动daemon-reload所以最后一项可以省略。
systemctl enable elasticsearch.service systemctl start elasticsearch systemctl daemon-reload # 可以省略
一波坑30秒后到达战场
1
java.io.FileNotFoundException: /usr/elasticsearch/logs/elasticsearch.log (Permission denied) 方案:将ElasticSearch的安装目录及其子目录改为另外一个非root账户,如:sudo chown -R guest elasticsearch5.0.1
2
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
3
问题三:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:soft nproc 1024
修改为:soft nproc 2048
以上是关于Elasticsearch 压力测试的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch JVM 堆内存使用率飙升,怎么办?
Elastic:使用 Docker 安装 Elastic Stack 8.0 并开始使用