es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Posible error en JMeter al utilizar una conexión JDBC a través de SSH?

Necesito realizar una prueba de carga contra un pgbouncer. Todos los clientes realizan un túnel SSH antes de establecer una conexión de base de datos a través del pgbouncer. Es algo como esto:

sshpass -p ‘MI_CONTRASEÑA’ ssh -o StrictHostKeyChecking=no -N -L PUERTO_LOCAL:127.0.0.1:63666 USUARIO_PGBOUNCER@DIRECCIÓN_PGBOUNCER -p PUERTO >/dev/null 2>&1 &

Mi proyecto de Jmeter actualmente tiene tres grupos de hilos:

  1. Grupo de hilos de configuración: En este grupo realizo una conexión a una base de datos diferente para seleccionar un nombre de usuario y un esquema al azar.

  2. Grupo de hilos de consulta: En este grupo realizo la conexión JDBC utilizando el usuario anterior (que se convirtió en una propiedad utilizando props.put("schema", vars.get("schema_1")); en BeanShell Assertion) y las consultas.

  3. Grupo de hilos de cierre: En este grupo cierro el túnel SSH.

Ahora, cada vez que ejecuto la prueba desde la GUI por primera vez, la selección de datos (solicitud JDBC) en el grupo de hilos de consulta me muestra un error:

Cannot create PoolableConnectionFactory (FATAL: “trust” authentication failed)

Después de eso, si ejecuto la prueba nuevamente, todo funciona. Verifiqué el contenido de las variables y propiedades con un muestreador Debug y todo está correcto.

El principal problema surge cuando ejecuto la prueba sin la GUI. Siempre falla debido a ese error.

En realidad, no me gusta el hecho de tener que establecer el túnel SSH ejecutando el comando con un muestreador de Proceso del SO, pero no encuentro una solución mejor. El túnel SSH es parte de la prueba, no lo necesito para la configuración maestro/esclavo de JMeter.

Agradecería mucho una solución o una sugerencia para que esto funcione. Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para el error FATAL “trust” authentication failed

    Para solucionar el error FATAL “trust” authentication failed, puedes realizar lo siguiente:

    1. Agrega pgjdbc.auth.password a la cadena de conexión JDBC en la solicitud JDBC.
      • jdbc:postgresql://localhost:5432/mydb?user=username&password=myPassword&currentSchema=mySchema&pgjdbc.auth.password=password
    2. Configura PGBouncer para utilizar autenticación md5 cambiando auth_type en el archivo pgbouncer.ini a:
      • auth_type = md5
    3. Agrega el inicio de sesión de usuario y la contraseña de la base de datos al archivo userlist.txt en el directorio pgbouncer:
      • user = myuser mypassword
    4. Reinicia PGBouncer y ejecuta la prueba nuevamente.

    Ejecutando un túnel SSH a través de JMeter

    Puedes establecer un túnel SSH a través de JMeter utilizando el complemento SSH Tunnel Sampler.

    Aquí están los pasos:

    1. Instala el complemento SSH Tunnel Sampler agregando la siguiente dependencia a tu archivo pom.xml:
    <dependency>
        <groupid>kg.apc</groupid>
        <artifactid>jmeter-plugins-ssh-tunnel</artifactid>
        <version>0.6</version>
    </dependency>
    
    1. Agrega un nuevo grupo de hilos para el SSH Tunnel Sampler.
  2. Agrega un SSH Tunnel Sampler al grupo de hilos SSH.

  3. Configura el SSH Tunnel Sampler con los siguientes parámetros:

    • Host de destino – La dirección de PGBouncer.
    • Puerto de destino – El puerto de PGBouncer.
    • Puerto local – El puerto local que se reenviará al host remoto.
    • Nombre de usuario – El nombre de usuario para la conexión SSH.
    • Contraseña – La contraseña para la conexión SSH.
    • Clave privada – La ruta al archivo de clave privada.
    • Frase de paso – La frase de paso para el archivo de clave privada.
  4. Agrega una solicitud JDBC al grupo de hilos de consulta con los siguientes parámetros:
    • URL JDBCjdbc:postgresql://127.0.0.1:LOCAL_PORT/nombrebasedatos
    • Clase del controlador JDBCorg.postgresql.Driver
    • Nombre de usuario – El inicio de sesión de usuario de la base de datos.
    • Contraseña – La contraseña del usuario de la base de datos.
  5. Ejecuta la prueba.

Comments are closed.