Поиск по сайту:

Настройка кластера JMeter для нагрузочного тестирования веб-сервера


На этой странице

  1. 1. Как это работает
  2. 2. Этап установки
  3. 3. Фаза конфигурации
  4. 4. Этап тестирования

В этом руководстве показано, как настроить кластер JMeter для нагрузочных тестов. Как и все, кто этого еще не знает, приложение Apache JMeter — это программное обеспечение с открытым исходным кодом, на 100% чистое Java-приложение, предназначенное для тестирования функционального поведения и измерения производительности. Первоначально он был разработан для тестирования веб-приложений, но с тех пор расширился до других тестовых функций. Его можно использовать для имитации большой нагрузки на сервер, группу серверов, сеть или объект, для проверки их прочности или для анализа общей производительности при различных типах нагрузки.

Но по мере того, как каждый бизнес-подход становится все больше и больше, инженерам и тестировщикам необходимо проводить больше испытаний, чтобы убедиться, что каждый модуль расширения может обслуживать более крупных потребителей без ущерба для повседневных производственных операций. Чтобы гарантировать это, JMeter представил свои собственные сервисы, имея возможность тестировать тест производительности в более крупных средах, выполняя его как процесс кластеризации.

В случае, если ваш клиентский компьютер JMeter не может имитировать достаточное количество пользователей для загрузки вашего сервера или ограничен на сетевом уровне, вы можете управлять несколькими удаленными механизмами JMeter с одного клиента JMeter. Запустив JMeter удаленно, вы можете повторить тест на многих слабых компьютерах и имитировать большую нагрузку на сервер. Экземпляр клиента JMeter может управлять любым количеством удаленных экземпляров JMeter и собирать с них все данные.

Распределенное тестирование — это тип тестирования, при котором несколько систем используются для выполнения стресс-тестов. Распределенное тестирование используется для тестирования веб-сайтов и серверных приложений, когда они работают с несколькими клиентами одновременно.

1. Как это работает

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

Когда мы говорим о распространении JMeter, мы имеем в виду архитектуру Master-Slave, в которой JMeter использует Java RMI [удаленный вызов метода] для взаимодействия с объектами в распределенной сети. На рисунках ниже показан рабочий процесс:

Используя JMeter в кластерном дизайне, вы можете убедиться, что ваше тестирование позволяет иметь локальный JMeter (главный), который обрабатывает выполнение теста, вместе с несколькими удаленными экземплярами JMeter (подчиненными), которые будут отправлять запрос на ваш целевой сервер.

Подключиться к кластеру JMeter/сервису JMeter можно через:

  1. Настольное приложение JMeter
  2. SSH/терминал
  3. VNC
  4. Конечная точка службы API (WIP)



2. Этап установки

На этапе установки сначала хорошо перечислите перечень того, чем будет являться каждый сервер. Ниже приведены подробности:

System Inventory
IP Hostname OS Function Status
172.20.0.111 jmeter01 CentOS 7 x64 bit JMeter server 01 (master/slave) Ready
172.20.0.112 jmeter02 CentOS 7 x64 bit JMeter server 02 (slave) Ready
172.20.0.113 jmeter03 CentOS 7 x64 bit JMeter server 03 (slave) Ready
172.20.0.114 jmeter04 CentOS 7 x64 bit JMeter server 04 (slave) Ready

Теперь давайте запачкаем руки, мы начнем с настройки сервера с предварительными условиями, предполагая, что каждый сервер находится в минимальной конфигурации сервера. Ниже приведены шаги:

 [ /]# yum install -y wget initscripts net-tools 

Выполнение вышеуказанного не является обязательным, просто чтобы обеспечить бесперебойную работу нашей установки и проверки. После завершения установки у вас будет скриншот, как показано ниже.

Затем нам нужно установить пакеты Java, которые являются обязательными для настройки JMeter в качестве службы. Ниже приведены шаги:

 [ /]# yum localinstall -y jdk-8u131-linux-x64.rpm 

Процесс будет таким, как показано ниже:

Далее мы установим пакеты JMeter. В этом уроке я буду использовать текущую стабильную версию для установки JMeter. Шаги, как показано ниже:

 [ /]# curl -L https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar > $HOME/jmeter/lib/cmdrunner-2.2.jar 

Как только все будет сделано, вы увидите прогресс, как показано ниже.



Далее мы будем использовать диспетчер плагинов, чтобы помочь установить несколько пакетов Java, необходимых для бесперебойной работы нашего JMeter. Ниже приведены шаги:

 [ /]# /root/jmeter/bin/PluginsManagerCMD.sh install jpgc-autostop,jpgc-casutg,jpgc-csl,jpgc-dummy,jpgc-ffw,jpgc-filterresults,jpgc-functions,jpgc-json,jpgc-mergeresults,jpgc-prmctl,jpgc-sense,jpgc-tst,jpgc-wsc 

