Cómo configurar la replicación lógica de PostgreSQL en Ubuntu

Cómo configurar la replicación lógica de PostgreSQL en Ubuntu
“Los datos son una parte muy importante de cualquier aplicación. PostgreSQL es un servidor de base de datos popular para almacenar los datos de la aplicación. La disponibilidad de datos es una característica esencial de cualquier base de datos. Es mejor mantener múltiples copias de la base de datos para garantizar la disponibilidad de datos de la aplicación. Si no se almacena una copia de copia de seguridad de la base de datos y si la base de datos se bloquea en cualquier momento, entonces la aplicación no será accesible. Se pueden almacenar una o más copias de la base de datos PostgreSQL para evitar esta situación, y se llama replicación. Se pueden hacer dos tipos de replicación en PostgreSQL. Estos son replicación lógica y replicación física. La forma de configurar la replicación lógica de la base de datos PostgreSQL se ha explicado en este tutorial."

Replicación lógica

La forma de replicar los objetos de datos y sus cambios se llama replicación lógica. Funciona basado en la publicación y la suscripción. Utiliza Wal (registro de escritura) para registrar los cambios lógicos en la base de datos. Los cambios en la base de datos se publican en la base de datos del editor, y el suscriptor recibe la base de datos replicada del editor en tiempo real para garantizar la sincronización de la base de datos.

La arquitectura de la replicación lógica

El modelo de editor/suscriptor se utiliza en la replicación lógica de PostgreSQL. El conjunto de replicación se publica en el nodo del editor. Una o más publicación está suscrita por el nodo del suscriptor. La replicación lógica copia una instantánea de la base de datos de publicación al suscriptor, que se llama fase de sincronización de la tabla. La consistencia transaccional se mantiene utilizando Commit cuando se realiza cualquier cambio en el nodo del suscriptor. El método manual de replicación lógica de PostgreSQL se ha mostrado en la siguiente parte de este tutorial.

El proceso de replicación lógica se muestra en el siguiente diagrama.

Todos los tipos de operación (insertar, actualizar y eliminar) se replican en la replicación lógica de forma predeterminada. Pero los cambios en el objeto que se replicará pueden ser limitados. La identidad de replicación debe configurarse para el objeto que se requiere para agregar a la publicación. La clave primaria o de índice se utiliza para la identidad de replicación. Si la tabla de la base de datos de origen no contiene ninguna clave primaria o de índice, entonces la lleno se utilizará para la identidad de réplica. Eso significa que todas las columnas de la tabla se utilizarán como clave. La publicación se creará en la base de datos de origen utilizando el comando Crear publicación, y la suscripción se creará en la base de datos de destino utilizando el comando Crear suscripción. La suscripción se puede detener o reanudar utilizando el comando alter de suscripción y eliminarse mediante el comando de suscripción de caída. El remitente WAL implementa la replicación lógica, y se basa en la decodificación de WAL. El remitente WAL carga el complemento de decodificación lógica estándar. Este complemento transforma los cambios recuperados del WAL en el proceso de replicación lógica, y los datos se filtran en función de la publicación. A continuación, los datos se transfieren continuamente utilizando el protocolo de replicación al trabajador de replicación que mapea los datos con la tabla de la base de datos de destino y aplica los cambios basados ​​en el orden de transacción.

Características de replicación lógica

Algunas características importantes de la replicación lógica se han mencionado a continuación.

  • Los objetos de datos se replican en función de la identidad de replicación, como la clave primaria o la clave única.
  • Se pueden usar diferentes índices y definiciones de seguridad para escribir datos en el servidor de destino.
  • El filtrado basado en eventos se puede realizar utilizando una replicación lógica.
  • La replicación lógica admite la versión cruzada. Eso significa que se puede implementar entre dos versiones diferentes de la base de datos PostgreSQL.
  • Múltiples suscripciones están respaldadas por la publicación.
  • El pequeño conjunto de tablas se puede replicar.
  • Se necesita una carga mínima del servidor.
  • Se puede usar para actualizaciones y migración.
  • Permite la transmisión paralela entre los editores.

