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.