Если прогресс идет гладко, вы получите изображение, как показано на скриншоте ниже.

Теперь, когда все сделано в части установки, вам нужно будет создать хранилище ключей перед запуском JMeter в качестве подчиненных. Для этого мы можем использовать скрипт create-rmi-keystore.sh в комплекте с пакетами Apache JMeter. Ниже приведены шаги: -

 [ ~]# $HOME/jmeter/bin/create-rmi-keystore.sh

Ниже скриншот

Теперь, когда мы почти закончили установку JMeter, мы можем приступить к настройке службы JMeter для процесса распространения. Вы можете продолжить настройку остального сервера JMeter, как и для этого сервера.

3. Этап настройки

Теперь, что касается конфигурации для распределенного JMeter, нам просто нужно отредактировать jmeter.properties внутри папки JMeter/bin, как показано ниже.

 [ ~]# vim /root/jmeter/bin/jmeter.properties remote_hosts=172.20.0.111 ,172.20.0.112 ,172.20.0.113 ,172.20.0.114 

Обратите внимание, что я добавил весь наш сервер JMeter в файл конфигурации JMeter. По умолчанию конфигурация указана как remote_hosts=127.0.0.1. Для этой конфигурации вам просто нужно настроить ее на сервере JMeter, который назначается как Master

4. Этап тестирования

Когда все сделано, давайте проверим и сравним результаты тестирования одиночной нагрузки JMeter и распределенной нагрузки JMeter.

Прежде чем мы начнем тест, давайте сделаем предположение об ожидаемом конечном результате. Для этого теста мы попытаемся выполнить запрос к базе данных, который вызывается с сайта. Мы будем использовать URL-адрес для доступа к сайту и включим его в файл JMX, который будет выполняться службой JMeter. В этом руководстве мы не будем включать этап создания файла JMX.

Просто для ясности ниже приведен простой запрос, который хорошо использовать для выполнения из базы данных через веб-URL:

 [') LIMIT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

К вашему сведению, вы можете использовать любой запрос для этого руководства. Поскольку этот запрос не был настроен, ожидается, что он увеличит ресурсы ЦП, когда он будет выполняться несколькими сеансами, которые мы запланируем с помощью службы JMeter.

Теперь, когда все подготовлено и понято, давайте запустим весь сервер JMeter. Ниже приведены команды:

 [ ~]# $HOME/jmeter/bin/jmeter-server & 
[1] 6149

Чтобы продолжить тест, давайте выполним файл JMX, который вызовет указанный выше запрос на одном сервере JMeter, как показано ниже:

 [ /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx 

Обратите внимание, что \\testing.jmx\\ - это файл JMX, содержащий поток выполнения. После выполнения выше вы увидите результат, как показано на скриншоте ниже.

Затем давайте запустим тот же файл JMX для JMeter в распределенной среде. Ниже приведены шаги:

 [ /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx -R 172.20.0.111,172.20.0.112,172.20.0.113,172.20.0.114 

Отмечено, что команда практически не отличается от однофазной, просто нужно добавить флаг -R и добавить другой сервер JMeter, который будет включен для выполнения. Вы можете увидеть детали перечисленного флага, предоставленного командой JMeter, как показано ниже:

 [ /]# /root/jmeter/bin/jmeter --help 
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 5.1.1 r1855137

Copyright (c) 1999-2019 The Apache Software Foundation


To list all command line options, open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -?

--------------------------------------------------

To run Apache JMeter in GUI mode, open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) [-p property-file]

--------------------------------------------------

To run Apache JMeter in NON_GUI mode:
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file]

--------------------------------------------------

To run Apache JMeter in NON_GUI mode and generate a report at end :
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]

--------------------------------------------------
To generate a Report from existing CSV file:
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)]

--------------------------------------------------

To tell Apache JMeter to use a proxy server:
Open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [your proxy server port]

---------------------------------------------------

To run Apache JMeter in server mode:
Open a command prompt and type:

jmeter-server.bat(Windows)/jmeter-server(Linux)

---------------------------------------------------

Двигаясь дальше, как только файл JMX будет выполнен в распределенной среде, вы увидите результат, как показано на снимке экрана ниже.

Отлично, теперь мы успешно запустили наш тест в обеих фазах среды. Чтобы увидеть различия в сравнении, я настроил панель мониторинга на основе grafana. Поскольку это просто для демонстрации различий в результатах, мы не будем рассказывать, как настроить Grafana в качестве панели мониторинга.

На основе использования ЦП, взятого с целевого сервера, на котором размещен наш веб-сайт, ниже приведены результаты для одного потока JMeter:

На изображении ниже результат распределенного потока JMeter:

Из приведенного выше сравнения видно, что нам удалось ввести больше потоков для выполнения на целевом сервере, чтобы увидеть ограничение, которое может принять приложение.