Einrichten eines JMeter-Clusters für Webserver-Lasttests

Dieses Tutorial zeigt Ihnen, wie Sie einen JMeter-Cluster für Lasttests einrichten. Wie jeder, der es noch nicht kennt, ist die Apache-JMeter-Anwendung eine Open-Source-Software, eine 100 % reine Java-Anwendung, die zum Testen des Funktionsverhaltens und zur Leistungsmessung entwickelt wurde. Sie wurde ursprünglich für das Testen von Webanwendungen entwickelt, hat sich aber inzwischen auf andere Testfunktionen ausgeweitet. Sie kann verwendet werden, um eine starke Belastung auf einem Server, einer Servergruppe, einem Netzwerk oder einem Objekt zu simulieren, um die Stärke zu testen oder die Gesamtleistung unter verschiedenen Belastungsarten zu analysieren.

Aber da jeder Geschäftsansatz immer größer wird, müssen Ingenieure und Tester mehr Tests durchführen, um sicherzustellen, dass jedes Erweiterungsmodul auch größere Kunden bedienen kann, ohne den täglichen Produktionsbetrieb zu beeinträchtigen. Um dies zu gewährleisten, hat JMeter seine eigenen Dienste eingeführt, indem der Leistungstest unter größeren Umgebungen als Clustering-Prozess durchgeführt werden kann.

Falls Ihr JMeter-Client-Computer nicht in der Lage ist, genügend Benutzer zu simulieren, um Ihren Server zu laden, oder auf Netzwerkebene eingeschränkt ist, können Sie mehrere entfernte JMeter-Engines von einem einzigen JMeter-Client aus steuern. Wenn Sie JMeter remote ausführen, können Sie einen Test auf vielen Low-End-Computern replizieren und eine größere Last auf dem Server simulieren. Eine Instanz des JMeter-Clients kann eine beliebige Anzahl von entfernten JMeter-Instanzen steuern und alle Daten von ihnen sammeln.

Verteilte Tests sind eine Art von Tests, bei denen mehrere Systeme zur Durchführung von Stresstests verwendet werden. Verteiltes Testen wird verwendet, um Websites und Serveranwendungen zu testen, wenn sie mit mehreren Clients gleichzeitig arbeiten.

1. Wie funktioniert das?

Wenn wir unsere Lasttests lokal mit einer einzelnen JMeter-Anwendung durchführen, gibt es gewisse Einschränkungen hinsichtlich der Anzahl der Benutzer, die Sie ausführen können, selbst wenn Ihr Computer über genügend CPU und Speicher verfügt. Wie können wir daher ein Szenario mit mehr als 1000 gleichzeitigen Benutzern mit JMeter erstellen? Aufgrund dieses Szenarios kommt die Idee von JMeter im verteilten Modus ins Bild.

Wenn wir über die Verteilung von JMeter sprechen, beziehen wir uns auf eine Master-Slave-Architektur, bei der JMeter Java RMI [Remote Method Invocation] verwendet, um mit Objekten in einem verteilten Netzwerk zu interagieren. Die folgenden Bilder sollen den Arbeitsablauf zusammenfassen:

Durch die Verwendung von JMeter im Cluster-Design können Sie sicherstellen, dass Ihre Tests die Möglichkeit haben, ein lokales JMeter (Master) zu haben, das die Testausführung zusammen mit mehreren entfernten JMeter-Instanzen (Slaves), die die Anforderung an Ihren Zielserver senden, handhabt.

Die Verbindung zum JMeter-Cluster / JMeter-Dienst kann über hergestellt werden:

  1. JMeter-Desktop-Anwendung
  2. SSH/Terminal
  3. VNC
  4. API-Dienstendpunkt (WIP)

2. Installationsphase

Für die Installationsphase werden wir zunächst das Inventar der einzelnen Server auflisten. Nachfolgend finden Sie die Details:

System-Inventarisierung
IP Hostname OS Funktion Status
172.20.0.111 jmeter01 CentOS 7 x64 Bit JMeter-Server 01 (Master/Slave) Bereit
172.20.0.112 jmeter02 CentOS 7 x64 Bit JMeter-Server 02 (Slave) Bereit
172.20.0.113 jmeter03 CentOS 7 x64 Bit JMeter-Server 03 (Slave) Bereit
172.20.0.114 jmeter04 CentOS 7 x64 Bit JMeter-Server 04 (Slave) Bereit

