前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JMeter:在AWS中使用Docker进行分布式负载测试

JMeter:在AWS中使用Docker进行分布式负载测试

作者头像
软测小生
修改2020-05-13 15:52:07
1.5K0
修改2020-05-13 15:52:07
举报
文章被收录于专栏:软测小生软测小生
在之前的文章中,【JMeter:使用Docker

在本文中,将介绍如何在AWS中使用docker进行JMeter分布式负载测试。

创建AWS实例:

  • AWS中创建 3个 t2-micro 实例
    • Image Id:ami-d732f0b7
  • 添加了一个security group(安全组)

security group

  • 安装最新版本的docker, 参考详细安装过程:
代码语言:javascript
复制
#1. 更新实例上已安装的程序包和程序包缓存
sudo yum update -y
#2. 安装最新的Docker Community Edition程序包
sudo amazon-linux-extras install docker -y
#3. 启动Dockers服务
sudo service docker start
#4. 将ec2-user 添加到docker组,以便您能够执行Docker命令,而无需使用sudo
sudo usermod -a -G docker ec2-user
#5. 退出,再重新登陆以接受新的 docker 组权限。您可以关闭当前的 SSH 终端窗口并在新的终端窗口重新连接到实例,完成这一过程,您的 SSH 会话将具有相应的 docker 组权限。
#6. 验证ec2-user是否能在没有sudo的情况下运行Docker命令
docker info

创建docker-containers:

当我们的AWS实例启动并运行时,通过发出以下命令在每个主机上创建一个docker容器:

  • JMeter-Master:在其中一个实例中,运行以下命令:
代码语言:javascript
复制
sudo docker run -dit --name master vinsdocker/jmmaster /bin/bash
  • JMeter-Server/Slave:在其余实例中,我们将运行以下命令来创建jmeter-server容器:
代码语言:javascript
复制
sudo docker run -dit vinsdocker/jmserver /bin/bash

现在,已经为 jmeter-masterjmeter-server 准备好了docker容器,并且可以很好地运行所有依赖项。如果我们尝试查找这些容器的IP地址,它们的外观可能都相同–所有容器都为[172.17.0.1]。 因此,由于master无法识别网络中的slave,因此我们的jmeter测试在此设置中将不起作用。如果你还记得的话,我们将所有docker-container运行在同一主机上。当docker-engine在同一主机上为这些容器创建默认网络时,同一主机上的容器将能够使用容器的特定IP地址相互通信。

但是在此AWS中,设置如下图所示。 主机内部的master-containers(主容器)无法与其他主机上的slave-containers(从容器)进行对话——因为每个主机上的容器将位于各自独立的网络中,因此他们无法交流。

不同主机上的docker容器之间的通信将通过他们的Hosts进行路由。因此,可以通过使用端口映射和使用主机IP而不是容器来轻松修复它。 首先让我们运行下面的命令来停止和删除所有容器:

代码语言:javascript
复制
sudo docker stop $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q)

Port Mapping:(端口映射) 创建容器时,我们会将容器的公开端口映射到主机端口。因此,通过在映射端口上与主机对话,将与实际的容器通信。

java.rmi.server.hostname Property: 由于容器具有自己的IP地址,因此我们需要通过更新java.rmi.server.hostname使Jmeter通过主机ip进行通信。有关Java rmi属性的更多信息,请单击此处。

用于JMeter Client / Master的Dockerfile:

不需要任何更新。

用于JMeter Server/ Slave的Dockerfile:

它需要稍微修改一下,如下所示: 添加 -Djava.rmi.server.hostname=$LOCALIP while starting jmeter-server.sh. LOCALIP是一个变量,并且该值将在创建容器时在运行时传递。

使用以下命令,在每个主机上创建jmeter-server容器[master上除外] [注意:我使用了不同的docker映像-vinsdocker/jmawsserver]

代码语言:javascript
复制
sudo docker run -dit -e LOCALIP='52.10.0.2' -p 1099:1099 -p 50000:50000 vinsdocker/jmawsserver /bin/bash
sudo docker run -dit -e LOCALIP='52.10.0.3' -p 1099:1099 -p 50000:50000 vinsdocker/jmawsserver /bin/bash
sudo docker run -dit -e LOCALIP='52.10.0.4' -p 1099:1099 -p 50000:50000 vinsdocker/jmawsserver /bin/bash
  • LOCALIP——应该是主机的公共IP地址
  • -p 1099:1099 ——用于将容器的1099端口与主机端口1099映射
  • -p 50000:50000——用于将容器的1099端口与主机端口50000映射

在master主机上运行以下命令以创建jmeter master容器。

代码语言:javascript
复制
sudo docker run -dit --name master -p 60000:60000 vinsdocker/jmmaster /bin/bash
  • 将容器端口60000映射到主机端口60000。

创建所有容器后,配置如下图所示:

现在,可以通过发出以下命令在主容器(master container)中运行测试:

代码语言:javascript
复制
./jmeter -n -t docker-test.jmx -Djava.rmi.server.hostname=52.10.0.1 -Dclient.rmi.localport=60000 -R52.10.0.2,52.10.0.3
  • -Djava.rmi.server.hostname=52.10.0.1 -> 将jmeter-master IP公开给从属容器(slave containers)
  • -Dclient.rmi.localport=60000 -> 主机的监听端口(listening port of host)
  • -R52.10.0.2,52.10.0.3 -> 从属主机IP地址(Slaves host IP address)

总结

通过使用docker,我们无需担心是否在每个主机上都安装了相同版本的jmeter和java,docker将解决这一切。在单个主机上使用docker-container非常简单直接。 但是,当你在AWS中使用它时,为了使容器彼此通信,我们需要使用java.rmi.server.hostname属性和port mapping(端口映射)。只要做到这些,那么一切都会按预期进行。

在创建docker jmeter-server容器时,不使用LOCALIP变量,我们还可以使用下面的技术与从服务器通信:

  • ssh [port fowarding technique(端口转发技术)]
  • docker-multihost-network / docker swarm

我们将在下一篇文章中介绍如何使用上述技术。

JMeter:在Cloud中使用Docker+RancherOS进行分布式负载测试

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建AWS实例:
  • 创建docker-containers:
  • 用于JMeter Client / Master的Dockerfile:
  • 用于JMeter Server/ Slave的Dockerfile:
  • 总结
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档