Últimas entradas

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



2 thoughts on “Alta disponibilidad de PostgreSQL con PgPool

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

Agregue un comentario

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