Cómo configurar la replicación de transmisión física con PostgreSQL 12 en Ubuntu 20.04

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Configuración de la base de datos principal para aceptar conexiones
  • Paso 2: Creación de un rol especial con permisos de replicación
  • Paso 3: Realizar una copia de seguridad del clúster principal en la réplica
  • Paso 4: Reinicio y prueba de los clústeres
  • Conclusión
  • El autor seleccionó el Fondo de Ayuda COVID-19 para recibir una donación como parte del programa Write for DOnations .

    Introducción

    La replicación en streaming es un método popular que puede utilizar para escalar horizontalmente sus bases de datos relacionales. Utiliza dos o más copias del mismo clúster de bases de datos que se ejecutan en máquinas separadas. Un clúster de bases de datos se denomina principal y realiza operaciones de lectura y escritura; los demás, denominados réplicas, solo realizan operaciones de lectura. También puede utilizar la replicación en streaming para proporcionar alta disponibilidad a un sistema. Si el servidor o el clúster de bases de datos principal fallara inesperadamente, las réplicas pueden continuar realizando operaciones de lectura o (una de las réplicas) convertirse en el nuevo clúster principal.

    PostgreSQL es una base de datos relacional ampliamente utilizada que admite la replicación lógica y física. La replicación lógica transmite cambios de alto nivel desde el clúster de base de datos principal a las bases de datos de réplica. Con la replicación lógica, puede transmitir cambios a una sola base de datos o tabla en una base de datos. Sin embargo, en la replicación física , los cambios en el archivo de registro WAL (Write-Ahead-Logging) se transmiten y replican en los clústeres de réplica. Como resultado, no puede replicar áreas específicas de un clúster de base de datos principal, sino que se replican todos los cambios en la base de datos principal.

    En este tutorial, configurará la replicación de transmisión física con PostgreSQL 12 en Ubuntu 20.04 utilizando dos máquinas independientes que ejecutan dos clústeres PostgreSQL 12 independientes. Una máquina será la principal y la otra, la réplica .

    Prerrequisitos

    Para completar este tutorial, necesitará lo siguiente:

    • Dos máquinas independientes con Ubuntu 20.04: una denominada principal y la otra denominada réplica . Puede configurarlas con nuestra Guía de configuración inicial del servidor , incluidos usuarios no root con permisos sudo y un firewall.
    • Sus firewalls están configurados para permitir HTTP/HTTPS y tráfico en el puerto 5432—el puerto predeterminado utilizado por PostgreSQL 12. Puede seguir Cómo configurar un firewall con ufw en Ubuntu 20.04 para configurar estos ajustes de firewall.
    • PostgreSQL 12 en ejecución en ambos servidores Ubuntu 20.04. Siga el paso 1 del tutorial Cómo instalar y usar PostgreSQL en Ubuntu 20.04, que cubre la instalación y el uso básico de PostgreSQL en Ubuntu 20.04.

    Paso 1: Configuración de la base de datos principal para aceptar conexiones

    En este primer paso, configurará la base de datos principal para permitir que las bases de datos de réplica se conecten. De manera predeterminada, PostgreSQL solo escucha el localhost( 127.0.0.1) en busca de conexiones. Para cambiar esto, primero editará el listen_addressesparámetro de configuración en la base de datos principal .

    En su servidor principal , abra el archivo de configuración de PostgreSQL, postgresql.confque se encuentra en el /etc/postgresql/12/main/directorio:

    1. sudo nano /etc/postgresql/12/main/postgresql.conf

    Una vez abierto el archivo, localiza la listen_addressesvariable y cambia el valor de localhosta la dirección IP de tu servidor principal . También tendrás que eliminar el #carácter del comienzo de la línea, como se muestra a continuación:

    /etc/postgresql/12/main/postgresql.conf

    . . .listen_addresses = 'your_primary_IP_address'. . .

    Guardar y salir del archivo.

    Una vez que haya terminado, su base de datos principal estará lista para aceptar conexiones desde otras máquinas en la dirección IP que ingresó. A continuación, creará un rol con los permisos adecuados que la réplica usará al conectarse a la base de datos principal .

    Paso 2: Creación de un rol especial con permisos de replicación

    Ahora, debe crear un rol en la base de datos principal que tenga permiso para replicar la base de datos. Su réplica utilizará este rol al conectarse a la base de datos principal . Crear un rol independiente solo para la replicación también tiene beneficios de seguridad. Su réplica no podrá manipular ningún dato en la base de datos principal ; solo podrá replicar los datos.

    Primero, conéctese al clúster de base de datos como postgresusuario con el siguiente comando:

    1. sudo -u postgres psql

    Para crear un rol, debes ejecutar el CREATE ROLEcomando en el clúster de la siguiente manera:

    1. CREATE ROLE test WITH REPLICATION PASSWORD 'testpassword' LOGIN;

    Recibirás el siguiente resultado:

    OutputCREATE ROLE

    Este comando crea un rol llamado testcon la contraseña 'testpassword', que tiene permiso para replicar el clúster de base de datos.

    PostgreSQL tiene una pseudobase de datos de replicación especial a la que se conecta la réplica , pero primero debe editar el /etc/postgresql/12/main/pg_hba.confarchivo de configuración para permitir que su réplica acceda a ella. Por lo tanto, salga del símbolo del sistema de PostgreSQL ejecutando lo siguiente:

    1. q

    Ahora que está nuevamente en el símbolo del sistema de su terminal, abra el /etc/postgresql/12/main/pg_hba.confarchivo de configuración usando nano:

    1. sudo nano /etc/postgresql/12/main/pg_hba.conf

    Añade la siguiente línea al final del pg_hba.confarchivo:

    /etc/postgresql/12/main/pg_hba.conf

    . . .host    replication     test    your-replica-IP/32   md5

    Esto garantiza que su servidor principal permita que su réplica se conecte a la pseudobase de datos de replicación mediante el rol, testque creó anteriormente. El hostvalor significa aceptar conexiones no locales a través de sockets TCP/IP simples o cifrados con SSL. replicationes el nombre de la pseudobase de datos especial que PostgreSQL usa para la replicación. Finalmente, el valor md5es el tipo de autenticación utilizada. Si desea tener más de una réplica , simplemente agregue la misma línea nuevamente al final del archivo con la dirección IP de su otra réplica .

    Para garantizar que se implementen estos cambios en el archivo de configuración, debe reiniciar el clúster principal mediante:

    1. sudo systemctl restart postgresql@12-main

    Si el clúster principal se reinició correctamente, está configurado correctamente y listo para comenzar a transmitir una vez que se conecte la réplica . A continuación, pasará a configurar el clúster de réplica .

    Paso 3: Realizar una copia de seguridad del clúster principal en la réplica

    Como está configurando la replicación física con PostgreSQL en este tutorial, debe realizar una copia de seguridad física de los archivos de datos del clúster principal en el directorio de datos de la réplica . Para ello, primero deberá borrar todos los archivos del directorio de datos de la réplica . El directorio de datos predeterminado para PostgreSQL en Ubuntu es /var/lib/postgresql/12/main/.

    También puede encontrar el directorio de datos de PostgreSQL ejecutando el siguiente comando en la base de datos de la réplica :

    1. SHOW data_directory;

    Una vez que tenga la ubicación del directorio de datos, ejecute el siguiente comando para eliminar todo:

    1. sudo -u postgres rm -r /var/lib/postgresql/12/main/*

    Dado que el propietario predeterminado de los archivos en el directorio es el usuario postgres , deberá ejecutar el comando como postgresusing sudo -u postgres.

    Nota: Si en el caso extremadamente raro de que un archivo en el directorio esté dañado y el comando no funcione, elimine el maindirectorio por completo y vuelva a crearlo con los permisos adecuados de la siguiente manera:

    1. sudo -u postgres rm -r /var/lib/postgresql/12/main
    2. sudo -u postgres mkdir /var/lib/postgresql/12/main
    3. sudo -u postgres chmod 700 /var/lib/postgresql/12/main

    Ahora que el directorio de datos de la réplica está vacío, puedes realizar una copia de seguridad física de los archivos de datos del servidor principal . PostgreSQL tiene una utilidad pg_basebackupque simplifica el proceso. Incluso te permite poner el servidor en modo de espera mediante esta -Ropción.

    Ejecute el pg_basebackupcomando en la réplica de la siguiente manera:

    1. sudo -u postgres pg_basebackup -h primary-ip-addr -p 5432 -U test -D /var/lib/postgresql/12/main/ -Fp -Xs -R
    • La -hopción especifica un host no local. Aquí, debe ingresar la dirección IP de su servidor con el clúster principal .

    • La -popción especifica el número de puerto al que se conecta en el servidor principal . De manera predeterminada, PostgreSQL utiliza el puerto :5432.

    • La -Uopción le permite especificar el usuario con el que se conecta al clúster principal . Este es el rol que creó en el paso anterior.

    • La -Dbandera es el directorio de salida de la copia de seguridad. Este es el directorio de datos de su réplica que vació justo antes.

    • Especifica -Fpque los datos se deben generar en formato simple en lugar de como un tararchivo.

    • -Xstransmite el contenido del registro WAL a medida que se realiza la copia de seguridad del registro principal .

    • Por último, -Rcrea un archivo vacío, llamado standby.signal, en el directorio de datos de la réplica . Este archivo le permite a su clúster de réplicas saber que debe funcionar como un servidor en espera. La -Ropción también agrega la información de conexión sobre el servidor principal al postgresql.auto.confarchivo. Este es un archivo de configuración especial que se lee siempre que postgresql.confse lee el archivo normal, pero los valores del .autoarchivo anulan los valores del archivo de configuración normal.

    Cuando el pg_basebackupcomando se conecta a la base de datos principal , se le solicitará que ingrese la contraseña para el rol que creó en el paso anterior. Según el tamaño del clúster de la base de datos principal , puede llevar algún tiempo copiar todos los archivos.

    Ahora, la réplica tendrá todos los archivos de datos del servidor principal que necesita para comenzar la replicación. A continuación, pondrá la réplica en modo de espera y comenzará a replicar.

    Paso 4: Reinicio y prueba de los clústeres

    Ahora que se realizó una copia de seguridad de los archivos de datos del clúster principal en la réplica , el siguiente paso es reiniciar el clúster de la base de datos de réplica para ponerlo en modo de espera. Para reiniciar la base de datos de réplica , ejecute el siguiente comando:

    1. sudo systemctl restart postgresql@12-main

    Si el clúster de réplica se reinició en modo de espera correctamente, ya debería haberse conectado al clúster de base de datos principal en la otra máquina. Para comprobar si la réplica se ha conectado al principal y si este está transmitiendo, conéctese al clúster de base de datos principal ejecutando lo siguiente:

    1. sudo -u postgres psql

    Ahora consulte la pg_stat_replicationtabla en el clúster de base de datos principal de la siguiente manera:

    1. SELECT client_addr, state FROM pg_stat_replication;

    Al ejecutar esta consulta en el clúster principal , se obtendrá un resultado similar a lo siguiente:

    Output   client_addr    |  state------------------+----------- your_replica_IP | streaming

    Si tiene una salida similar, entonces el archivo principal se está transmitiendo correctamente a la réplica .

    Conclusión

    Ahora tienes dos servidores Ubuntu 20.04, cada uno con un clúster de base de datos PostgreSQL 12 ejecutándose con transmisión física entre ellos. Cualquier cambio que realices en el clúster de base de datos principal también aparecerá en el clúster de réplica .

    También puede agregar más réplicas a su configuración si sus bases de datos necesitan manejar más tráfico.

    Si desea obtener más información sobre la replicación de transmisión física, incluido cómo configurar la replicación sincrónica para garantizar cero posibilidades de perder datos críticos para la misión, puede leer la entrada en la documentación oficial de PostgreSQL .

    Puede consultar nuestra página de temas de PostgreSQL para obtener más tutoriales y contenido.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion