Pgpool2 modo Balanceo de carga con Streaming Replication y Replication Slots en Postgresql 9.4

El presente instructivo tiene como finalidad dar a conocer la instalación y configuración básica de pgpool2 en modo balanceo de carga, para una configuración de Streaming Replication o Replication Slots en PostgreSQL.

Desde la versión 3.0 de pgpool, se encuentra adaptado a la funcionalidad de Streaming Replication/hot Standby, presentes a partir de la versión 9.4 de PostgreSQL.

PgPool-II asume actualmente que Streaming Replication se utiliza en modo Hot Standby, lo que significa que la base de datos en espera(esclavo) estará abierto en modo de sólo lectura.

El balanceo de carga pgPool-II es “basado en sesiones”, y no “basado en declaraciones”. Esto quiere decir, que la selección de nodo DB para el balanceo de carga se elige al principios del período de sesiones. Así que todas las sentencias SQL se envían al mismo nodo DB hasta que finalice la sesión.

En pgPool-II 3.0 o posterior, la sentencia SELECT será balanceada incluso en una transacción, si se configura en el modo maestro/esclavo.

Nota Importante: PgPool-II necesita conocer las “FUNCIONES” que poseen instrucciones destinadas a escribir, borrar o actualizar la base de datos. Dichas funciones son llamadas con SELECT por lo que pgPool-II no debería hacer balanceo de carga. Es por ello que se hace necesario agregar el nombre de dichas funciones en la opción “black_function_list”. Estas funciones no serán balanceadas. En PgPool-II 3.0 hace una búsqueda recursiva y puede encontrar esas funciones en cualquier lugar.

ejemplo: black_function_list = ‘currval,lastval,nextval,setval,my_writing_function’

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe contar con instalación del servicio SSH (servidor y cliente)
  • Se debe tener implementado Replication Slots in PostgreSQL 9.4 http://wp.me/p13Tvb-a6
  • o en su defecto Streaming_Replication PostgreSQL http://wp.me/p13Tvb-7E

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)

PASO 1
Instalación:

operador@PGPOOL01:/# aptitude install pgpool2 postgresql-9.4-pgpool2


Configuración:

1. Editar archivo de configuración de pgpool2:

operador@PGPOOL01:/# nano /etc/pgpool2/pgpool.conf

Efectuar los siguientes cambio:

#CONNECTIONS
listen_addresses = '*'
port = 9999
pcp_port = 9898

#Backend Connection Settings
backend_hostname0 = 'IP_maestro'
backend_port0 = Puerto_maestro
backend_weight0 = 1
backend_data_directory0 = '/var/lib/postgresql/9.4/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = 'IP_esclavo'
backend_port1 = Puerto_esclavo
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/9.4/main'
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 = 'postgres'
sr_check_password = 'contraseña'

Donde:

listen_addresses ->
port -> puerto de escucha del pgpool
pcp_port -> puerto de escucha de los comandos de administración PCP

backend_hostname0 -> dirección IP servidor maestro
backend_port0 -> puerto de escucha del servidor maestro
backend_weight0 = 1
backend_data_directory0 -> ruta de acceso (path) al cluster del servidor maestro
backend_flag0 -> Manejo de la Conmutación por error separada del backend. Valor default ‘ALLOW_TO_FAILOVER’
backend_hostname1 -> dirección IP servidor esclavo
backend_port1 -> puerto de escucha del servidor esclavo
backend_weight1 = 1
backend_data_directory1 -> ruta de acceso (path) al cluster del servidor esclavo
backend_flag1 -> Manejo de la Conmutación por error separada del backend. Valor default ‘ALLOW_TO_FAILOVER’

#Authentication
enable_pool_hba -> activar la autenticación con hash MD5
pool_passwd -> nombre del archivo que contendrá el usuario y contraseña MD5 para manejo de autenticación
authentication_timeout -> time out de autenticación
ssl -> desactivar ssl

#POOLS
num_init_children -> Límite de conexiones simultáneas que soportará pgPool-II de los clientes
max_pool -> cantidad de procesos aceptada por conexiones
child_life_time -> ‘tiempo de vida en segundos’ de un proceso hijo pgPool-II. Cuando un niño está inactivo durante esa cantidad de segundos, se termina y se crea un nuevo hijo. Este parámetro es una medida para evitar pérdidas de memoria y otros errores inesperados.
child_max_connections -> un proceso hijo pgPool-II se dará por terminado después de esta cantidad de conexiones de clientes