Ventajas de la replicación lógica

Algunos beneficios de la replicación lógica se mencionan a continuación.

  • Se utiliza para la replicación entre dos versiones diferentes de las bases de datos PostgreSQL.
  • Se puede usar para replicar datos entre diferentes grupos de usuarios.
  • Se puede usar para unir múltiples bases de datos en una sola base de datos con fines analíticos.
  • Se puede usar para enviar cambios incrementales en un subconjunto de una base de datos o una única base de datos a otras bases de datos.

Desventajas de la replicación lógica

Algunas limitaciones de la replicación lógica se mencionan a continuación.

  • Es obligatorio tener la clave principal o la clave única en la tabla de la base de datos de origen.
  • Se requiere el nombre calificado completo de la tabla entre la publicación y la suscripción. Si el nombre de la tabla no es el mismo para la fuente y el destino, entonces la replicación lógica no funcionará.
  • No admite la replicación bidireccional.
  • No se puede usar para replicar esquema/ddl.
  • No se puede usar para replicar truncar.
  • No se puede usar para replicar secuencias.
  • Es obligatorio agregar privilegios de súper usuario a todas las tablas.
  • Se pueden usar diferentes orden de columnas en el servidor de destino, pero los nombres de la columna deben ser los mismos para la suscripción y la publicación.

Implementación de replicación lógica

Los pasos de implementación de replicación lógica en la base de datos PostgreSQL se han mostrado en esta parte de este tutorial.

Requisitos previos

A. Configurar los nodos maestro y réplica

Puede configurar el maestro y los nodos de réplica de dos maneras. Una forma es usar dos computadoras separadas donde se instala el sistema operativo Ubuntu, y otra forma es usar dos máquinas virtuales que están instaladas en la misma computadora. El proceso de prueba del proceso de replicación física será más fácil si usa dos computadoras separadas para el nodo maestro y el nodo de réplica porque se puede asignar fácilmente una dirección IP específica para cada computadora. Pero si usa dos máquinas virtuales en la misma computadora, entonces la dirección IP estática requerirá que se establezca para cada máquina virtual y asegúrese de que ambas máquinas virtuales puedan comunicarse entre sí a través de la dirección IP estática. He usado dos máquinas virtuales para probar el proceso de replicación física en este tutorial. El nombre de host del maestro El nodo se ha establecido en master fahmida, y el nombre de host del réplica El nodo se ha establecido en fahmida-esclavo aquí.

B. Instalar PostgreSQL en nodos maestros y réplicos

Debe instalar la última versión del servidor de base de datos PostgreSQL en dos máquinas antes de comenzar los pasos de este tutorial. PostgreSQL versión 14 se ha utilizado en este tutorial. Ejecute los siguientes comandos para verificar la versión instalada del PostgreSQL en el nodo maestro.

Ejecute el siguiente comando para convertirse en un usuario raíz.

$ sudo -i

Ejecute los siguientes comandos para iniciar sesión como usuario de Postgres con privilegios de superusuario y hacer la conexión con la base de datos PostgreSQL.

$ SU - Postgres
$ psql

La salida muestra que PostgreSQL versión 14.4 se ha instalado en Ubuntu versión 22.04.1.

Configuraciones de nodo primario

Las configuraciones necesarias para el nodo primario se han mostrado en esta parte del tutorial. Después de configurar la configuración, debe crear una base de datos con la tabla en el nodo primario y crear un rol y publicación para recibir una solicitud del nodo de réplica, y almacenar el contenido actualizado de la tabla en el nodo de réplica.

A. Modificar el postgresql.confusión archivo

