【JMeter】基于Docker分布式集群部署

0. 环境说明

基于Docker Swarm 部署,Jmeter分布式压测集群。

本次实验采用三台4C8G主机。其中一台控制机,两台工作节点。控制机也能产生压力测试。

1. 初始化Swarm集群

1.1 每台主机重命名

# 三台节点配置主机名,之后重启 jmm jms01 jms02 jms03
hostnamectl set-hostname jmm

1.2 配置防火墙

Jmeter相关端口:1099,2377,4098,4789,7946

systemctl start firewalld

# 管理端口
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=1099/tcp --permanent

# 节点间通信端口
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent

# overlay 网络端口
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --zone=public --add-port=4098/udp --permanent

firewall-cmd --reload

1.3 初始化主节点

# 主节点IP
MIP=$(hostname -I | awk -F " " '{printf $1}')
docker swarm init --advertise-addr $MIP > /root/swarminfo.txt

# 查看集群节点状态
docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
hr0vjp2rw76glzd53bqa2fiod *   jmm        Ready     Active         Leader           24.0.7

# 生成token
docker swarm join-token manager

1.4 两个从节点加入主节点

# 从节点执行主节点的注册信息,注册到主节点
docker swarm join --token xxxxxxxxx 10.168.2.93:2377

1.5 至此集群搭建完成

$ docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
hr0vjp2rw76glzd53bqa2fiod *   jmm        Ready     Active         Leader           24.0.7
766y5boetlnow84uz227e0bef     jms01      Ready     Active         Reachable        24.0.7
y2b1i3cb0yi2dep1syl9qzxtd     jms02      Ready     Active         Reachable        24.0.7

2. 配置Swarm集群网络

2.1 创建专门的Overlay网络,用来跑Jmeter容器服务。

# 创建压测专用网络,一定要加上attachable  属性,否则会报 XXX错误
docker network create --driver overlay  --attachable swarmnet

2.2 测试刚才的网络,查看跨主机使用Overlay网络能否互通。

在jmm节点和jms01节点上,使用Overlay创建容器互ping。

经测试可以互ping,也能访问外部网络。

# Jmm节点
docker run -itd --name=bb1 --network=swarmnet busybox /bin/sh

# Jms01节点
docker run -itd --name=bb2 --network=swarmnet busybox /bin/sh

# 部署后查看分配的Overlay网络IP
docker network inspect swarmnet | grep -A5 "bb2" | grep 'IPv4'
                "IPv4Address": "10.0.2.4/24",

# 在Jmm上,ping Jms01中的bb2内网IP,可以ping通
$ docker exec -it bb1 ping -w 5 -c 3 10.0.2.4
PING 10.0.2.4 (10.0.2.4): 56 data bytes
64 bytes from 10.0.2.4: seq=0 ttl=64 time=0.626 ms
...
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.375/0.492/0.626 ms

# 同样在Jmm上,ping Jms01中的bb2主机名,也可以ping通
$ docker exec -it bb1 ping -w 5 -c 3 bb2
PING bb2 (10.0.2.4): 56 data bytes
64 bytes from 10.0.2.4: seq=0 ttl=64 time=0.321 ms
...
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.321/0.382/0.423 ms

# 在Jmm上,ping外网网络,也可以ping通。
docker exec -it bb1 ping -w 5 -c 3 www.baidu.com
PING www.baidu.com (110.242.68.3): 56 data bytes
64 bytes from 110.242.68.3: seq=0 ttl=52 time=11.813 ms
...
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 11.813/12.389/12.879 ms

3. 搭建Jmeter分布式集群

3.1 等待所有工作节点都正常以后,在创建Jmeter服务,创建过程大概需要5分钟。

docker stack deploy -c jmeter.yml jmeter

3.2 在创建过程中,监控节点中的进度。

