构建用于JMeter分布式性能测试测试基础结构不是一件容易的事!前面已经介绍了Docker可以帮助我们建立基础架构。
JMeter:使用Docker进行分布式负载测试
JMeter:在AWS中使用Docker进行分布式负载测试
在进行实际性能测试时,我们可能会使用自己的服务器或云,例如AWS-EC2。尽管Docker帮助我们使用JMeter + Java等创建了容器,但是多主机联网并不是一件容易的事!
这里查看如何使用RancherOS + Rancher服务:RancherOS + Rancher Server
Rancher/OS:
RancherOS使在开发、测试和生产中大规模运行容器变得简单,并且只包含运行Docker所需的服务,操作系统提供了一个非常可靠且易于管理的容器环境。不需要的库和服务被淘汰,并默认运行最新版本的Docker,从而大大减少了占用空间,并减少了更新、打补丁和维护容器主机操作系统的麻烦。RancherOS上的容器在几秒内可启动,使得团队可以轻松快速地移动和扩展。
RancherOS是一个轻量级的操作系统,而Rancher是一个Docker容器管理平台,可在RancherOS或安装了docker的任何其他操作系统上运行。
RancherOS是一个轻量级OS + Rancher的docker-containers管理平台,它运行在RancherOS或安装了docker的任何其他OS上运行。
Rancher安装
- 由于我们将在AWS- ec2中创建其他所有容器,因此首先让我们在AWS中使用RancherOS创建一个实例。
- 不一定非要RancherOS,任何使用docker的系统都可以
- 也可以在AWS-EC2中创建Linux / Ubuntu实例并安装docker
- 也可以在本地计算机上完成此操作——但要确保机器与docker没有任何防火墙。
- 一旦你安装了docker / RancherOS的本地或者云系统,那么我们就需要docker-container管理平台,也就是Rancher服务器。
- 要启动Rancher服务器,请运行此命令。
sudo docker run -d –restart=unless-stopped -p 8080:8080 rancher/server
- 等待2-5分钟,然后访问:http://aws-or-local-ip-where-rancher-installed:8080
- 你将看到如下的样子:
AWS入站规则:
作为本文的一部分,我将使用AWS-EC2。你还可以使用任何VM /Cloud/物理机。
Rancher主使用某些端口与Rancher代理进行通信。请确保以下端口打开:
添加最后3个端口(1099,50000和60000)用于JMeter master与slave通信。
Rancher – 创建环境:
在Rancher UI中创建一个单独的环境——称之为jmeter-distributed-test环境。
Cattle是Rancher自己的容器编排模板,这是默认模板:
Rancher – 创建主机:
选择环境模板后,下一步就是创建主机。我选择了Amazon EC2。
- 输入访问和密钥 (Access & Secret keys)
- 选择区域 (Zone)
- 为所有机器选择相同的子网 (subnet )
- 选择安全组(已经在AWS中创建——请检查上方的入站规则)
- 选择数量(我选择了5个) (Quantity )
- 选择实例类型和AMI(我选择了Ubuntu微型实例)
- 一旦你点击create, Rancher会立即为你在EC2中创建实例,并在所有实例中设置docker。
所有主机准备就绪后,编辑其中一台将成为JMeter-Master的主机。
添加标签“ io.rancher.host.name = master”。
在接下来的内容中,你将知道为什么。
Rancher –创建堆栈:
堆栈只是运行我们的应用程序的一组服务,要运行我们的JMeter-distributed测试,我们需要两个服务。
1、master service,主服务(我们只需要一个主服务)
2、slave/server service,从属服务(我们需要N个从属节点,取决于需求)
- 创建一个堆栈,命名符合规范
- 在堆栈下创建一个master service主服务,如下所示,我们只需要一个容器,这里我将重用已经创建的docker-image——vinsdocker / jmmaster
- 公开端口60000,并且必须与主机端口60000映射
- 如果您点击“Create”按钮,Rancher将该容器中的一个主机——这将是随机的。 这是我们创建的标签将有用的地方。
- 转到服务的“Scheduling–调度”部分;添加一个特定的规则来选择具有你设置标签的主机。
- 当rancher在特定主机上创建jmeter-master容器时,我们可以创建slave/server服务。
- 除master外,所有主机中都需要jmeter-slaves。
- 使用docker映像:vinsdocker/jmserver
- 公开端口1099和50000
- 调度规则将在除主机之外的所有主机上运行。
- 创建完成后,我们可以看到1个主容器和4个从属容器。
Rancher 容器:
访问Rancher的容器部分,查看目前为止已创建的所有容器的列表,并包含名称和ip地址等详细信息。如下图,每个容器都在单独的主机上运行,这才是实际性能测试的正确设置。
JMeter -分布式测试:
- 可以点击主容器最右边的三个圆点,查看“Execute Shell”选项,以便直接在主容器上运行特定的命令。
- 我执行以下命令,进入JMeter的bin目录并下载示例测试。
cd /jmeter/apache-jmeter-2.13/bin
wget https://s3-us-west-2.amazonaws.com/dpd-q/jmeter/jmeter-docker-compose.jmx
- 一旦下载了测试,其余的就很简单了!
- 运行下面的命令来运行分布式测试。
- 从机名称为jmeter-server-1,jmeter-server-2,jmeter-server-3,jmeter-server-4
./jmeter -n -t jmeter-docker-compose.jmx -Rjmeter-server-1,jmeter-server-2,jmeter-server-3,jmeter-server-4
Rancher –导出服务配置:
第一次使用master主服务和slave从服务创建堆栈似乎有点麻烦!其实很简单。 Rancher还提供了导出此配置的选项——以便您可以在下一次导入/与他人共享。
下次你可以复制粘贴配置/导入文件,你也可以使用下面的配置,因为我已经导出。
总结
在此之前–设置此测试环境并非易事。我们需要确保所有机器上都安装相同版本的JMeter + Java + jmeter-plugins +其他依赖项。除此之外,我们还需要确保适当的端口是打开的。有时,由于Java RMI,你仍然会面临一个问题。
Rancher + Docker + EC2使我们的工作更轻松。一旦你上传了配置——一切设置完毕,所有容器在一分钟之内就可以运行测试了。
Rancher还公开了一组API以及CLI附带的内容,可通过编程方式完成所有工作!!