Подтвердить что ты не робот

Настройка JMeter для распределенного тестирования в AWS с проблемами подключения

Мне нужно распределенное тестирование с использованием JMeter. Цель состоит в том, чтобы несколько удаленных серверов в AWS, управляемых одним локальным сервером, отправляли запрос на загрузку файла на другой сервер в AWS.

Как настроить различные серверы в AWS?
Как я могу подключиться к ним удаленно?

Может ли кто-нибудь предоставить некоторые пошаговые инструкции о том, как это сделать?
Я пробовал несколько вещей, но постоянно сталкивался с проблемами подключения в сетях.

4b9b3361

Ответ 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 после настройки. )

Ответ 2

Я только что пошёл на openstack и нашел те же проблемы... не знаю, почему документация по удалению jmeter охватывает только половину необходимых шагов. Вы можете сделать это без туннелей или касаться файлов свойств.

Вам нужно

  • Все узлы для рекламы своего общедоступного IP - на AWS/OS по умолчанию используется частный IP
  • Правила входа для порта RMI, который по умолчанию равен 1099. Я использую этот
  • Правила входа для локального порта RMI, который по умолчанию имеет динамический характер. Ниже я использую 4001 для клиента и 4000 для серверов. Порт может быть одним и тем же, но обратите внимание, что свойства разные.

Если вы используете свою рабочую станцию ​​в качестве клиента, вам, вероятно, все еще нужны туннели. Над Archana Aggarwal есть хорошие советы для туннелей.

Удаленные серверы

Установите java.rmi.server.hostname и server.rmi.localport в строку или в файл свойств.

jmeter-server -Djava.rmi.server.hostname=publicip -Dserver.rmi.localport=4000

Sneaky server on client

Вы также можете запустить его на том же компьютере, что и клиент. Для ясности я установил java.rmi.server.hostname, но оставил server.rmi.localport динамическим

jmeter-server -Djava.rmi.server.hostname=localip

Client

Установите java.rmi.server.hostname и client.rmi.localport в строку или в файл свойств. Используйте -R и т.д. Так:

jmeter -n -t Test.jmx -Rremotepublicip1,remotepublicip2 -Djava.rmi.server.hostname=clientpublicip -Dclient.rmi.localport=4001 -GmypropA=1 -GmypropB=2 -lresults.jtl

Ответ 3

Когда вы отправляетесь на распределенное тестирование с использованием JMeter в AWS, я предлагаю вам использовать докер, что очень быстро поможет нам в тестировании инфраструктуры jmeter. Таким образом, мы также можем гарантировать, что одна и та же версия java и jmeter установлены во всех экземплярах amazon, что очень важно для распределенного тестирования JMeter.

Убедитесь, что - вы установили ниже свойства и порты открыты для jmeter-сервера. [они не должны быть 10995000000 точно]

server.rmi.localport=50000
server_port=1099
java.rmi.server.hostname=SERVER_IP

для клиента

client.rmi.localport=60000

введите описание изображения здесь

java.rmi.server.hostname = SERVER_IP - этот шаг очень важен, поскольку контейнер в aws-экземпляре будет иметь свой собственный IP-адрес в сети докеров, поэтому мастер и ведомый не могут общаться. Поэтому мы явно задаем это свойство

Дополнительная информация:

http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker-in-aws/