Jetzt machen wir uns die Hände schmutzig, wir beginnen mit der Einrichtung des Servers mit Voraussetzungen, wobei wir davon ausgehen, dass jeder Server unter einer minimalen Serverkonfiguration steht. Nachfolgend sind die Schritte aufgeführt:

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

Die oben genannte Vorgehensweise ist optional, um sicherzustellen, dass unsere Installation und Überprüfung reibungslos funktioniert. Sobald die Installation abgeschlossen ist, sehen Sie den Screenshot wie unten

Als nächstes müssen wir Java-Pakete installieren, da dies für die Einrichtung von JMeter als Dienst obligatorisch ist. Nachfolgend sind die Schritte aufgeführt:

 [root@jmeter01 /]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm" 
 [root@jmeter01 /]# yum localinstall -y jdk-8u131-linux-x64.rpm 

Der Prozess wird wie unten beschrieben ablaufen:

Als nächstes werden wir die JMeter-Pakete installieren. In diesem Tutorial werde ich die aktuelle stabile Version für die JMeter-Installation verwenden. Die Schritte sind wie unten beschrieben:

 [root@jmeter01 /]# wget https://www-eu.apache.org/dist//jmeter/binaries/apache-jmeter-5.1.1.tgz 
 [root@jmeter01 /]# tar -zxf apache-jmeter-5.1.1.tgz 
 [root@jmeter01 /]# ln -s /apache-jmeter-5.1.1 $HOME/jmeter 
 [root@jmeter01 /]# echo "export JMETER_HOME=$HOME/jmeter" >> /root/.bashrc 
 [root@jmeter01 /]# echo "export PATH=$PATH:$JMETER_HOME/bin" >> /root/.bashrc 
 [root@jmeter01 /]# source /root/.bashrc 
 [root@jmeter01 /]# curl -L https://jmeter-plugins.org/get/ > $HOME/jmeter/lib/ext/plugins-manager.jar 
 [root@jmeter01 /]# curl -L https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar > $HOME/jmeter/lib/cmdrunner-2.2.jar

Wenn alles erledigt ist, sehen Sie den Fortschritt wie unten dargestellt

Als Nächstes werden wir einen Plugin-Manager verwenden, um mehrere Java-Pakete zu installieren, die für den reibungslosen Betrieb unseres JMeters benötigt werden. Nachfolgend sind die Schritte aufgeführt:

 [root@jmeter01 /]# java -cp $HOME/jmeter/lib/ext/plugins-manager.jar org.jmeterplugins.repository.PluginManagerCMDInstaller 
 [root@jmeter01 /]# /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

Wenn der Fortschritt reibungslos verläuft, erhalten Sie wie im folgenden Screenshot

Da nun alles auf dem Installationsteil erledigt ist, müssen Sie den Keystore vor dem Start von JMeter als Sklaven erstellen. Dazu können wir ein Skript verwenden, das mit Apache-JMeter-Paketen namens create-rmi-keystore.sh gebündelt ist. Nachfolgend sind die Schritte aufgeführt :-

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

Unten sehen Sie den Screenshot

Nun haben wir so ziemlich alles für die JMeter-Installation getan, und wir können mit der Konfiguration im JMeter-Dienst für den Verteilungsprozess fortfahren. Sie können mit der Einrichtung des restlichen JMeter-Servers wie mit der gleichen Installation fortfahren, die Sie für diesen Server vorgenommen haben.

3. Konfigurationsphase

Was nun die Konfiguration als verteiltes JMeter betrifft, müssen wir nur noch die jmeter.properties innerhalb des JMeter /bin-Ordners wie unten beschrieben bearbeiten

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

Beachten Sie, dass ich alle unsere JMeter-Server in die JMeter-Konfigurationsdatei aufgenommen habe. Standardmäßig ist die Konfiguration als remote_hosts=127.0.0.1 angegeben. Für diese Konfiguration müssen Sie sie nur unter JMeter-Server konfigurieren, die als Master zugewiesen sind.

