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.
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
Alguna Respuesta