Debe configurar la dirección IP del nodo primario en el archivo de configuración PostgreSQL nombrado postgresql.confusión que se encuentra en la ubicación, /etc/postgresql/14/main/postgresql.confusión. Inicie sesión como usuario raíz en el nodo primario y ejecute el siguiente comando para editar el archivo.

$ nano/etc/postgresql/14/main/postgresql.confusión

Descubra el escuchar_addresses Variable en el archivo, elimine el hash (#) desde el comienzo de la variable hasta la línea de la línea. Puede establecer un asterisco (*) o la dirección IP del nodo primario para esta variable. Si establece Asterisk (*), entonces el servidor primario escuchará todas las direcciones IP. Escuchará la dirección IP específica si la dirección IP del servidor primario está configurado en esta variable. En este tutorial, la dirección IP del servidor principal que se ha establecido en esta variable es 192.168.10.5.

escuchar_addresss = ""

A continuación, descubra el Wal_Level variable para establecer el tipo de replicación. Aquí, el valor de la variable será lógico.

wal_level = lógico

Ejecute el siguiente comando para reiniciar el servidor PostgreSQL después de modificar el postgresql.confusión archivo.

$ systemctl reiniciar postgresql

*** NOTA: Después de configurar la configuración, si se enfrenta a un problema al iniciar el servidor PostgreSQL, ejecute los siguientes comandos para la versión 14 de PostgreSQL.

$ sudo chmod 700 -r/var/lib/postgresql/14/main
$ sudo -i -u Postgres
#/usr/lib/postgresql/10/bin/pg_ctl reinsart -d/var/lib/postgresql/10/main

Podrá conectarse con el servidor PostgreSQL después de ejecutar el comando anterior correctamente.

Inicie sesión en el servidor PostgreSQL y ejecute la siguiente declaración para verificar el valor de nivel WAL actual.

# Show wal_level;

B. Crear una base de datos y una tabla

Puede usar cualquier base de datos PostgreSQL existente o crear una nueva base de datos para probar el proceso de replicación lógica. Aquí, se ha creado una nueva base de datos. Ejecute el siguiente comando SQL para crear una base de datos llamada muestreado.

# Crear base de datos SampleDB;

La siguiente salida aparecerá si la base de datos se crea correctamente.

Tienes que cambiar la base de datos para crear una tabla para el Sumpledb. El "\ c" con el nombre de la base de datos se usa en PostgreSQL para cambiar la base de datos actual.

La siguiente instrucción SQL cambiará la base de datos actual de Postgres a SampleDB.

# \ c SampleDB

La siguiente instrucción SQL creará una nueva tabla llamada Libro en la base de datos de SampleDB. La tabla contendrá tres campos. Estos son ID, Título y Autor_Name.

# Crear libro de mesa (
ID Clave primaria en serie,
Título Varchar (50),
autor_name varchar (50));

La siguiente salida aparecerá después de ejecutar las declaraciones SQL anteriores.

Ejecute las siguientes dos declaraciones de inserción para insertar dos registros en la tabla de libros.

# Insertar en el libro (Título, Autor_Name)
Valores ('PostgreSQL 14 Administration Cookbook', 'Simon Riggs, Gianni Ciolli');
# Insertar en el libro (Título, Autor_Name)
Valores ('aprender postgresql', 'Luca Ferrari, Enrico pirozzi');

La siguiente salida aparecerá si los registros se insertan correctamente.

Ejecute el siguiente comando para crear un rol con la contraseña que se utilizará para hacer una conexión con el nodo primario desde el nodo de réplica.

# Crear la contraseña de inicio de sesión de replicación de replicación de rol '12345';

La siguiente salida aparecerá si el rol se crea con éxito.

Ejecute el siguiente comando para otorgar todos los permisos en el libro mesa para el réplica.

# Otorgar todo en el libro a Replicauser;

La siguiente salida aparecerá si se otorga permiso para el réplica.

C. Modificar el PG_HBA.confusión archivo

