Alta disponibilidad de PostgreSQL con PgPool

PgPool-II es un middleware que se encuentra entre los servidores de PostgreSQL y un cliente de base de datos PostgreSQL.

Ofrece las siguientes características:

  • Agrupación de Conexiones (Connection Pooling)
  • Replicación (Replication)
  • Balanceo de Carga (Load Balance)
  • Limite de Conexiones excedidas (Limiting Exceeding Connections)
  • Consultas en Paralelo (Parallel Query)

Para nuestra demostración usamos 03 maquinas virtuales, donde cada servidor tenia instalado lo siguiente:

Server 01:
SO RedHat 7.2
IP 192.168.15.101
PgPool 3.6
Server 02:
SO RedHat 7.2
IP 192.168.15.102
PostgreSQL 9.5
Server 03:
SO RedHat 7.2
IP 192.168.15.103
PostgreSQL 9.5

Paso 1: Instalacion y configuracion PgPool

En el server 01 instalaremos y configuraremos PgPool.

[root@server01 ~]# rpm -Uvh https://yum.postgresql.org/9.5/redhat/rhel-7.2-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
[root@server01 ~]# yum -y install pgpool-II-95 pgpool-II-95-extensions
[root@server01 ~]# vim /etc/pgpool-II-95/pgpool.conf

[root@server01 ~]# systemctl enable pgpool-II-95

#CONNECTIONS
listen_addresses = '*'
port = 9999
pcp_port = 9898

#Backend Connection Settings
backend_hostname0 = '192.168.15.102'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/pgsql/9.5/data/'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = '192.168.15.103'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/pgsql/9.5/data/'
backend_flag1 = 'ALLOW_TO_FAILOVER'

#Authentication
enable_pool_hba = on
pool_passwd = 'pool_passwd'
authentication_timeout = 60
ssl = off

#POOLS
num_init_children = 100
max_pool = 4
child_life_time = 300
child_max_connections = 5

#LOGS
log_per_node_statement = on
log_standby_delay = 'if_over_threshold'

#CONNECTION POOLING
connection_cache = on

#REPLICATION MODE
replication_mode = off
replicate_select = off
insert_lock = on

#LOAD BALANCING MODE
load_balance_mode = on
ignore_leading_white_space = on
black_function_list = 'currval,lastval,nextval,setval'

#MASTER/SLAVE MODE
master_slave_mode = on
master_slave_sub_mode = 'stream'
sr_check_period = 10
delay_threshold = 10000000
sr_check_user = 'nobody'
sr_check_password = ''

Generamos el archivo para manejo de autenticación MD5

[root@server01 ~]# pg_md5 -u postgres -m contraseña

Para comprobar la generación del archivo pool_passwd

[root@server01 ~]# cat /etc/pgpool-II-95/pool_passwd | grep postgres
postgres:md5b41437cc7e23a23c531d1b232a051b1e
[root@server01 ~]# cat postgres:md5b41437cc7e23a23c531d1b232a051b1e >> /etc/pgpool-II-95/pcp.conf

Configuramos el acceso de usuarios a pgpool

[root@server01 ~]# vim /etc/pgpool-II-95/pool_hba.conf
host    all         postgres    192.168.15.1/24             md5

Reiniciamos el servicio de pgpool

[root@server01 ~]# systemctl restart pgpool-II-95

Paso 2: Instalamos PostgreSQL 9.5 en las maquinas virtuales (Server 02 y Server 03)

[root@server0x ~]# rpm -Uvh https://yum.postgresql.org/9.5/redhat/rhel-7.2-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
[root@server0x ~]# yum -y install postgresql95 postgresql95-server postgresql95-contrib postgresql95-libs
[root@server0x ~]# systemctl enable postgresql-9.5
[root@server0x ~]# /usr/pgsql-9.5/bin/postgresql95-setup initdb
[root@server0x ~]# systemctl start postgresql-9.5
[root@server0x ~]# firewall-cmd --zone=public --add-port=5432/tcp --permanent
[root@server0x ~]# systemctl restart firewalld

Configuramos los archivos postgresql.conf y pg_hba.conf

[root@server0x ~]# vim /var/lib/pgsql/9.5/data/postgresql.conf
listen_addresses = '*'
[root@server0x ~]# vim /var/lib/pgsql/9.5/data/pg_hba.conf
#IP del servidor PgPool
host    all             postgres             192.168.15.101/32       md5

Reiniciamos el servicio de postgres

[root@server0x ~]# systemctl restart postgresql-9.5

x = 2, 3
Paso 3: Pruebas

Validaremos el acceso, usando un cliente de PostgreSQL, PgAdmin por ejemplo, usaremos la IP del servidor PgPool 192.168.15.101, puerto 9999 y usuarios/contraseña definidos con pg_md5.

pgpool-ii-pgadmin

 

Share on FacebookTweet about this on TwitterShare on Google+

10 thoughts on “Alta disponibilidad de PostgreSQL con PgPool

  1. Gracias por el post, por favor necesito una última ayuda sobre qué contenido tendrían los archivos, puedes por favor compartir una sección de las líneas configuradas.
    /etc/pgpool-II-95/pgpool.conf —> es un nuevo archivo?
    /var/lib/pgsql/9.5/data/postgresql.conf
    /etc/pgpool-II-95/pcp.conf —> es un nuevo archivo?
    /etc/pgpool-II-95/pool_hba.conf —> es un nuevo archivo?
    /var/lib/pgsql/9.5/data/postgresql.conf
    /var/lib/pgsql/9.5/data/pg_hba.conf

    1. Hola Eder cuando instalas pgpool, en el directorio /etc/pgpool-II-95/ se crea el archivo pgpool.conf.sample, puedes crear el archivo pgpool.conf a partir del .sample, del mismo modo para el archivo pcp.conf y pool_hba.conf, las lineas configuradas están indicadas en el post.

  2. Hola, que tal, he intentado seguir tu manual y si he logrado entrar al servidor pgpool por el puerto 9999 y veo las bases de datos de uno de los host que son backend pero el otro si logro accesar de manera independiente pero no replica la base de datso que hago desde pgpool es decir creo una base de datos en el server que tiene pgpool y se replica en el host1 pero en el host2 no
    Que puedo estar haciendo mal
    Desde ya muchas gracias

  3. Cuando deseo hacer la conexion con pgpool para empezar las pruebas me muestra esto :
    psql: could not connect to server: Conexión rehusada
    Is the server running on host “localhost” (127.0.0.1) and accepting
    TCP/IP connections on port 9999?

    1. Hola Ive, puedes hacer los siguiente.
      – Revisar si tu servidor tiene resolucion IPv6, donde localhost toma por defecto la direccion ::1.
      – Cambiar en el archivo postgresql.conf el parametro listen_addresses a localhost o colocar * para escuchar todas las interfaces.
      – Revisar si no se esta detras de un firewall.

      Saludos,

  4. Hice lo que me dijo pero el error persiste :'(
    Server doesn’t listen
    The server doesn’t accept connections: the connection library reports
    could not connect to server: Conexión rehusada Is the server running on host “localhost” (127.0.0.1) and accepting TCP/IP connections on port 9999?

  5. Lo pude corregir pero quiero ingresar desde el pgAdmin pero no puedo me sale lo siguiente:
    An error has occurred:

    09:58:03: Error: Error connecting to the server: ERROR: unable to read message kind
    DETAIL: kind does not match between master(52) slot[1] (45)

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *