我必须使用 JMeter 进行分布式测试。目标是让 AWS 中由一台本地服务器控制的多台远程服务器向 AWS 中的另一台服务器发送文件下载请求。
如何在AWS中设置不同的服务器?
我如何远程连接到他们?
有人可以提供一些有关如何操作的分步说明吗?
我已经尝试了几种方法,但不断遇到网络连接问题。
我们有类似的任务,也遇到了很多问题。以下是整个过程的详细信息以及我们为解决遇到的问题所做的工作。希望能帮助到你。
我们需要从位于世界不同地区的 5 台服务器发送请求。因此,我们在 AWS 中启动了 5 个微型实例,每个实例位于不同的区域。我们选择的区域在地理上尽可能分开。
远程(服务器)JMeters 配置
以下是我们如何设置每个实例。
-
安装的java:
$ sudo apt-get update
$ sudo apt-get install default-jre
-
安装的JMeter:
$ mkdir jmeter
$ cd jmeter;
$ wget ftp://apache.mirrors.pair.com//jmeter/binaries/apache-jmeter-2.9.tgz
$ gunzip apache-jmeter-2.9.tgz;tar xvf apache-jmeter-2.9.tar
-
编辑了jmeter.properties
文件在/bin
JMeter 安装的文件夹并取消注释包含以下内容的行server.rmi.localport
环境。我们将端口更改为50000。
server.rmi.localport=50000
-
启动 JMeter 服务器。确保服务器报告侦听的地址和端口正确。
$ cd ~/jmeter/apache-jmeter-2.9/bin
$ vi jmeter-server
本地(客户端)JMeter 配置
然后我们设置 JMeter 在本地客户端计算机上的这些实例上远程运行测试:
- 确保使用与服务器上运行的 JMeter 版本相同的版本。如上所述安装 Java 和 JMeter。
- 通过编辑启用远程测试
jmeter.properties
可以在以下位置找到的文件bin
JMeter 安装的文件夹。参数remote_hosts
需要使用我们连接的远程服务器的公共 DNS 进行设置。
remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x
现在,我们可以告诉客户端 JMeter 实例在任何或所有指定的远程服务器上运行测试。
问题和解决方案
以下是我们遇到的问题以及解决方法:
-
客户端失败并显示:
错误 - jmeter.engine.ClientJMeterEngine:java.rmi.ConnectException:连接 - 拒绝主机:127.0.0.1
这是因为由于 Amazon NAT,服务器主机返回私有 IP 地址作为其地址。
我们通过设置参数解决了这个问题RMI_HOST_DEF
认为/usr/local/jmeter/bin/jmeter-server
脚本包括启动服务器:
RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
现在,AWS实例返回了服务器的外部IP,我们可以开始测试了。
-
当服务器节点尝试返回结果并尝试连接客户端时,服务器尝试连接我本地机器的外部IP地址。但它引发了连接拒绝错误:
2013/05/16 12:23:37 错误 - jmeter.samplers.RemoteListenerWrapper:testStarted(主机)java.rmi.ConnectException:连接拒绝主机:xxx.xxx.xxx.xx;
我们通过在客户端设置反向隧道解决了这个问题。
-
首先,我们编辑了jmeter.properties
文件在/bin
JMeter 安装的文件夹并取消注释包含以下内容的行client.rmi.localport
环境。我们将端口更改为60000:
client.rmi.localport=60000
-
然后我们使用 SSH 连接到每台服务器,并在客户端上设置到端口 60000 的反向隧道。
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 [email protected] /cdn-cgi/l/email-protection
我们保持每个会话打开,因为 JMeter 服务器需要能够将测试结果传递给客户端。
通过这样做,JMeter 将告诉服务器连接到localhost:60000
交付他们的成果。这最终会通过隧道返回给客户端。
-
闲置一段时间后,与服务器的 SSH 连接不断断开。为了防止这种情况发生,我们向每个设置的 SSH 隧道添加了一个参数,指示客户端在向服务器发送空数据包以保持连接活动之前等待 60 秒:
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 [email protected] /cdn-cgi/l/email-protection
(.ssh/config
所有必需的 SSH 设置的版本:
Host 54.x.x.x
HostName 54.x.x.x
Port 22
User ubuntu
ServerAliveInterval 60
RemoteForward 127.0.0.1:60000 127.0.0.1:60000
IdentityFile ~/.ssh/54-x-x-x.us-east.pem
IdentitiesOnly yes
只需使用ssh 54.x.x.x
设置完后。
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)