Debe configurar la dirección IP del nodo de réplica en el archivo de configuración PostgreSQL nombrado PG_HBA.confusión que se encuentra en la ubicación, /etc/postgresql/14/main/PG_HBA.confusión. Inicie sesión como usuario raíz en el nodo primario y ejecute el siguiente comando para editar el archivo.

$ nano/etc/postgresql/14/main/pg_hba.confusión

Agregue la siguiente información al final de este archivo.

anfitrión /32 scram-sha-256

La IP del servidor de esclavos está configurado en "192.168.10.10 "aquí. Según los pasos anteriores, la siguiente línea se ha agregado al archivo. Aquí, el nombre de la base de datos es Sumpledb, el usuario es réplica, y la dirección IP del servidor de réplica es 192.168.10.10.

Host SampleDB Replicauser 192.168.10.10/32 SCRAM-SHA-256

Ejecute el siguiente comando para reiniciar el servidor PostgreSQL después de modificar el PG_HBA.confusión archivo.

$ systemctl reiniciar postgresql

D. Crear publicación

Ejecute el siguiente comando para crear una publicación para el libro mesa.

# Crear publicación BookPub para Table Book;

Ejecute el siguiente meta-comando PSQL para verificar que la publicación se cree con éxito o no.

$ \ DRP+

La siguiente salida aparecerá si la publicación se crea correctamente para la tabla libro.

Configuraciones de nodo de réplica

Debe crear una base de datos con la misma estructura de tabla que se creó en el nodo primario en el nodo de réplica y crear una suscripción para almacenar el contenido actualizado de la tabla desde el nodo primario.

A. Crear una base de datos y una tabla

Puede usar cualquier base de datos PostgreSQL existente o crear una nueva base de datos para probar el proceso de replicación lógica. Aquí, se ha creado una nueva base de datos. Ejecute el siguiente comando SQL para crear una base de datos llamada replicada.

# Crear base de datos ReplicAdB;

La siguiente salida aparecerá si la base de datos se crea correctamente.

Tienes que cambiar la base de datos para crear una tabla para el replicada. Use el "\ c" con el nombre de la base de datos para cambiar la base de datos actual como antes.

La siguiente instrucción SQL cambiará la base de datos actual desde post -put a replicada.

# \ c replicadb

La siguiente instrucción SQL creará una nueva tabla llamada libro en el replicada base de datos. La tabla contendrá los mismos tres campos que la tabla creada en el nodo primario. Estos son ID, Título y Autor_Name.

# Crear libro de mesa (
ID Clave primaria en serie,
Título Varchar (50),
autor_name varchar (50));

La siguiente salida aparecerá después de ejecutar las declaraciones SQL anteriores.

B. Crear suscripción

Ejecute la siguiente instrucción SQL para crear una suscripción para la base de datos del nodo primario para recuperar el contenido actualizado de la tabla de libros desde el nodo primario al nodo de réplica. Aquí, el nombre de la base de datos del nodo primario es Sumpledb, La dirección IP del nodo primario es "192.168.10.5", El nombre de usuario es réplica, y la contraseña es "12345".

# Crear suscripción BooksUB Connection 'dbname = SampleDb host = 192.168.10.5 usuario = replicauser contraseña = 12345 puerto = 5432 'BookPub;

La siguiente salida aparecerá si la suscripción se crea correctamente en el nodo de réplica.

Ejecute el siguiente meta-comando PSQL para verificar que la suscripción se cree con éxito o no.

# \ DRS+

La siguiente salida aparecerá si la suscripción se crea correctamente para la tabla libro.

C. Verifique el contenido de la tabla en el nodo de réplica

Ejecute el siguiente comando para verificar el contenido de la tabla de libros en el nodo de réplica después de la suscripción.

# Libro de mesa;

La siguiente salida muestra que se han agregado dos registros que se insertaron en la tabla del nodo primario a la tabla del nodo de réplica. Por lo tanto, está claro que la replicación lógica simple se ha completado correctamente.

