¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PostgreSQL
  3. Replicación
Extrait - PostgreSQL Administración y explotación de sus bases de datos
Extractos del libro
PostgreSQL Administración y explotación de sus bases de datos Volver a la página de compra del libro

Replicación

Replicación en flujo

La replicación integrada en PostgreSQL, llamada «Streaming Replication», se basa en los mecanismos de copia de seguridad y restauración para poner en marcha una o varias instancias llamadas «standby», de una instancia principal de PostgreSQL. 

Los procedimientos de copia de seguridad físicas integradas se basan en los archivos de traza de transacciones y, lógicamente, la replicación de los datos consiste en recrear de manera continua en las instancias «standby» el contenido de estos archivos de traza de transacciones.

Las primeras técnicas de replicación consistían en volver a leer los archivos de traza de transacciones archivados como resultado del argumento archive_command. Esta técnica siempre ha existido y se puede utilizar para permitir una mayor flexibilidad de la topología de los nodos PostgreSQL.

Con las versiones 9 de PostgreSQL, apareció el protocolo de replicación integrado, que permite a una instancia conectarse a otra instancia para leer de manera continuada el contenido de los archivos de traza de transacciones.

Esta técnica de replicación se puede utilizar en cascada, es decir, que cada uno de los servidores «standby» puede servir de fuente de replicación para otro servidor «standby», limitando de esta manera el peso de los servidores «standby» en el servidor principal.

1. La inicialización

La inicialización de una instancia «standby» consiste en hacer una copia de seguridad física con una herramienta como pg_basebackup, asegurándose de poder tener acceso siempre a los archivos de traza de transacciones intermedios entre el inicio de la copia de seguridad y el momento del arranque de la instancia «standby».

Este último punto es importante porque, como en el proceso de restauración PITR, la continuidad de los archivos de traza de transacciones es el medio utilizado para asegurar la continuidad de la replicación.

El comando pg_basebackup permite hacer esta copia de seguridad física inicial...

Replicación en cascada

Es posible elaborar topologías de replicación complejas, principalmente poniendo las instancias «standby» unas junto a otras. Esta elección se hace en función de las posibilidades de la red, de las necesidades reales y de las evoluciones previstas en el marco del plan de recuperación o de continuidad de la actividad (PRA/PCA).

El número de instancias «standby» que es posible poner en cascada no tiene límite.

Cambio de topología

No existe un mecanismo de cambio automático integrado en PostgreSQL. Sí hay herramientas dedicadas, pero se incluyen en los planes de alta disponibilidad, que sobrepasan el marco de este libro.

Existe un comando que permite a una instancia «standby» convertirse en una instancia «primary»: se trata del comando promote de la herramienta pg_ctl, que simplemente va a detener la replicación y permitir las transacciones en modo lectura/escritura. En esta ocasión, la instancia va a cambiar de línea de tiempo (visible en los nombres de los archivos de traza de transacciones) y entonces ya no es posible conectarse a la instancia promovida a su antigua instancia «primary». El comando se recupera en el script de control pg_ctlcluster, disponible en los sistemas Debian.

Las otras instancias «standby» se pueden conectar a esta nueva instancia «primary» modificando el argumento host de la directiva primary_conninfo del archivo recovery.conf e indicando la nueva línea de tiempo que hay que seguir con la directiva recovery_target_timeline o, más simplemente, indicando latest como valor.

Replicación síncrona

Por defecto, la replicación integrada es asíncrona, es decir, que la transacción en el servidor «primary» se valida antes de ser replicada. Es posible configurar la replicación en modo síncrono para replicar los datos antes de validar la transacción. Por defecto, los datos se replican, pero no son visibles inmediatamente en la instancia «standby». Desde de la versión 9.6 de PostgreSQL, es posible configurar la replicación para que sea síncrona hasta la visibilidad de los datos en la instancia «standby».

Una instancia «standby» se debe declarar en la directiva synchronous_standby_names de la instancia «primary». Esta directiva puede contener una lista de nombres separados por comas o combinaciones con los operadores FIRST o ANY, como se ha explicado en el capítulo Explotación. Cada instancia «standby» se identifica utilizando el argumento application_name de la cadena de conexión primary_conninfo del archivo recovery.conf.

