Pgbouncer

Instalando pgbouncer en debian jessie

Instalar desde los repositorios:

$ apt-get install pgbouncer

Note

Esta opción suele dar algunos problemas ya que la versión que se encuentra en los repositorios no es la mas actual, lo preferente es instalar mediante la compilación.

Instalación mediante compilación

Descargamos del sitio web oficial pgbouncer en la sección de downloads, nos percatamos de optar por una versión estable, en nuestro caso descargamos la version 1.7

Descomprimir el archivo descargado:

$ tar -xvzf pgbouncer-1.7.tar.gz

Instalar dependencias previas:

  • apt-get install make (metapaquete para compilación)
  • apt-get install built-essential (metapaquete para compilación)
  • apt-get install libevent-dev
  • apt-get install openssl
  • apt-get install libssl-dev (headers para openssl)
  • apt-get install c-ares (opcional)

Compilar:

$ ./configure --prefix=/usr/local --with-libevent=libevent-prefix
$ make
$ make install

Configuración

Pgbouncer crea estos dos directorios:

  • pgbouncer(archivo binario): /usr/local/bin
  • archivos de configuración: /usr/local/share/doc/pgbouncer

Configurar pgbouncer.ini:

$ cd /usr/local/share/doc/pgbouncer/
$ nano pgbouncer.ini

El archivo pgbouncer.ini se divide en secciones las cuales son señaladas con: [section_name], y los comentarios comienzan con una o dos: ; o con: #.

En el archivo pgbouncer.ini configurar las siguientes opciones:

[database]
nombre_baseDatos = host=localhost port=5432 dbname=nombre_baseDatos

[pgbouncer]
listen_port = 6543
listen_addr = localhost
admin_users = algun_usuario, otro_usuario

; ip address or * which means all ip-s
listen_addr = *
;listen_port = 5433 #(comentar esta linea)

; any, trust, plain, crypt, md5
auth_type = md5
auth_file = /usr/local/share/doc/pgbouncer/userlist.txt

lofile = pgbouncer.log #(este archivo hay que crearlo en /usr/local/share/doc/pgbouncer)

pidfile = pgbouncer.pid

; comma-separed list of users who are allowed to change settins
admin_users = postgres, otherusers

; comma-separed list of users who are allowed to use SHOW command
stats_users = postgres, otherusers

pool_mode = transaction

max-client_conn = numero_maximo_conexion

Ahora agregar usuarios a userlist.txt (usuarios permitidos):

"username" "password"
"username" "password"

Tip

Ambos archivos deben de estar adecuadamente con permisos y propietario, lo preferible es que sea el propietario el usuario postgres.

Al final en el directorio local debe de quedar con los archivos: pgbouncer.ini, pgbouncer.log, userlist.txt

Uso

Para ver info de como usar el comando pgbouncer:

$ pgbouncer -h

Corremos el pgbouncer con el usuario postgres (Si corremos pgbouncer como root nos daría error ):

$ pgbouncer -d pgbouncer.ini -v

probamos si esta levantado el demonio:

$ ps aux | grep pgbouncer

ahora entramos en la consola de administración:

$ psql -h localhost -p 6543 -U postgres -d pgbouncer

para uso de la consola de administración:

$ show help; #muestra los comandos de administración

por ejemplo para ver el pool de conexiones:

$ show pools;

Si modificamos el archivo pgboucer.ini no es necesario reiniciar el servicio pgbouncer, solo entramos a la consola de administración:

$ psql -h localhost -p 6543 -U postgres -d pgbouncer
$ RELOAD;

Prueba (Benchmark)

Para hacer la simulación de múltiples conexiones por cliente necesitamos pgbench que por defecto viene en el paquete contrib de postgres.

Inicializar pgbench:

su postgres
pgbench -i -s 10 database_name
  • -i = inicializar pgbench, crea 4 tablas:
    • pgbench_accounts
    • pgbench_branches
    • pgbench_history
    • pgbench_tellers
  • -s = factor de escala, por ejemplo -s 100 creara 10000000 filas en la tabla pgbench_accounts

Comparando el Performance

Comparamonos entre nuestros distintos puertos de las bases de datos, el 5432 que es por defecto y el 6543 del pgbouncer. Pgbench arroja los TPS (transacciones por segundo).

Performance con 10 clientes en el puerto 5432:

pgbench -h localhost -c 10 -C -T 60 database_name

Performance con 10 clientes en el puerto 6543:

pgbench -h localhost -p 6543 -c 10 -C -T 60 database_name
  • -c = número de clientes
  • -C = establece una nueva conexión por cada transacción
  • -T = tiempo de la prueba en segundos
comments powered by Disqus