Servidor de pool de conexiones y proxy de replicación (middleware) que funciona entre servidores PostgreSQL y un cliente de base de datos PostgreSQL. Básicamente, actúa como un proxy inteligente entre las aplicaciones [clientes] y los servidores PostgreSQL. Una vez configurado pgpool2 [/etc/pgpool2/pgpool.conf], los clientes se conectan a pgpool, no directamente a PostgreSQL:
En lugar de conectar a PostgreSQL [puerto 5432])
$ psql -h localhost -p 5432 -U usuario -d basedatos
Se conectan a pgpool que por defecto escucha en puerto 9999 y pcp por el 9898)
$ psql -h localhost -p 9999 -U usuario -d basedatos
# pg_md5 -m -u admin secreto123
# pcp_node_info -h localhost -U admin -p 9898 0
# pcp_detach_node -h localhost -U admin -p 9898 0
Ejemplo de configuración mínima para Connection Pooling + Load Balancing
# nano /etc/pgpool2/pgpool.conf
# Backend PostgreSQL servers
backend_hostname0 = '192.168.1.10'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/postgresql/14/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'
#
backend_hostname1 = '192.168.1.11' # standby
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/14/main'
backend_flag1 = 'ALLOW_TO_FAILOVER'
#
# Modo streaming replication
replication_mode = off
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode = 'stream'
#
# Connection pooling
connection_cache = on
num_init_children = 32 # conexiones pre-creadas
max_pool = 4 # conexiones por usuario+base
#
# Failover
failover_command = '/etc/pgpool2/failover.sh %H /tmp/trigger'