Cómo configurar la replicación física con PostgreSQL

Cómo configurar la replicación física con PostgreSQL
"PostgreSQL es un popular sistema de gestión de bases de datos relacionales de código abierto que es compatible con el sistema operativo más. La forma de mantener la copia de la base de datos principal se llama replicación. La copia de la base de datos principal se replica en los diferentes servidores físicos. La replicación se realiza configurando la configuración del esclavo maestro. Aquí, el maestro actúa como la instancia principal y almacena la copia principal de la base de datos, y el esclavo actúa como la instancia secundaria que almacena la copia idéntica de la base de datos principal. El maestro funciona como el servidor de lectura-escritura, y el esclavo funciona como el servidor de solo lectura. La base de datos PostgreSQL compatible con dos tipos de replicaciones que ayuda a implementar aplicaciones escalables, de alta disponibilidad y tolerantes a fallas. Estos son la replicación de transmisión física y la replicación lógica. La forma de configurar la replicación física o de transmisión con la base de datos PostgreSQL se ha explicado en este tutorial."

Replicación física o de transmisión

La solución de replicación más utilizada es Registro de escritura (Wal) Replicación de envío o transmisión. El servidor de base de datos en espera o el esclavo de replicación se configuran para hacer la conexión con el servidor primario/maestro. Los registros WAL se transmiten al servidor en espera antes de llenar el archivo WAL. Los datos se transmiten al servidor de espera en modo asíncrono de forma predeterminada. Eso significa que los datos se transmiten al servidor en espera después de cometer la transacción en el servidor primario. Esto puede causar pérdida de datos porque si el servidor maestro se bloquea sin realizar ninguna transacción, entonces esa transacción no se replicará al servidor en espera.

La arquitectura de la replicación física

Un proceso de fondo que se llama Wal Senderer comienza en la máquina maestra después de configurar las configuraciones de la replicación física. Acepta una solicitud del espera y transmite los registros WAL al espera continuamente. Otro proceso de fondo que se llama receptor WAL comienza en la máquina esclava que recibe y aplica los cambios de la base de datos principal a la base de datos de la máquina de esclavos. La replicación física puede definirse mediante el siguiente diagrama.

Características de replicación física

El proceso de replicación física copia los datos completos de un solo clúster, donde el clúster es el conjunto de bases de datos administradas por la base de datos PostgreSQL. La máquina fuente se llama servidor primario, y la máquina de destino se llama servidor en espera. Algunas características importantes de la replicación física se han mencionado a continuación.

Archivos WAL

La serie ordenada de registros WAL es generada por el servidor PostgreSQL. Estos registros se transportarán a otra máquina mediante la replicación física, y la modificación se realizará en la base de datos local. Los registros WAL se dividen en archivos de tamaño igualmente llamado Wal Segments. Estos archivos se crean en el directorio PG_WAL, y los archivos WAL antiguos se eliminan cuando ya no son necesarios.

Estarby caliente, frío y cálido

El servidor en espera de Hot se utiliza para almacenar los datos actualizados y permitir a los clientes ejecutar la transacción de solo lectura. El servidor en espera frío no está en funcionamiento normalmente, y se inicia cuando ocurre una falla. El servidor cálido en espera funciona de manera similar al servidor de espera caliente, excepto que no puede hacer la conexión con el cliente.

Modo de recuperación

Los servidores de espera cálidos y calientes se ejecutan en modo de recuperación, y Postgres importará y aplicará archivos WAL generados por un servidor primario en el modo de recuperación.

Ventajas de la replicación física o de transmisión

  • Se puede usar para mantener la copia de seguridad de la base de datos y ayuda a recuperar los datos cuando el servidor principal se bloquea.
  • Es mejor usar operaciones de solo lectura.
  • Garantiza que se guardará una copia de la última operación del servidor primario.
  • Se pueden conectar uno o más servidores en espera con el servidor primario, y la información de registro se transmite desde el servidor primario a todos los servidores de espera conectados. Si uno de los servidores en espera está desconectado o retrasado por cualquier motivo, la transmisión continuará para otro servidor de espera.
  • Si el servidor primario está desconectado o apagado por algún motivo, esperará enviar los datos actualizados al servidor de espera antes de encender.