$ watch -n1 'docker ps -a'
CONTAINER ID   IMAGE   COMMAND                    CREATED          STATUS          PORTS      NAMES
f51b6ae69ef9   jmeter-slave:orcaljdk17-jmeter5.5-graphs-plugins-release   "/
bin/sh -c \"jmeter-…"   15 seconds ago   Up 14 seconds   1109/tcp   jmeter_jmeter-slave01.766y5boetlnow84uz227e0bef.whqzyxl2
r6yzcncot7kmrxt0q

3.3 等待所有节点状态都是Running

# 查看集群服务,如果是 Preparing 需要等待一段时间
$ docker stack ps jmeter
ID             NAME                                              IMAGE                                                                                                       NODE      DESIRED STATE   CURRENT STATE                ERROR     PORTS
mc7oz73egjb4   jmeter_jmeter-master.hr0vjp2rw76glzd53bqa2fiod    jmeter-master:orcaljdk17-jmeter5.5-graphs-plugins-release   jmm       Running         Running 2 minutes ago                  
whqzyxl2r6yz   jmeter_jmeter-slave01.766y5boetlnow84uz227e0bef   jmeter-slave:orcaljdk17-jmeter5.5-graphs-plugins-release    jms01     Running         Running about a minute ago             
xx2l1nvev3s9   jmeter_jmeter-slave02.y2b1i3cb0yi2dep1syl9qzxtd   jmeter-slave:orcaljdk17-jmeter5.5-graphs-plugins-release    jms02     Running         Running 17 seconds ago  

4. 执行压测

4.1 查看Jmm节点ID

$ docker ps -a
CONTAINER ID   IMAGE                                                                                                       COMMAND                    CREATED          STATUS          PORTS      NAMES
7659b125f6f8   jmeter-master:orcaljdk17-jmeter5.5-graphs-plugins-release   "/bin/sh -c \"jmeter-…"   3 minutes ago    Up 3 minutes    1109/tcp   jmeter_jmeter-master.hr0vjp2rw76glzd53bqa2fiod.mc7oz73egjb4odnb2965x36jc

4.2 根据不同的压测场景执行压测过程

# 清除结果集
rm -rf /var/lib/docker/volumes/jmeter_jmeter-master/_data/$CASE

# 
CID=`docker ps -a | grep jmeter-master | awk '{print $1}'`

# 开启运行
docker exec $CID jmeter -n \
-t /usr/local/jmeter/apache-jmeter-5.5/work_space/$CASE.jmx \
-r -l /usr/local/jmeter/apache-jmeter-5.5/work_space/$CASE/result.jtl \
-e -o /usr/local/jmeter/apache-jmeter-5.5/work_space/$CASE/

5. 结果收集与展示

5.1 搭建Web报告界面

主节点上部署nginx服务,用于展示压测结果

# 在主节点上执行
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

docker run  -itd -p 80:80 \
--name nginx \
-v /var/lib/docker/volumes/jmeter_jmeter-master/_data:/usr/share/nginx/html \
nginx

5.2 访问相应的Url地址查看报告结果

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建Jmeter分布式压测集群,您需要按照以下步骤进行配置: 1. 下载Jmeter安装包,并在所有机器上进行安装。 2. 配置调度机: a. 启动Jmeter-server.bat文件。 b. 在控制机上编写完测试脚本后,点击运行。 c. 确保调度机和执行机在同一局域网中。 3. 配置执行机: a. 打开Jmeter的安装目录中的bin目录下的Jmeter.properties文件。 b. 找到remote_hosts配置项,将其修改为执行机的IP地址和端口号。 c. 启动Jmeter-server.bat文件。 4. 执行压力测试: a. 在控制机上启动jmeter.bat文件。 b. 打开测试计划,配置相关参数,如请求的URL、线程数、持续时间等。 c. 运行测试计划。 这样,您就成功搭建了Jmeter分布式压测集群,多台机器将同时发起请求,以实现更高的并发量和负载测试能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Jmeter搭建分布式集群压测实战](https://blog.csdn.net/tiantianquan51/article/details/130576373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [linux下Jmeter分布式压测](https://download.csdn.net/download/weixin_38695159/14053948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值