4. Testphase

Da alles erledigt ist, lassen Sie uns die Ergebnisse für einzelne JMeter-Lasttests und verteilte JMeter-Last testen und vergleichen.

Bevor wir mit dem Test beginnen, wollen wir die Annahme für die Erwartung des Endergebnisses treffen. Für diesen Test werden wir versuchen, eine Datenbankabfrage auszuführen, die von einem Standort aus aufgerufen wurde. Wir werden die URL verwenden, um auf die Site zuzugreifen, und sie in die JMX-Datei aufnehmen, die vom JMeter-Dienst ausgeführt werden soll. In diesem Tutorial wird der Schritt zum Erstellen einer JMX-Datei nicht beschrieben.

Nur zur Verdeutlichung: Unten finden Sie die einfache Abfrage, die wir zur Ausführung von der Datenbank über eine Web-URL verwenden werden:

 [root@jmeter01 ~]# mysql -u shahril -p -h 10.124.12.13 
 Enter password:
 Welcome to the MariaDB monitor. Commands end with ; or \g.
 Your MySQL connection id is 546695
 Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‚help;‘ or ‚\h‘ for help. Type ‚\c‘ to clear the current input statement.

MySQL [(none)]> SELECT 1 FROM cassie_devdb.saml_users WHERE (username = ‚J.Hyun@portaldev.ytlcomms.my‘) LIMIT 1;
+—+
| 1 |
+—+
| 1 |
+—+
1 row in set (0.00 sec)

Zu Ihrer Information: Sie können jede beliebige Abfrage für dieses Tutorial verwenden. Da diese Abfrage nicht abgestimmt wurde, wird erwartet, dass sie die CPU-Ressourcen erhöht, wenn sie von mehreren Sitzungen ausgeführt wird, die wir mit Hilfe des JMeter-Dienstes einplanen werden

Nun, da alles vorbereitet und verstanden ist, lassen Sie uns alle JMeter-Server starten. Nachfolgend der Befehl:

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

Um mit dem Test fortzufahren, führen wir die JMX-Datei aus, die die obige Abfrage in einem einzelnen JMeter-Server auslöst, wie unten beschrieben:

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

Beachten Sie, dass `testing.jmx` die JMX-Datei war, die den Ausführungsthread enthält. Sobald die obige Datei ausgeführt wurde, sehen Sie das Ergebnis wie im folgenden Screenshot

Als nächstes führen wir die gleiche JMX-Datei in Richtung JMeter in einer verteilten Umgebung aus. Nachfolgend sind die Schritte aufgeführt:

 [root@jmeter01 /]# /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

Beachten Sie, dass der Befehl ziemlich gleich ist, wenn er in einer einzigen Phase ausgeführt wird, Sie müssen nur ein Flag von -R hinzufügen und den anderen JMeter-Server hinzufügen, der zur Ausführung einbezogen werden soll. Sie können die Einzelheiten der aufgeführten Flagge, die der JMeter-Befehl liefert, wie unten dargestellt sehen:

 [root@jmeter01 /]# /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)

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

Sobald die JMX-Datei unter einer verteilten Umgebung ausgeführt wurde, sehen Sie das Ergebnis wie in der folgenden Abbildung dargestellt

Großartig, jetzt haben wir unseren Test in beiden Umgebungsphasen erfolgreich durchgeführt. Um die Vergleichsunterschiede zu sehen, habe ich ein Monitoring-Dashboard mit Grafana eingerichtet. Da dies nur die Ergebnisunterschiede aufzeigen soll, werden wir nicht darauf eingehen, wie man Grafana als Monitoring-Dashboard einrichtet

Basierend auf der CPU-Auslastung, die vom Zielserver, der unsere Website hostet, genommen wurde, sind unten die Ergebnisse unter einzelnen JMeter-Threads aufgeführt:

Und unter dem Bild sind die Ergebnisse unter dem verteilten JMeter-Thread:

Aus dem obigen Vergleich können wir klar erkennen, dass wir es schaffen, mehr Threads in den Zielserver einzuführen, um die Einschränkung einer Anwendung zu sehen, die diese akzeptieren kann.

Das könnte dich auch interessieren …