Pgpool2 modo Balanceo de carga para PostgreSQL modo replicación: Streaming Replication y/o Replication Slots

El presente instructivo tiene como finalidad dar a conocer los elementos básicos para la instalación y configuración de pgpool2 en modo balanceo de carga, para una replicación modo: 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. Este modo de replicación se encuentra activo en PostgreSQL a partir de la versión 9.4

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 y 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_SERVIDOR_MAESTRO'
backend_port0 = PUERTO_CONEXION_SERVIDOR_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 -> Dirección IP que permite la conexión
  • 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 proceso “hijo” 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). El nombre de usuario y la contraseña deben ser idénticos a los registrados en el servidor PostgreSQL

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:

# TYPE  DATABASE        USER            ADDRESS              METHOD
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:

# TYPE  DATABASE        USER            ADDRESS              METHOD
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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s