Ответ 1
У нас была аналогичная задача, и мы столкнулись с кучей вопросов. Ниже приведены детали всего процесса и то, что мы сделали для решения проблем, с которыми мы столкнулись. Надеюсь, что это поможет.
Нам нужно было отправлять запросы с 5 серверов, расположенных в разных регионах мира. Таким образом, мы выпустили 5 микроуровней в AWS, каждый в другом регионе. Мы выбрали регионы как можно более географически.
Удаленная (серверная) конфигурация 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 клиента, чтобы он запускал тесты на всех или всех наших указанных удаленных серверах.
Проблемы и разрешения
Вот проблемы, с которыми мы столкнулись, и способы их решения:
-
Сбой клиента с помощью
ERROR - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: Connection - отказался от хоста: 127.0.0.1
Это произошло из-за того, что хост сервера возвратил частный IP-адрес в качестве своего адреса из-за Amazon NAT. Мы исправили это, установив параметр
RMI_HOST_DEF
, что/usr/local/jmeter/bin/jmeter-server
script включает в себя запуск сервера:RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
Теперь экземпляр AWS вернул серверу внешний IP-адрес, и мы могли бы запустить тест.
-
Когда сервер node попытался вернуть результат и попытался подключиться к клиенту, сервер попытался подключиться к внешнему IP-адресу моей локальной машины. Но он отказался от отказа отказался:
2013/05/16 12:23:37 ERROR - jmeter.samplers.RemoteListenerWrapper: testStarted (host) 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]
Мы открыли каждую из этих сессий, так как сервер JMeter должен иметь возможность доставлять результаты теста клиенту.
-
Затем мы настраиваем переменную среды
JVM_ARGS
на клиенте в файлеjmeter.sh
в папке/bin
:export JVM_ARGS="-Djava.rmi.server.hostname=localhost"
Посредством этого 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]
(.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
после настройки.
)