web-dev-qa-db-fra.com

Configuration de JMeter pour les tests distribués dans AWS avec des problèmes de connectivité

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.

33
null

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.

Configuration JMeters à distance (serveur)

Voici comment nous configurons chaque instance.

  1. Java installé:

    $ Sudo apt-get update
    $ Sudo apt-get install default-jre 
    
  2. 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
    
  3. 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
    
  4. 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
    

Configuration JMeter locale (client)

Ensuite, nous avons configuré JMeter pour exécuter des tests à distance sur ces instances sur notre machine cliente locale:

  • Garanti d'utiliser la même version de JMeter que celle qui s'exécutait sur les serveurs. Installé Java et JMeter comme décrit ci-dessus.
  • Test à distance activé en modifiant le 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.

Problèmes et résolutions

Voici les problèmes que nous avons rencontrés et comment nous les avons résolus:

  1. 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.

  2. 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.

  3. 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. )

58
Archana Aggarwal

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

  • Tous les nœuds pour publier leur adresse IP publique - sur AWS/OS, cette valeur par défaut est l'adresse IP privée
  • Règles d'entrée pour le port RMI qui est par défaut 1099 - J'utilise ceci
  • Règles d'entrée pour le port RMI "local" qui par défaut est dynamique. Ci-dessous, j'utilise 4001 pour le client et 4000 pour les serveurs. Le port peut être le même mais notez que les propriétés sont différentes.

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.

Serveurs distants

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

Serveur sournois sur le client

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

Client

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
5
KCD

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

enter image description here

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/

0
vins