#LOGS
log_per_node_statement -> activar los log para monitoreo de balanceo de carga
log_standby_delay -> ‘if_over_threshold’

#CONNECTION POOLING
connection_cache = on

#REPLICATION MODE
replication_mode -> desactivar modo replicación para pgpool
replicate_select -> desactivar modo replicación para pgpool
insert_lock = on

#LOAD BALANCING MODE
load_balance_mode -> activar el modo balanceo de carga
ignore_leading_white_space -> A veces, Select está precedido por un comentario o uno o más espacios. Activar Para proteger contra la no distribución de consultas SELECT empezando con espacios
black_function_list = ‘currval,lastval,nextval,setval’

#MASTER/SLAVE MODE
master_slave_mode -> activar el modo maestro / esclavo
master_slave_sub_mode = ‘stream’
sr_check_period = 10
delay_threshold = 10000000
sr_check_user = ‘postgres’
sr_check_password = ‘contraseña’

PASO 2

Generar archivo para manejo de autenticación MD5

1. Generar archivo de autenticación MD5 de la cuenta de usuario postgres

operador@PGPOOL01:/# pg_md5 -u postgres -m contraseña

Donde:
-u -> usuario
-m -> contraseña

Nota: Con la instrucción anterior quedará registrados en el archivo pool_passwd, la cuenta de usuario y el hash MD5 de la contraseña. Si pool_passwd aún no existe, el comando pg_md5 automáticamente lo crará (/etc/pgpool2/pool_passwd). Los permisos de los archivos deben ser (660)

2.- Para comprobar la generación del archivo pool_passwd:

operador@PGPOOL01:/# cat /etc/pgpool2/pool_passwd | grep postgres
postgres:md54c882dcb24bcb1bc225391a602feca7c

Generar archivo autenticación para manejo de PCP

pgPool-II proporciona una interfaz de control donde un administrador puede recopilar el estado de pgPool-II, y terminar procesos pgPool-II de forma remota. pcp.conf es el archivo de usuario / contraseña utilizada para la autenticación mediante esta interfaz. De igual forma se tiene acceso a los Comandos de PCP, los cuales son comandos UNIX que manipulan pgPool-II a través de la red.

3.- Generar hash MD5 de la contraseña

operador@PGPOOL01:/# pg_md5 contraseña
c882dcb24bcb1bc225391a602feca7c

4.- Copiar la contraseña generada del usuario postgres al archivo pcp.conf

operador@PGPOOL01:/# cat postgres:c882dcb24bcb1bc225391a602feca7c >> /etc/pgpool2/pcp.conf

PASO 3

1. Configurar el acceso del usuario postgres en pgpool:

operador@PGPOOL01:/# nano /etc/pgpool2/pool_hba.conf

2. Efectuar el siguiente cambio:

host    all             postgres        XXX.XXX.XXX.0/24         md5

3. Reiniciar el servicio:

operador@PGPOOL01:/# /etc/init.d/pgpool2 restart

4. Permitir el acceso del servidor pgpool a los servidores master y esclavo:

operador@PostgreSQL01:/# nano /etc/postgresql/9.4/main/pg_hba.conf

5. Incluir lo siguiente:

host    all             postgres        IP_pgpool/32         trust

6. Reiniciar el servicio:

operador@PostgreSQL01:/# /etc/init.d/pgpool2 restart

7. Conexión a pgpool:

operador@PGPOOL01:/# psql -h localhost -p9999 -Upostgres -dpostgres

8. Comprobar el funcionamiento:

postgres=# show pool_nodes;
node_id |   hostname   | port | status | lb_weight |  role   
---------+--------------+------+--------+-----------+---------
 0       | IP_maestro   | 0000 | 2      | 0.500000  | primary
 1       | IP_esclavo   | 0000 | 2      | 0.500000  | standby
(2 rows)

Donde:
El campo “status” está representado por un dígito a partir de [0 a 3].
0 – Este estado sólo se utiliza durante la inicialización. PCP nunca mostrarlo.
1 – Nodo está para arriba. No hay conexiones todavía.
2 – Nodo está para arriba. Las conexiones se agruparon.
3 – Nodo está abajo.

Enlaces:

Pgpool-en
Pgpool-ii-v3
pgpoolII-3.2.4 NEWS
Pgpool-general 2011-November
Evol Monkey Blogspot
How can I observe the effect of load balancing
pgpool-ii-30-officially-released
forums enterprisedb

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s