Jmeter之es压测---从部署环境开始-创新互联

目录
    • 一、安装jdk(已安装可跳过)
    • 二、部署es(已安装可跳过)
    • 三、使用Jmeter编写es脚本
    • 四、遇到的问题

前景:
因为要用Jmeter调es做一些操作,但是还没有环境,就自己搭了一个,所以就从部署基础环境开始吧。

成都创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为永胜企业提供专业的成都网站设计、成都做网站永胜网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。一、安装jdk(已安装可跳过)

以下操作我这里都是用root操作的

jdk1.8下载地址

1、创建一个目录文件夹(用来放置jdk)

mkdir xxx   &   mkdir  -p  /xxx/java

2、解压jdk

tar -zxvf jdk-8u301-linux-x64.tar.gz

3、设置软连接(也可不设置,这里只是为了方便)

ln -s jdk1.8.0_121 jdk

4、配置环境变量

vim /etc/profile

将以下几行加入至文件中

export JAVA_HOME=/xxx/java/jdk    #你的jdk路径地址
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/ext:$JRE_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH

要注意的是,环境变量千万别改错咯,不然会影响到其他的命令使用!!!

*如果出现/usr/libexec/grepconf.sh: line 5: grep: command not found那就是环境变量配错了,用下面这个命令重新把profile这个文件改过来
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin*

5、生效环境变量

source /etc/profile

6、查看配置是否成功

java -version

出现以下代表配置完毕

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
二、部署es(已安装可跳过)

es下载地址

一样的步骤,自行创建一个文件夹用于放置下载的es文件

1、解压es

tar -zxvf elasticsearch-6.4.3.tar.gz

2、切换用户(es不能使用root用户启动,不然会报错)

groupadd es
useradd es -g es -p 123456
su - es

3、授权刚解压的es文件夹

chown -R es:es /xxx/es/elasticsearch-6.4.3

4、配置elasticsearch.yml(在config目录下)
在配置文件的底部加入以下两行,用于设置ip及端口

network.host: 0.0.0.0
http.port: 9200

5、启动es

./elasticsearch-6.4.3/bin/elasticsearch -d

6、配置密码

在elasticsearch.yml添加以下几行
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
然后重启es
使用./elasticsearch-setup-passwords interactive 设置密码

8、创建、查询索引

这里只简单讲解,详细可查看大佬的https://blog.csdn.net/sss294438204/article/details/122884953
注意:因为我们配置了密码,所以后续的操作都要带上es的账号密码才可进行

a)创建索引

curl -X PUT   "http://0.0.0.0:9200/test3" -u elastic:123456
出现{"acknowledged":true,"shards_acknowledged":true,"index":"test3"}代表创建成功

b)查询索引

curl -X GET "http://0.0.0.0:9200/test3/_search" -u elastic:123456
返回:
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

c)给索引加文档

我这里版本不支持 _ + name的类型 所以创建一个doc类型的id为1111的文档

curl -X PUT "http://0.0.0.0:9200/test3/doc/1111" -H 'Content-Type: application/json' -d '{"aaa":"asd","name":"as"}' -u elastic:123456
返回:
{"_index":"test3","_type":"doc","_id":"1111","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
再次查询:
curl -X GET "http://0.0.0.0:9200/test3/_search" -u elastic:123456
返回:
{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"test3","_type":"doc","_id":"1111","_score":1.0,"_source":{"aaa":"asd","name":"as"}}]}}
可以看到数据已经写进去了,那我们测试数据准备完毕
三、使用Jmeter编写es脚本

因为es是暴露了restful api,所以可以直接用Jmeter的http请求来进行编写

只需要填写这些参数就可以了(ip地址就写es机器所在地址),是不是很简单!入参如果有查询条件再写,没有的话就不用写,也可以跟在路径后面,毕竟是get的嘛


成功返回
在这里插入图片描述

这里需要注意的是,这是在es还没有账户密码的情况下调用的,而我们现在设置了账户密码,那自然需要加上用户密码进行访问,与curl的-u会有所不同!

Jmeter添加es账户密码方式:

1、需要添加HTTP信息头管理器,添加Authorization字段,值为base64加密值,值需要为“Basic +加密值”
在这里插入图片描述

2、加密值通过beanshell的方式来取(也可以写个jar包,通过java请求),在HTTP信息头管理器前面加上BeanShell 预处理程序,代码如下:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

String name = "elastic";

String password = "123456";

String basebase = name + ":" + password;

log.info("auth string: " + basebase);

//Base64编码
Base64.Encoder encoder = Base64.getEncoder();

String s = encoder.encodeToString(basebase.getBytes(StandardCharsets.UTF_8));

log.info("______________________________________________________");
log.info("s="+s);

vars.put("userpasswd",s)

至此,全部设置完毕,可进行配置线程进行压测啦!

四、遇到的问题

es启动日志默认在安装包目录下的logs文件夹的elasticsearch.log,可看到es启动情况

a)es启动出现如下报错在这里插入图片描
启动没多久后ps -ef | grep ela 发现没有es的进程了,发现es被自动关闭了!

因为es索引文件是映射到虚拟内存空间的,只有当访问索引的时候,才会从磁盘读到物理内存里(提高查询速度),这里看到es需要的最低虚拟内存空间是252144,而我这只有65530,所以导致es报错无法启动

解决办法:使用root 临时修改sysctl -w vm.max_map_count=262144
永久修改:echo vm.max_map_count=262144>>/etc/sysctl.conf sysctl -p

b)es配置密码时出现以下报错

Unexpected response code [403] from calling GET http://xxx:9200/_xpack/security/_authenticate?pretty
It doesn't look like the X-Pack security feature is available on this Elasticsearch node.
Please check if you have installed a license that allows access to X-Pack Security feature.

原因是没开启X-pack安全

解决办法:curl -H "Content-Type:application/json" -XPOST  http://localhost:9200/_xpack/license/start_trial?acknowledge=true
再使用./elasticsearch-setup-passwords interactive 设置密码

c)curl、Jmeter未加用户密码访问报错

如果es配置了账户密码,但是在进行操作es时没有加上用户密码就会报以下的错
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/test3/_create/1111]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/test3/_create/1111]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:Jmeter之es压测---从部署环境开始-创新互联
文章链接:http://myzitong.com/article/ceoegj.html