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.
Gracias por el post, por favor necesito una última ayuda sobre qué contenido tendrían los archivos, puedes por favor compartir una sección de las líneas configuradas.
/etc/pgpool-II-95/pgpool.conf —> es un nuevo archivo?
/var/lib/pgsql/9.5/data/postgresql.conf
/etc/pgpool-II-95/pcp.conf —> es un nuevo archivo?
/etc/pgpool-II-95/pool_hba.conf —> es un nuevo archivo?
/var/lib/pgsql/9.5/data/postgresql.conf
/var/lib/pgsql/9.5/data/pg_hba.conf
Hola Eder cuando instalas pgpool, en el directorio /etc/pgpool-II-95/ se crea el archivo pgpool.conf.sample, puedes crear el archivo pgpool.conf a partir del .sample, del mismo modo para el archivo pcp.conf y pool_hba.conf, las lineas configuradas están indicadas en el post.
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
Hola Mario, disculpa por la demora, tendrías que hacer una configuración adicional de replicación, este post te podría ayudar https://goo.gl/audSUq
Saludos,
Cuando deseo hacer la conexion con pgpool para empezar las pruebas me muestra esto :
psql: could not connect to server: Conexión rehusada
Is the server running on host “localhost” (127.0.0.1) and accepting
TCP/IP connections on port 9999?
Me podrias ayudar
Hola Ive, puedes hacer los siguiente.
– Revisar si tu servidor tiene resolucion IPv6, donde localhost toma por defecto la direccion ::1.
– Cambiar en el archivo postgresql.conf el parametro listen_addresses a localhost o colocar * para escuchar todas las interfaces.
– Revisar si no se esta detras de un firewall.
Saludos,
Hice lo que me dijo pero el error persiste :'(
Server doesn’t listen
The server doesn’t accept connections: the connection library reports
could not connect to server: Conexión rehusada Is the server running on host “localhost” (127.0.0.1) and accepting TCP/IP connections on port 9999?
Lo pude corregir pero quiero ingresar desde el pgAdmin pero no puedo me sale lo siguiente:
An error has occurred:
09:58:03: Error: Error connecting to the server: ERROR: unable to read message kind
DETAIL: kind does not match between master(52) slot[1] (45)