Desventajas de la replicación física o de transmisión

  • Replica los datos de forma asincrónica de forma predeterminada. Eso significa que los archivos WAL que no se copian en el servidor en espera se pueden eliminar cuando se realizan cambios en el servidor primario. Es mejor establecer un valor más alto en los wal_keep_segments para evitar la pérdida de datos.
  • No admite la replicación entre diferentes servidores PostgreSQL.
  • Los datos no son más seguros en esta replicación porque los datos confidenciales se pueden extraer sin autenticación del usuario.
  • No trunca el comando.
  • No admite tablas de raíz de particiones, vistas y particiones extranjeras.
  • No admite la replicación de objetos grandes.
  • No admite el esquema de la base de datos y los comandos DDL.

Configuración de replicación física

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

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 nodo maestro se ha establecido en master fahmida, y el nombre de host del nodo de réplica se ha establecido en fahmida-esclavo aquí.

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 usuarios de Postgres con privilegios de Superuser y hacer una 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.

Debe instalar la misma versión PostgreSQL en el nodo de réplica porque la replicación lógica no se puede configurar entre diferentes versiones del servidor PostgreSQL.

Configuración del nodo primario

Las configuraciones necesarias para el nodo primario se han mostrado en esta parte del tutorial. Las siguientes tareas se completarán en el nodo primario.

  • Modificar el PostgreSQL.archivo conf para configurar la dirección IP y el nivel WAL.
  • Cree un usuario de rol con esa contraseña para hacer una conexión con el nodo primario desde el nodo de réplica.
  • Modificar PG_HBA.archivo conf para agregar información de conexión de red

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á un réplica.

wal_level = réplica

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/14/bin/pg_ctl reinsart -d/var/lib/postgresql/14/main

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

Crear rol/usuario para la replicación

Se requiere un rol/usuario con permiso específico para la replicación. Ejecute el siguiente comando SQL para crear un rol con el usuario para la replicación.

# Crear rol réplica con contraseña de inicio de sesión de replicación '12345';

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

Modificar el PG_HBA.confusión archivo

Debe configurar la dirección IP del nodo secundario 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.

host /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.

Replicación del huésped replicauser 192.168.10.10/32 SCRAM-SHA-256

Reiniciar el servidor PostgreSQL

Ejecute el siguiente comando para reiniciar el servidor PostgreSQL como usuario root.

$ systemctl reiniciar postgresql

Configuración de nodo réplica

Las tareas necesarias se realizarán para el nodo de réplica donde se almacenará la copia de la base de datos principal. El contenido de la base de datos existente del nodo de réplica se eliminará para retroceder la base de datos del nodo primario y hacer el servidor PostgreSQL del nodo de réplica de solo lectura.

Detener el servidor PostgreSQL en el nodo de réplica

Ejecute el siguiente comando después de iniciar sesión como usuario raíz para detener el servidor PostgreSQL.

$ SystemCTL Stop PostgreSQL

Eliminar el contenido existente del nodo de réplica

Ejecute el siguiente comando para eliminar el contenido de la base de datos existente del servidor PostgreSQL del nodo de réplica. Es necesario para fines de replicación. El nodo de réplica se trabajará en un modo de solo lectura después de ejecutar el siguiente comando