Una vez arrancada la instancia «standby» para tener en cuenta esta configuración, es necesario verificar el estado de la columna sync_state de la vista pg_stat_replication para la conexión deseada, que debe tener el valor sync, y no async.

Además de esta configuración inicial, es posible ajustar de manera más fina...

Replicación lógica integrada

Desde la versión 10 de PostgreSQL, es posible implementar una replicación lógica sin herramienta adicional, es decir, sin utilizar Slony o Londiste. Esta funcionalidad se basa en los archivos de traza de transacciones enriquecidos y decodificados por las funciones de decodificación lógica de PostgreSQL. En los casos de la replicación lógica, independientemente de la técnica, se habla de «provider» para designar la instancia que ofrece el dato y de «subscriber» para la instancia que lo recibe.

Para permitir esta replicación, es necesario modificar el valor de la directiva de configuración wal_level a logical, en lugar de replica por defecto. Esta modificación hace necesario un rearranque de la instancia.

Una vez que se aplica esta modificación y el archivo pg_hba.conf se adapta para aceptar las conexiones, las siguientes sentencias CREATE PUBLICATION y CREATE SUBSCRIPTION permiten establecer un juego de tablas para replicar, después de abonarse a ellas desde otra instancia.

La siguiente sentencia permite crear la publicación en la instancia donde los datos de las tablas se modifican:

CREATE PUBLICATION clientes_repli FOR TABLE public.clientes,  
public.facturas, public.prestaciones; 

Luego, desde la instancia donde los datos se deben leer, indicando la conexión a la instancia «provider»:...

Replicación lógica con Slony

La herramienta Slony-I es un sistema de replicación lógica asíncrona maestro-esclavo. Permite replicar datos entre varios servidores PostgreSQL, sabiendo que solo uno de estos servidores será el servidor maestro, y el resto, los servidores esclavos. Estos servidores esclavo se pueden poner en cascada, pero la cantidad de servidores esclavos debe permanecer razonable para no tener impacto negativo en el rendimiento.

El servidor maestro es el que debe utilizar las aplicaciones para todas las modificaciones de datos. Los servidores esclavos reciben una copia de estas modificaciones de manera asíncrona. Esta replicación asíncrona implica que el servidor maestro no espera la validación de los servidores esclavos para validar su propia transacción a la aplicación cliente. La validación de una transacción en el servidor maestro solo tiene en cuenta el estado del servidor maestro, y no el de los servidores esclavos.

La replicación se puede realizar en una red local o en las redes extendidas (WAN). Esto se debe al hecho de que Slony utiliza conexiones TCP entre los servidores.

Las diferentes posibilidades de Slony son:

  • La posibilidad de añadir servidores al grupo de replicación durante el funcionamiento de este grupo, así como la posibilidad de sustituir un servidor maestro por otro.

  • La posibilidad de sustituir el servidor maestro durante un funcionamiento erróneo, por ejemplo no disponibilidad, temporal o no.

  • La posibilidad de modificar la estructura de los datos durante el funcionamiento y propagar estas modificaciones a todos los servidores esclavos.

La unidad de replicación de Slony es la tabla. En un mismo grupo de servidores, Slony-I copia los datos de una tabla utilizando los triggers ubicados en estas tablas durante la inicialización de Slony. Es posible usar varias tablas, con la condición de que todas existan dentro de la misma base de datos.

Además, cada tabla debe tener una clave primaria; si el modelo de datos no define una clave primaria sobre una tabla, Slony-I puede añadir una columna para esto.

1. Instalación de Slony

Slony está disponible en forma de paquete en los sistemas Debian y Red Hat. El comando de instalación bajo...

Evolución de las soluciones de replicación

Las evoluciones técnicas que han traído las últimas versiones de PostgreSQL permiten considerar los desarrollos alrededor de la replicación lógica integrada en PostgreSQL sin sobrecargar ni hacer doble escritura y, por lo tanto, sin impacto sobre el rendimiento.

Hay otras soluciones que ven la luz y van a permitir completar las posibilidades actuales de PostgreSQL 

BDR permite crear replicaciones de servidores principales a servidores principales, algunas veces llamadas replicación multimaestros. Esta solución ya es funcional y se debería integrar en una futura versión de PostgreSQL, posiblemente en la versión 11, que sale a finales de 2018.