分布式测试概述
现在我们来了解如何使用多台机器来执行压力测试,也就是所谓的分布式测试。当我们模拟大量的并发虚拟用户时,比如我们要起10万、100万甚至更多的并发用户时,一台负载机器可能就满足不了我们需要的用户量。此时,就需要使用多台主机搭建一套多节点的分布式性能测试环境,使得我们可以执行大规模并发测试。这是执行分布式性能测试的基本原因。当然可能还有其他一些场景,比如我们可以建立一套测试云平台,也需要搭建分布式测试环境,来满足多租户需求。
在搭建JMeter分布式测试环境和利用该环境执行性能或压力测试时,首次需要执行的操作包括:
- 准备测试环境,主要是准备用于运行JMeter进程的机器,可以是Windows机器,也可以是Unix类机器包括Linux操作系统的机器。包括安装部署JMeter及依赖的Java环境。第一次准备之后,后面的测试就可以复用这些环境了
- 设置分布式环境没台机器上的JMeter节点的配置
- 准备要运行的测试脚本。可在JMeter的GUI界面上,先编好测试计划,然后下载到分布式环境中的主控制节点上。此处要主次使用的JMeter的版本要匹配,否则可能产生莫名错误
- 启动分布式测试
- 查看和分析测试结果
- 可能需要进行一些问题处理或服务器调优。如果压力不够,可能还需要增加机器,此时可以参考步骤1中的操作了
准备测试环境
和其他分布式系统类似,使用JMeter搭建分布式测试系统,结构也基本是一主多从的架构,包括一台主控制节点,多个工作节点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeEBtme2-1631887093763)(./imgs/distributed-names.svg)]
在开始执行分布式测试之前,首先要准备负载机器。作为实践案例,我们使用三台Linux机器构建一个分布式测试环境,构建一主二从的结构。在执行测试时,由JMeter 主控制器节点(主节点)在多个工作节点(从节点)上启动测试。使用ifconfig
命令查看机器的ip地址,记录IP地址备用。本例使用的三台机器ip地址分别为
192.168.1.180、192.168.1.181、192.168.1.182,其中将192.168.1.180作为主节点。
首先对三台服务器执行下述检查:
- 系统上的防火墙已关闭或打开了正确的端口。在实验环境下,可以关闭防火墙;在正式的测试环境下,建议不要关闭防火墙,打开相关的端口即可
- 所有负载机器都在同一个子网上,确保可以互通
- 确保三台负载机可以访问被测服务器
- 确保在所有系统上使用相同版本的 JMeter 和 Java。混合版本将无法正常工作
- 已经为 RMI 设置了 SSL或禁用SSL。参考远程测试。
设置分布式环境
设置主控节点
完成上述测试环境准备和检查工作后,需要在主节点上进行如下设置。主控节点有时成为client节点,因为相对工作节点来说,它就是一个client,而工作节点是server节点。
在作为控制台的控制器节点(192.168.1.180)上,在jmeter/bin目录打开jmeter.properties进行编辑。
首先找到remote_hosts,设置为remote_hosts=192.168.1.181,192.168.1.182
,其次,设置client.rmi.localport的值,表示控制节点将使用这个指定的端口与工作节点通信。其他设置使用默认值。
remote_hosts=192.168.1.18