Je dois faire des tests distribués à l'aide de JMeter. L'objectif est que plusieurs serveurs distants dans AWS contrôlés par un serveur local envoient une demande de téléchargement de fichier à un autre serveur dans AWS.
Comment puis-je configurer les différents serveurs dans AWS?
Comment puis-je me connecter à eux à distance?
Quelqu'un peut-il fournir des instructions étape par étape sur la façon de le faire?
J'ai essayé plusieurs choses, mais je continue de rencontrer des problèmes de connectivité entre les réseaux.
Nous avions une tâche similaire et nous avons également rencontré un tas de problèmes. Voici les détails de l'ensemble du processus et ce que nous avons fait pour résoudre les problèmes que nous avons rencontrés. J'espère que ça aide.
Nous devions envoyer des demandes à partir de 5 serveurs situés dans différentes régions du monde. Nous avons donc lancé 5 micro-instances dans AWS, chacune dans une région différente. Nous avons choisi des régions aussi éloignées géographiquement que possible.
Voici comment nous configurons chaque instance.
Java installé:
$ Sudo apt-get update
$ Sudo apt-get install default-jre
JMeter installé:
$ 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
Modifié le jmeter.properties
fichier dans le /bin
dossier de l'installation de JMeter et décommentez la ligne contenant le server.rmi.localport
réglage. Nous avons changé le port en 50000.
server.rmi.localport=50000
Serveur JMeter démarré. Assurez-vous que l'adresse et le port que le serveur signale écouter sont corrects.
$ cd ~/jmeter/Apache-jmeter-2.9/bin
$ vi jmeter-server
Ensuite, nous avons configuré JMeter pour exécuter des tests à distance sur ces instances sur notre machine cliente locale:
jmeter.properties
fichier qui se trouve dans le dossier bin
de l'installation de JMeter. Le paramètre remote_hosts
devait être défini avec le DNS public des serveurs distants auxquels nous nous connections.remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x
Nous pouvions maintenant dire à notre instance JMeter client d'exécuter des tests sur tout ou partie de nos serveurs distants spécifiés.
Voici les problèmes que nous avons rencontrés et comment nous les avons résolus:
Le client a échoué avec:
ERREUR - jmeter.engine.ClientJMeterEngine: Java.rmi.ConnectException: connexion - refusé d'héberger: 127.0.0.1
Cela était dû au fait que l'hôte du serveur renvoyait l'adresse IP privée comme adresse en raison d'Amazon NAT. Nous avons corrigé cela en définissant le paramètre RMI_Host_DEF
que le /usr/local/jmeter/bin/jmeter-server
le script inclut au démarrage du serveur:
RMI_Host_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
Maintenant, l'instance AWS a renvoyé l'IP externe du serveur, et nous avons pu commencer le test.
Lorsque le nœud du serveur a tenté de renvoyer le résultat et a tenté de se connecter au client, le serveur a tenté de se connecter à l'adresse IP externe de ma machine locale. Mais il a jeté une erreur de connexion refusée:
16/05/2013 12:23:37 ERREUR - jmeter.samplers.RemoteListenerWrapper: testStarted (Host) Java.rmi.ConnectException: connexion refusée à l'hôte: xxx.xxx.xxx.xx;
Nous avons résolu ce problème en configurant des tunnels inverses côté client.
Tout d'abord, nous avons modifié le jmeter.properties
fichier dans le /bin
dossier de l'installation de JMeter et décommenté la ligne contenant le client.rmi.localport
réglage. Nous avons changé le port en 60000:
client.rmi.localport=60000
Ensuite, nous nous sommes connectés à chacun des serveurs à l'aide de SSH et avons configuré un tunnel inverse sur le port 60000 sur le client.
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 [email protected]
Nous avons gardé chacune de ces sessions ouverte, car le serveur JMeter doit pouvoir fournir les résultats des tests au client.
Ensuite, nous avons mis en place le JVM_ARGS
variable d'environnement sur le client, dans le jmeter.sh
fichier dans le /bin
dossier:
export JVM_ARGS="-Djava.rmi.server.hostname=localhost"
Ce faisant, JMeter indiquera aux serveurs de se connecter à localhost:60000
pour avoir fourni leurs résultats. Cela finit par être tunnelisé vers le client.
Les connexions SSH aux serveurs ont continué à chuter après être restées inactives pendant un petit moment. Pour éviter que cela ne se produise, nous avons ajouté un paramètre à chacune des configurations de tunnel SSH demandant au client d'attendre 60 secondes avant d'envoyer un paquet nul au serveur pour maintenir la connexion en vie:
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 [email protected]
(.ssh/config
version de tous les paramètres SSH requis:
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
Utilisez simplement ssh 54.x.x.x
après avoir configuré cela. )
Je viens juste de le faire sur openstack et j'ai trouvé les mêmes problèmes ... aucune idée pourquoi la documentation de jmeter remoting ne couvre que la moitié des étapes requises. Vous pouvez le faire sans tunnels ni toucher les fichiers de propriétés.
Vous avez besoin
Si vous utilisez votre poste de travail comme client, vous avez probablement encore besoin de tunnels. Ci-dessus Archana Aggarwal a de bons conseils pour les tunnels.
Ensemble Java.rmi.server.hostname
et server.rmi.localport
en ligne ou dans le fichier de propriétés.
jmeter-server -Djava.rmi.server.hostname=publicip -Dserver.rmi.localport=4000
Vous pouvez également en exécuter un sur la même machine que le client. Pour plus de clarté, j'ai défini Java.rmi.server.hostname
mais à gauche server.rmi.localport
comme dynamique
jmeter-server -Djava.rmi.server.hostname=localip
Ensemble Java.rmi.server.hostname
et client.rmi.localport
en ligne ou dans le fichier de propriétés. Utilisation -R
etc comme ceci:
jmeter -n -t Test.jmx -Rremotepublicip1,remotepublicip2 -Djava.rmi.server.hostname=clientpublicip -Dclient.rmi.localport=4001 -GmypropA=1 -GmypropB=2 -lresults.jtl
Lorsque vous optez pour des tests distribués à l'aide de JMeter dans AWS, je vous suggère d'utiliser docker - qui nous aidera très rapidement avec l'infrastructure de test de jmeter. De cette façon, nous pouvons également nous assurer que la même version de Java et jmeter sont installés dans toutes les instances d'Amazon, ce qui est très important pour les tests distribués JMeter.
Assurez-vous que - vous définissez ci-dessous les propriétés et les ports sont ouverts pour jmeter-server. [ils ne doivent pas être exactement 1099 500 000]
server.rmi.localport=50000
server_port=1099
Java.rmi.server.hostname=SERVER_IP
pour le client
client.rmi.localport=60000
Java.rmi.server.hostname = SERVER_IP - cette étape est très importante car le conteneur dans l'instance aws aura sa propre adresse IP dans le réseau docker - donc maître et esclave ne peuvent pas communiquer. Nous avons donc explicitement défini cette propriété
Plus d'informations:
http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker-in-aws/