Puede agregar uno o más registros o actualizar registros o eliminar registros en la tabla de libros del nodo primario o agregar una o más tablas en la base de datos seleccionada del nodo primario y verificar la base de datos del nodo de réplica para verificar que el contenido actualizado de La base de datos primaria se replica correctamente en la base de datos del nodo de réplica o no.

Inserte nuevos registros en el nodo primario:

Ejecute las siguientes declaraciones SQL para insertar tres registros en el libro tabla del servidor primario.

# Insertar en el libro (Título, Autor_Name)
Valores ('El arte de Postgresql', 'Dimitri Fontaine'),
('Postgresql: Up and Running, 3ra edición', 'Regina Obe y Leo Hsu'),
('PostgreSQL High Performance Cookbook', 'Chitij Chauhan, Dinesh Kumar');

Ejecute el siguiente comando para verificar el contenido actual del libro tabla en el nodo primario.

# Seleccionar * del libro;

La siguiente salida muestra que se han insertado correctamente tres registros nuevos en la tabla.

Verifique el nodo de réplica después de la inserción

Ahora tienes que verificar si el libro La tabla del nodo de réplica se ha actualizado o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido del libro mesa.

# Libro de mesa;

La siguiente salida muestra que se han insertado tres nuevos registros en el libros tabla de la réplica nodo que se insertó en el primario nodo del libro mesa. Entonces, los cambios en la base de datos principal se han replicado correctamente en el nodo de réplica.

Actualizar registro en el nodo primario

Ejecute el siguiente comando de actualización que actualizará el valor del nombre del autor campo donde el valor del campo de identificación es 2. Solo hay un registro en el libro tabla que coincide con la condición de la consulta de actualización.

# Actualizar el libro Set Author_name = "Fahmida" donde id = 2;

Ejecute el siguiente comando para verificar el contenido actual del libro mesa en el primario nodo.

# Seleccionar * del libro;

La siguiente salida muestra que el autor_name El valor de campo del registro en particular se ha actualizado después de ejecutar la consulta de actualización.

Verifique el nodo de réplica después de la actualización

Ahora tienes que verificar si el libro La tabla del nodo de réplica se ha actualizado o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido del libro mesa.

# Libro de mesa;

La siguiente salida muestra que un registro se ha actualizado en el libro tabla del nodo de réplica, que se actualizó en el nodo primario del libro mesa. Entonces, los cambios en la base de datos principal se han replicado correctamente en el nodo de réplica.

Eliminar registro en el nodo primario

Ejecute el siguiente comando de eliminación que eliminará un registro del libro tabla de la primario nodo donde el valor del campo Author_Name es "Fahmida". Solo hay un registro en el libro tabla que coincide con la condición de la consulta de eliminación.

# Eliminar del libro donde autor_name = "fahmida";

Ejecute el siguiente comando para verificar el contenido actual del libro mesa en el primario nodo.

# Seleccionar * del libro;

La siguiente salida muestra que se ha eliminado un registro después de ejecutar la consulta de eliminación.

Verifique el nodo de réplica después de eliminar

Ahora tienes que verificar si el libro La tabla del nodo de réplica se ha eliminado o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido del libro mesa.

# Libro de mesa;

La siguiente salida muestra que un registro se ha eliminado en el libro tabla del nodo de réplica, que se eliminó en el nodo primario del libro mesa. Entonces, los cambios en la base de datos principal se han replicado correctamente en el nodo de réplica.

Conclusión

El propósito de la replicación lógica para mantener la copia de seguridad de la base de datos, la arquitectura de la replicación lógica, las ventajas y desventajas de la replicación lógica, y los pasos de implementación de la replicación lógica en la base de datos PostgreSQL se han explicado en este tutorial con ejemplos. Espero que el concepto de replicación lógica se borre para los usuarios, y los usuarios puedan usar esta función en su base de datos PostgreSQL después de leer este tutorial.