Jmeter分布式
配置说明:
- Master 主机 IP - 192.168.75.142,操作系统为 Windows
- Slave1 主机 IP - 192.168.75.140,操作系统为 Centos7
- Slave1 主机 IP - 192.168.75.141,操作系统为 Centos7
以下所有操作默认你已经安装并配置好 JMeter 运行环境
安装程序
如果已经安装 Java JDK 和 JMeter 可跳过此安装程序阶段
安装Java JDK
卸载本地 java 环境
- 首先,使用 rpm 命令查询 Java 的软件包名称和版本
rpm -qa | grep java
- 从系统中卸载 Java,使用 yum remove 命令,指定要删除的 Java 软件包名称,例如:
sudo yum remove java-1.8.0-openjdk
注意
:如果您手动安装了 Java,则可以通过删除 Java 安装目录中的文件和目录来卸载 Java。但是,由于安装方式可能不同,因此可能需要不同的步骤来卸载手动安装的 Java。
以下使用 tar.gz 包手动安装 Java JDK
- 下载适用于Linux的Java JDK tar.gz包,这里使用的是华为镜像https://repo.huaweicloud.com/java/jdk/
- 在终端中转到您下载Java JDK tar.gz包的目录,并使用以下命令解压缩该文件:
wget https://repo.huaweicloud.com/java/jdk/11+28/jdk-11_linux-x64_bin.tar.gz
tar -zxvf jdk-xxx-linux-x64.tar.gz
- 将解压缩的文件夹移动到 /usr/local 目录下:
sudo mv jdk-xxx /usr/local/
- 配置Java环境变量。打开 vim /etc/profile 文件并添加以下行:
export JAVA_HOME=/usr/local/jdk-xxx
export PATH=$JAVA_HOME/bin:$PATH
- 在终端中运行以下命令以重新加载 profile 文件:
source /etc/profile
- 检查Java安装是否成功。在终端中输入以下命令:
java -version
如果Java已成功安装,则会显示Java版本信息。
Slave 主机配置(Server)
以下配置和运行使用的是 Slave1 主机,Slave2 主机配置雷同,需要注意 IP
。
网络配置
开启防火墙时端口配置
在 JMeter 分布式环境中,需要打开以下端口:
- RMI 注册表端口:默认为 1099,可以在 jmeter.properties 文件中进行更改。
- RMI 服务器通信端口:默认为随机端口,可以在 jmeter.properties 文件中进行更改。
- JMeter 服务器节点之间的通信端口:默认为 4000,可以在 jmeter.properties 文件中进行更改,${service.rmi.localport=4000}。
- 4444端口:用于Master和Slave之间的命令传输和控制信息传输,例如启动测试、停止测试等操作。
- 4445端口:用于Master向Slave发送测试脚本和数据文件。
- 4446端口:用于Slave向Master发送测试结果和日志文件。
请注意,这些端口是默认端口,如果您在 jmeter.properties 文件中更改了这些端口,则需要相应地打开新端口。此外,如果您在防火墙中启用了防火墙,则还需要允许这些端口通过防火墙。
操作指令
# 1. 打开防火墙
sudo systemctl start firewalld
# 2. 添加防火墙规则
sudo firewall-cmd --add-port=1099/tcp --permanent
sudo firewall-cmd --add-port=60000/tcp --permanent
sudo firewall-cmd --add-port=4444/tcp --permanent
sudo firewall-cmd --add-port=4445/tcp --permanent
sudo firewall-cmd --add-port=4446/tcp --permanent
# 这将在防火墙中添加永久规则,允许 TCP 流量通过这些端口。
# 在运行指令中会讲到这个端口的作用
# 3. 重新加载防火墙配置
sudo firewall-cmd --reload
# 4. 验证端口是否已打开
sudo firewall-cmd --list-ports
关闭防火墙
关闭防火墙后端口配置就简单的多了,但是安全风险也随之增减,不建议在生产环境关闭防火墙。
systemctl stop firewalld.service # 关闭防火墙
运行指令
在 Slave1 主机启动 Server
jmeter-server -Djava.rmi.server.hostname=192.168.75.140 -Dserver_port=1099 -Dserver.rmi.localport=60000
# 指令说明
-Djava.rmi.server.hostname:当前主机使用的IP,多网卡时需要指定此参数
-Dserver_port:Slave 主机与 Master 主机的监听端口
-Dserver.rmi.localport:服务端端口号,Slave 主机接收到 Master 主机的任务后通过此端口进行通信,如果不配置此参数端口号是随机的,这里使用 60000 因为前面防火墙开启的是 6000 端口。
Master 主机配置
端口配置
在 JMeter 分布式测试环境中,JMeter Master 主机需要使用以下端口:
- RMI 注册端口 - JMeter Master 通过 RMI 注册端口监听 JMeter Server 的注册请求,通常为默认端口 1099。你可以在 jmeter.properties 文件中配置一个不同的端口号。
- JMeter Server 端口 - JMeter Master 通过此端口向 JMeter Server 发送请求。默认端口号为 4445,你也可以在 jmeter.properties 文件中配置一个不同的端口号。
- 控制台 Web 端口 - 该端口用于在 JMeter Master 主机上运行的 JMeter 控制台。默认端口为 8080,你可以在 jmeter.properties 文件中配置一个不同的端口号。
如果在 JMeter Master 主机上启用了防火墙,则需要打开上述端口,以允许来自 JMeter Server 和 JMeter 客户端的流量通过。你可以使用以下命令向防火墙添加相应的规则:
# 1. 打开防火墙
sudo systemctl start firewalld
# 2. 添加防火墙规则
sudo firewall-cmd --zone=public --add-port=1099/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4445/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 3. 重新加载防火墙配置
sudo firewall-cmd --reload
# 4. 验证端口是否已打开
sudo firewall-cmd --list-ports
添加远程节点
在 Master 主机中添加 Slave1 和 Slave2 远程节点。
Master 端配置 remote_host 时在 jmeter.properties 中完成
# filePath: apache-jmeter-x.x\bin\jmeter.properties
#remote_hosts=127.0.0.1
remote_hosts=192.168.75.140:1099,192.168.75.141:1099
如果 Slave 端口有变化,IP 地址后就需要带上端口号,默认为 1099,此处可以使用域名或主机名代替,只要能够在网络中确定主机地址即可。
配置 SSL (可忽略)
%JMETER_HOME%/bin/目录下有create-rmi-keystore.bat、
create-rmi-keystore.sh两个文件,分别是Windows与Linux下生成密
钥及证书的脚本。本例在Master机器执行此脚本。
上述代码清单是本例生成证书的交互过程,其中first and last name
必须是rmi
,password
必须是changit,否则,就需要去修改
jmeter.properties文件有关SSL的配置。如果仅是用于内网测试,沿
用默认配置是最方便的。
当Master主机上配置成功后会输出以下语句:
Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file
按照提示将 Master主机中的 jmeter/bin/rmi_keystore.jks 文件复制到 Slave 主机的 jmeter/bin 目录下。
在 Master 端执行
GUI 运行
注意:在 jmeter.properties 文件完成 remote_hosts 配置后需要重启 JMeter 才会显示可以远程运行的 Slave 主机。
非 GUI 运行
在非 GUI 运行模式下可以不用配置 jmeter.properties 文件中的 remote_host ,在执行时使用 -R 参数指定 Slave 机器。
jmeter -n -t <脚本.jmx> -R <Slave1IP>, <Slave2IP>
测试监听
非GUI方式运行JMeter来制造负载时,对于测试结果的监听是十分简陋的,仅仅是在控制台打印,或者存到文件,并不能实时地监控到结果,这种状况当然是不能忍的。近年来,时序数据库崛起,辅以Dashboard工具,它们能够高效地对监控数据进行展示。例如,Prometheus+Grafana的组合在原生云的监控中占据大的份额,JMeter的测试结果可以利用Influx+Grafana的组合来监控。
安装 Docker 环境
Doument: https://docs.docker.com/engine/install/centos/
安装 influxdb 和 grafana
通过 Docker 的方式搭建 InfluxDB 和 Grafana 环境的步骤如下:
- 安装 Docker 和 Docker Compose
确保你的系统已经安装了 Docker 和 Docker Compose。你可以参考 Docker 的官方文档进行安装。
- 创建 Docker Compose 配置文件
在本地创建一个名为 docker-compose.yml 的 Docker Compose 配置文件,并将以下内容复制进去:
version: '3'
services:
influxdb:
image: influxdb
ports:
- "8086:8086"
environment:
- INFLUXDB_DB=mydb
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=admin
- INFLUXDB_USER=myuser
- INFLUXDB_USER_PASSWORD=mypassword
- INFLUXDB_BUCKET=my-bucket
volumes:
- influxdb:/var/lib/influxdb
grafana:
image: grafana/grafana
ports:
- "3000:3000"
depends_on:
- influxdb
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
volumes:
influxdb:
这个配置文件定义了两个服务:InfluxDB 和 Grafana。其中 InfluxDB 使用 influxdb 镜像,Grafana 使用 grafana/grafana 镜像。
- 启动 Docker Compose
在本地的命令行中进入配置文件所在的目录,然后执行以下命令启动 Docker Compose:
docker-compose up -d
这个命令会启动 Docker Compose,并且将所有的容器在后台运行。
- 访问 Grafana 界面
在浏览器中访问 http://<服务器IP地址>:3000/
,即可进入 Grafana 的登录界面。默认用户名和密码都是 admin。
在浏览器中访问 http://<服务器IP地址>:8086/
,即可进入 Influx 的登录界面。需要配置用户和用户密码。
配置 InfluxDB
参考:https://qainsights.com/jmeter-integration-with-influxdb-2-0/
- 创建用户
- 获取 需要的令牌
- LOAD YOUR DATA >> API TOKENS >> GENERATE API TOKEN >> All Access Token
- 输入 token 名称 >> SAVE
- 复制 token
一定要记住 重要
- Jmeter 设置
- 启动 JMeter,并打开您将要执行的测试计划。通过右键单击Thread Group > Add > Listener > Backend Listener 添加后端侦听器。
- 配置后端监听器
- 查看数据库结构
配置 Grafana
在 Grafana 中添加 InfluxDB 数据源,并创建 Dashboard。
账户名和密码默认为:admin
- 添加 influx 数据库
- 配置数据库信息并验证
- 查看仪表盘