Una instancia de jMeter puede controlar cualquier número de instancias remotas y colectar los resultados de cada una de ellas de este modo podremos realizar tests distribuidos a gran escala.
Cuando se realizan tests de este tipo hay que tener en cuenta que JMeter no distribuye la carga, el test correrá en su totalidad en todos los servidores remotos que le indiquemos.
Si el test define 100 peticiones y se tienen 6 nodos se enviarán 600 peticiones al servidor final, además no será necesario copiar el fichero de test a cada servidor ya que el software se lo pasará a cada uno de los servidores de forma transparente.
Primero añadimos el usuario con el que ejecutaremos jMeter en cada servidor:
su jmeter -l
En cada uno de los servidores necesitaremos tener instalado el plugin de Selenium, lo mas sencillo es instalarlo en nuestro jMeter local, empaquetar el directorio una vez instalado y subirlo a los servidores pero si quisiesemos instalarlo manualmente, nos descargamos el gestor de plugins:
wget https://jmeter-plugins.org/get/ -O jmeter-plugins-manager-1.3.jar
E instalamos el plugin Selenium/WebDriver siguiendo las instrucciones descritas en
este
enlace:
wget http://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar -O cmdrunner-2.2.jar
cd JMETER_HOME
java -cp JMETER_HOME/lib/ext/jmeter-plugins-manager-1.3.jar org.jmeterplugins.repository.PluginManagerCMDInstaller
JMETER_HOME/bin/PluginsManagerCMD.sh install jpgc-webdriver
Arrancamos jMeter en modo servidor en cada uno de los nodos, primero tenemos que hacer que el hostname resuelva a la ip WAN de cada servidor, consultamos su ip pública:
Como root editamos el fichero hosts:
IPWAN SERVERNAME
Instalamos chrome:
exit
Deshabilitamos el SSL:
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
Nos bajaremos el chrome driver que corresponda con la versión instalada:
unzip chromedriver_linux64.zip
Arrancamos el servicio:
Comprobamos que arranca sin problemas:
Añadimos cada uno de los servidores en el cliente y deshabilitamos el ssl:
remote_hosts=kr0mtest,kr0mtest2,kr0mtest3,kr0mtest4
server.rmi.ssl.disable=true
Arrancamos jMeter y cambiamos el Path to Chrome Driver donde lo hayamos descomprimido en los servidores:
Comprobamos que podemos ejecutar el test en cualquiera de los servidores remotos:
Run -> Remote Start
Si el cliente está nateado dará problemas, he probado redirigiendo puertos per sin éxito, la mejor opción es crear el test gráficamente, pasarle el jmx a un servidor remoto y ejecutarlo desde allàvÃÂa CLI.
En el servidor no nateado indicamos los campos que se deben guardar en el log del test:
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.response_data.on_error=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true
Ejecutamos el test indicando los servidores remotos:
Luego desde nuestro jMeter local cargamos el fichero Alfaexploit.jmx y en el listener del test cargamos el fichero log.xml para poder visualizar los datos gráficamente.
NOTA: SerÃa conveniente proteger mediante reglas de firewall los servidores jMeter para evitar el uso por parte de usuarios no autorizados.
DEBUG:
Asegurarnos de que todos los procesos están arrancados con el usuario jMeter, en caso contrario los test fallarán ya que jMeter no permite su ejecución como root
Podemos arrancar los servidores en modo debug:
El cliente también puede ser arrancado en modo debug:
Si queremos habilitar el modo debug cuando ejecutamos los tests desde la interfaz gráfica debemos habilitar el nivel deseado en el propio test:
Antes de intentar ejecutar los test distribuidos podemos copiar manualmente el fichero de test a cada uno de los nodos y ejecutarlo por CLI para comprobar que puede correr sin problemas:
ssh SERVER
JMETER_HOME/bin/jmeter -n -t Alfaexploit.jmx -l log.xml