Blog - Jorge Rodriguez Flores
← Volver al blog

Alta disponibilidad de PostgreSQL con PgPool

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