Replication Slots in PostgreSQL 9.4

EL presente instructivo tiene como finalidad la configuración de Streaming replication slots in PostgreSQL 9.4

Streaming replication slots, está presente a partir de la versión 9.4 de postgreSQL y proporcionan una forma automatizada para garantizar que el maestro no elimina segmentos WAL hasta que se asegure que hayan sido recibidas por todos los recursos(esclavos), y que el maestro no elimina las filas que podría causar un conflicto de recuperación, incluso cuando se desconecta el modo de espera (esclavo).

En lugar de utilizar Streaming replication slots, es posible evitar la eliminación de segmentos WAL viejos utilizando wal_keep_segments, o mediante el almacenamiento de los segmentos en un directorio (archive) usando archive_command. Sin embargo, estos métodos a menudo resultan en la retención de más segmentos WAL que se requiere, mientras que las ranuras de replicación retienen sólo el número de segmentos que se sabe que sea necesario. Una ventaja de estos métodos es que limitan la necesidad de espacio para pg_xlog; actualmente no hay manera de hacer esto utilizando las ranuras de replicación.

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 contar con instalación de postgresql 9.4 en servidor maestro y esclavo
  • Se debe tener configurado Relación de confianza conexión SSH http://wp.me/p13Tvb-ac

Plataforma:

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

Configuración del maestro:

1. Editar archivo de configuración de postgres

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


2. Efectuar los siguientes cambios:

listen_addresses = '*' # 'localhost,IP_address_of_THIS_host'
port = 5432
wal_level = logical
max_wal_senders = 3
max_replication_slots = 3

Donde:

  • wal_level -> Define cuanta información se grabará en los archivos WAL generados
  • max_wal_senders -> Indica las conexiones concurrentes o cuantos servidores de Standby se van a conectar al servidor primario
  • max_replication_slots -> Especifica el número máximo de ranuras de replicación que el servidor puede soportar

NOTA: Los parámetros hot_standby y max_standby_archive_delay son ignorados por el servidor maestro

3. Editar archivo de configuración de conexión

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

4. Efectuar los siguientes cambios

host replication postgres IP_address_of_slave/32 trust

5. Iniciar postgresql

operador@postgreSQL01:/# /etc/init.d/postgresql start

6. Verificar inicio servidor postgresql

operador@postgreSQL01:/# pg_lsclusters 
Ver Cluster Port Status Owner    Data directory           Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

En el Servidor Esclavo:

Nota: El servidor de Postgres debe estar desactivado

7. Efectuar la transferencia del cluster del servidor maestro al servidor esclavo

operador@postgreSQL02:/# pg_basebackup -P -R -X stream -c fast -h IP_MAESTRO -U postgres -D /var/lib/postgresql/9.4/main

8.- Colocar permisos apropiados:

operador@postgreSQL02:/# chmod 700 /var/lib/postgresql/9.4/main

9.- Colocar el dueño apropiados:

operador@postgreSQL02:/# chown postgres:postgres -R /var/lib/postgresql/9.4/main

En el Servidor Maestro:

10. Acceder a postgresql:

operador@postgreSQL01:/# psql -U postgres
psql (9.4.3)
Digite «help» para obtener ayuda.

postgres=#

11. Crea una nueva ranura de la replicación física:

postgres=# select * from pg_create_physical_replication_slot('replica_servidor');
     slot_name    | xlog_position
 ---------------- + ---------------
  replica_servidor|

donde:

  • replica_servidor -> nombre del slot physical creado, el cual puede contener letras minúsculas, números y guión bajo

12. Verificar la creación:

postgres = # SELECT * FROM pg_replication_slots;
slot_name | slot_type | datoid | base | activo | xmin | restart_lsn
 ------------- + ----------- + -------- + ---------- + ---- ---- + ------ + -------------
  node_a_slot | physical | | | f | |
 (1 fila)

En el Servidor Esclavo:

13. Editar archivo de configuración recovery.conf:

operador@postgreSQL01:/# nano /var/lib/postgresql/9.4/main/recovery.conf

Incluir la siguiente información:

standby_mode = 'on'
primary_conninfo = 'user=postgres host=master port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
primary_slot_name = 'replica_servidor'

14. Editar archivo de configuración de postgres:

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

15. Efectuar los siguientes cambios:

listen_addresses = '*' # 'localhost,IP_address_of_THIS_host'
port = 5432
wal_level = logical
hot_standby = on

Donde:

  • wal_level -> Define cuanta información se grabará en los archivos WAL generados
  • hot_standby -> activar el modo standby

16. Editar archivo de configuración de conexión

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

17. Efectuar los siguientes cambios:

host replication postgres IP_address_of_master/32 trust

18. Iniciar postgresql:

operador@postgreSQL02:/# /etc/init.d/postgresql start

En el Servidor Maestro:

Verificar la creación de la replicación

El estado de cada ranura de la replicación se puede verificar a través de una vista:

postgres=# select * from pg_replication_slots;

Muestra información sobre la replicación de servidor de esclavo conectado al maestro:

postgres=# select * from pg_stat_replication;

Enlaces:
http://michael.otacoo.com/postgresql-2/postgres-9-4-feature-highlight-replication-slots/
http://peter.eisentraut.org/blog/2015/03/03/the-history-of-replication-in-postgresql/
Alexey Lesovsky -> youtube.com
http://blog.2ndquadrant.com/postgresql-9-4-slots/
http://www.postgresql.org/docs/9.4/static/monitoring-stats.html
http://www.postgresql.org/docs/current/static/warm-standby.html
https://vibhorkumar.wordpress.com/2014/05/21/monitoring-approach-for-streaming-replication-with-hot-standby-in-postgresql-9-3/
http://www.sraoss.jp/pipermail/pgpool-general/2014-February/002601.html
http://www.sraoss.jp/pipermail/pgpool-general/2014-February/002602.html

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