$ rm -rf/var/lib/postgresql/14/main/*

Probar el proceso de replicación física

Debe crear una base de datos con una o más tablas en el nodo primario para probar si la replicación física funciona correctamente o no. Aquí, la base de datos existente nombrada post -put del servidor principal se ha utilizado para fines de prueba. Si lo desea, puede crear la tabla creando una nueva base de datos. Las siguientes tareas se realizarán en esta parte del tutorial.

  • Agregue una nueva tabla en la base de datos seleccionada del nodo primario.
  • Agregue un registro a la tabla.
  • Almacene la copia de la base de datos del nodo primario al nodo de réplica.
  • Crear una tabla en el servidor primario

Inicie sesión en la base de datos PostgreSQL del nodo primario y ejecute la siguiente instrucción SQL para crear un empleados tabla en la base de datos existente post -put. Si lo desea, puede crear una nueva base de datos y crear la tabla seleccionando la nueva base de datos. No creé ninguna nueva base de datos aquí. Entonces, la tabla se creará en la base de datos predeterminada. La tabla de los empleados contendrá 5 campos. Estos son identificación, nombre, dirección, correo electrónico y teléfono.

# Crear empleados de la tabla (
ID Clave primaria en serie,
Nombre Varchar (15) No nulo,
Texto de la dirección no nulo,
Envíe un correo electrónico a Varchar (30),
Teléfono char (14) no nulo);

Ejecute la siguiente instrucción SQL para insertar un registro en la tabla.

# Insertar en los empleados (nombre, dirección, correo electrónico, teléfono)
Valores ('Farheen Hasan', '12/A, Dhanmondi, Dhaka.',' [email protected] ',' +8801826783423 ');
Ejecute la siguiente instrucción SQL para leer el contenido de la tabla de los empleados.
# Seleccionar * de los empleados;

Si se crea la tabla y se inserta un registro en la tabla correctamente, entonces aparecerá la siguiente salida después de ejecutar la consulta SELECT. Se insertó un registro en la tabla que se muestra en la salida.

Copie la base de datos a un servidor de réplica

Inicie sesión en la base de datos PostgreSQL del servidor de réplica y ejecute la siguiente instrucción SQL para crear una copia de la post -put base de datos del servidor primario en el servidor de réplicas. Después de ejecutar la declaración, solicitará la contraseña del usuario que se creó en el paso anterior. Si la autenticación se realiza con éxito, la replicación se iniciará.

# PG_BASEBACKUP -R -H 192.168.10.5 -U replicauser -d/var/lib/postgresql/14/main -p

La siguiente salida muestra que la replicación se realiza con éxito y se ha copiado 34962 KB.

Ejecute el siguiente comando después de completar la replicación como usuario raíz para reiniciar el servidor PostgreSQL en el nodo de réplica.

$ systemctl reiniciar postgresql

Ahora, inicie sesión en el servidor PostgreSQL en el nodo de réplica y ejecute la siguiente instrucción SQL para verificar si el empleados' la tabla se ha copiado en el nodo de réplica o no.

# seleccionar * de los empleados;

La siguiente salida muestra el contenido del empleados' tabla de la réplica El nodo es el mismo que el contenido del empleados' tabla de la primario nodo.

Puede agregar uno o más registros o actualizar registros o eliminar registros en la tabla de empleados 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:

Ahora, ejecute el siguiente comando de inserción para agregar tres registros más en la tabla de empleados de la post -put base de datos que se encuentra en el primario nodo.

# Insertar en los empleados (nombre, dirección, correo electrónico, teléfono)
Valores ('Abir Hossain', '10, Jigatola, Dhaka.',' [email protected] ',' +8801888564345 '),
('Nila Chowdhury', '67/B, Mirpur, Dhaka.',' [email protected] ',' +8801799453123 '),
('Mizanur Rahman', '8/C, Malibag, Dhaka.',' [email protected] ',' +8801957864564 ');
Ejecute el siguiente comando para verificar el contenido actual de la tabla de empleados en el nodo primario.
# Seleccionar * de los empleados;

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, debe verificar si la tabla de empleados del nodo de réplica ha sido actualizado o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido de la tabla de los empleados.

# Seleccionar * de los empleados;

La siguiente salida muestra que se han insertado tres nuevos registros en el empleados' tabla de la réplica nodo que se insertó en el primario nodo del empleados' 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 campo del teléfono donde el valor del campo de nombre es "nila chowdhury". Solo hay un registro en el empleados' tabla que coincide con la condición de la consulta de actualización.

# Actualizar los empleados establecer phone = "+8801911111111" donde nombre = "nila chowdhury";

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

# Seleccionar * de los empleados;

La siguiente salida muestra que el teléfono 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, debe verificar si la tabla de empleados del nodo de réplica ha sido actualizado o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido de la tabla de los empleados.

# Seleccionar * de los empleados;

La siguiente salida muestra que un registro se ha actualizado en el empleados' tabla de la réplica nodo, que se actualizó en el primario nodo del empleados' 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 empleados' tabla de la primario nodo donde el valor del campo de correo electrónico es "[email protected] ". Solo hay un registro en el empleados' tabla que coincide con la condición de la consulta de eliminación.

# Eliminar de los empleados donde correo electrónico = '[email protected] ';

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

# Seleccionar * de los empleados;

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 el registro:

Ahora, debe verificar si la tabla de empleados del nodo de réplica ha sido eliminada o no. Inicie sesión en el servidor PostgreSQL del nodo de réplica y ejecute el siguiente comando para verificar el contenido de la tabla de los empleados.

# Seleccionar * de los empleados;

La siguiente salida muestra que un registro se ha eliminado en el empleados' tabla de la réplica nodo, que se eliminó en el primario nodo del empleados' 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 física para mantener la copia de seguridad de la base de datos, la arquitectura de la replicación física, las ventajas y desventajas de la replicación física y los pasos de implementación de la replicación física en la base de datos PostgreSQL se han explicado en este tutorial con ejemplos. Espero que el concepto de replicación física 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.