Descripción de la replicación y la descodificación lógica

Completado

El parámetro wal_level permite definir la cantidad de información que se debe escribir en el registro. Hay dos opciones: LOGICAL o REPLICA. REPLICA es el valor predeterminado. Este parámetro se establece cuando se inicia el servidor.

Alta disponibilidad

La alta disponibilidad es un servicio de Azure Database for PostgreSQL, que proporciona un servidor de reserva listo para tomar el relevo si hay un error en su servidor activo. La alta disponibilidad en el servidor flexible de Azure Database for PostgreSQL usa la replicación para actualizar automáticamente el servidor en espera con cambios de datos.

Al configurar la alta disponibilidad para el servidor flexible de Azure Database for PostgreSQL, el servidor principal se coloca en una zona de disponibilidad y se crea un servidor en espera en una zona de disponibilidad diferente. Los datos se replican desde el servidor principal hasta el servidor en espera mediante la replicación de streaming de PostgreSQL en modo sincrónico.

Cada zona de disponibilidad consta de uno o varios centros de datos. Las zonas de disponibilidad tienen sus propias fuentes de alimentación, sistemas de refrigeración, infraestructura de red, etc., lo que las hace independientes entre sí. Tres copias de los archivos de datos y los archivos de registro de escritura anticipada (WAL) se almacenan en el almacenamiento con redundancia local dentro de cada zona de disponibilidad, lo que proporciona aislamiento físico entre los servidores principal y en espera. Si se produce un error en una zona de disponibilidad, es probable que las otras dos sigan funcionando. Las zonas de disponibilidad dentro de una región están conectadas por redes de fibra rápidas con latencia de ida y vuelta de menos de 2 milisegundos.

Captura de pantalla en la que se muestran las zonas de disponibilidad de una región conectadas por redes de fibra rápida

Nota

No todas las regiones tienen zonas de disponibilidad.

Con alta disponibilidad, los datos se duplican todo el tiempo que la base de datos está en uso, lo que proporciona una copia actualizada del original. Si se produce un bloqueo, la réplica se puede usar en lugar del original. La replicación tiene un servidor principal y un servidor en espera. El servidor principal envía archivos de registro WAL al servidor en espera, que recibe los archivos de registro WAL.

El servidor en espera informa al servidor principal con información como el último registro de escritura anticipada que escribió y la última posición vacía en el disco, etc. Para definir la frecuencia mínima para que el receptor WAL devuelva un informe, establezca el parámetro wal_receiver_status_interval. El parámetro max_replication_slots define el número máximo de ranuras de replicación que el servidor puede admitir. Cuando wal_level se establece en REPLICA, max_replication_slots debe ser al menos uno; sin embargo, el intervalo de valores permitido está comprendido entre 0 y 262 143.

El parámetro max_wal_senders establece el número máximo de procesos de remitente WAL.

Captura de pantalla que muestra los conceptos de la arquitectura de alta disponibilidad con redundancia de zona

El estado de los servidores principal y en espera se supervisa, y se toman las medidas adecuadas para corregir problemas, incluido el desencadenamiento de una conmutación por error en el servidor en espera. A continuación, se enumeran los estados de alta disponibilidad con redundancia de zona:

  • Inicializando: en proceso de crear un servidor en espera.
  • Replicando: la replicación de datos está en estado estable y es correcta.
  • Correcto: el servidor principal está actualizando el servidor en espera.
  • Conmutando por error: el servidor de bases de datos principal está en proceso de conmutar por error al servidor en espera.
  • Quitando en espera: en proceso de eliminar el servidor en espera.
  • No habilitado: la alta disponibilidad con redundancia de zona no está habilitada.

Puede agregar alta disponibilidad a un servidor de bases de datos existente. Si habilita o deshabilita la alta disponibilidad en un servidor activo, realice la operación cuando haya poca actividad.

En el Portal de Azure:

  1. Vaya al servidor de Azure Database for PostgreSQL.
  2. En la sección Información general, seleccione la configuración actual. Se muestra la sección Proceso y almacenamiento.
  3. En "Alta disponibilidad", active la casilla Alta disponibilidad (con redundancia de zona) para habilitar la alta disponibilidad. No se admite la alta disponibilidad en el nivel Ampliable.

Es importante tener en cuenta que la alta disponibilidad es una opción de recuperación ante desastres. No puede usar el servidor en espera para ningún otro propósito, como permitir el acceso a las bases de datos de solo lectura. Sin embargo, puede configurar la replicación entre dos servidores de Azure Database for PostgreSQL mediante un modelo de publicador y suscriptor. Esta configuración mantiene dos servidores con datos que se replican entre ellos. Por tanto, tiene acceso completo al servidor de suscriptor y puede usar las bases de datos con cualquier finalidad. Esta configuración se practica en el ejercicio al final de este módulo.

Descodificación lógica

La descodificación lógica también usa los datos enviados al registro de escritura previa. Como sugiere el nombre, descodifica las entradas del registro de escritura previa para que sean comprensibles. Todos los cambios de INSERT, UPDATE y DELETE están disponibles para la descodificación lógica.

Es posible que la descodificación lógica se use para la auditoría, el análisis o cualquier otro motivo por el que esté interesado en saber qué ha cambiado y cuándo ha cambiado.

La descodificación lógica extrae los cambios de todas las tablas de la base de datos. Difiere de la replicación en que no se pueden enviar estos cambios a otras instancias de PostgreSQL. En su lugar, una extensión PostgreSQL proporciona un complemento de salida para transmitir los cambios.

La descodificación lógica permite descodificar el contenido del registro de escritura previa en un formato fácil de entender, que se puede interpretar sin conocimiento de la estructura de la base de datos. Azure Database for PostgreSQL admite la descodificación lógica mediante la extensión wal2json, que se instala en los servidores de Azure Database for Postgres.

Se pueden usar otras extensiones, como la extensión pglogical, que permite la replicación de streaming lógico.

Para usar la descodificación lógica, en Parámetros del servidor, establezca:

  • wal_level en LOGICAL.
  • max_replication_slots = 10.
  • max_wal_senders = 10.

Una vez realizados estos cambios, el servidor debe reiniciarse.

Para usar la extensión pglogical desde Azure Portal:

  1. Vaya al servidor de Azure Database for PostgreSQL.
  2. Seleccione Parámetros del servidor y busque shared_preload_libraries. En el cuadro desplegable, seleccione pglogical.
  3. Busque azure.extensions. En el cuadro desplegable, seleccione pglogical.
  4. Para aplicar los cambios, reinicie el servidor.

También debe conceder los permisos de usuario administrador para la replicación:

ALTER ROLE <adminname> WITH REPLICATION;

Para obtener más información, revise la documentación de extensión pglogical documentación en línea.

La descodificación lógica genera cambios en los datos como una secuencia denominada ranura de replicación lógica.

  1. Cada ranura tiene un complemento de salida, que se puede definir.
  2. Cada ranura proporciona cambios desde una sola base de datos, pero una base de datos puede tener varias ranuras.
  3. Normalmente, cada cambio de datos se emite una vez por ranura.
  4. Si se reinicia PostgreSQL, una ranura podría volver a emitir cambios, que el cliente debe controlar.
  5. Las ranuras deben supervisarse. Las ranuras no enumeradas se mantienen en todos los archivos WAL para esos cambios sin enumerar. Esta situación puede dar lugar a una solución de encapsulado de identificador de transacción o de almacenamiento completo.