DALL·E 2024 02 28 09.15.27 Imagine a 1024x1024 pixels illustration that visualizes the concept of setting up streaming replication in PostgreSQL. The image should feature two Po

Cómo Configurar la Replicación en Streaming de Postgres

Si eres un desarrollador o administrador de bases de datos, seguramente has oído hablar de la replicación de bases de datos.

No importa si eres un experto o un principiante, la replicación es una técnica importante que te permitirá mantener tus datos a salvo, reducir los tiempos de inactividad y escalar tu base de datos.

En este artículo, hablaremos sobre la replicación en PostgreSQL y cómo configurar la replicación en streaming en PostgreSQL.

¿Qué es la replicación?

La replicación, en PostgreSQL o en cualquier otra tecnología de base de datos, es un proceso que te permite copiar los datos de una base de datos a otra en tiempo real.

Esto significa que cualquier cambio que se realice en la base de datos principal (o master) se replicará automáticamente en la base de datos secundaria (o slave).

El objetivo principal de la replicación es garantizar la disponibilidad y la durabilidad de los datos.

Casos de uso como tener una instancia «de reserva» en caso de fallo o simplemente para poder realizar mantenimientos sin downtime son los más típicos.

Replicación en streaming de PostgreSQL

PostgreSQL admite varios métodos de replicación, incluida la replicación basada en archivos, la replicación basada en transacciones y la replicación en streaming.

La replicación en streaming es el mejor método de replicación en términos de rendimiento y durabilidad.

A diferencia de la replicación basada en archivos, que simplemente copia los archivos de registro de transacciones de la base de datos principal a la base de datos secundaria, la replicación en streaming utiliza una conexión de red para enviar los cambios de la base de datos principal a la secundaria en tiempo real.

Esto significa que la base de datos secundaria siempre estará actualizada y lista para asumir el control en caso de una falla de la base de datos principal.

Requisitos previos para la configuración de la replicación en streaming en PostgreSQL

Antes de comenzar a configurar la replicación en streaming en PostgreSQL, debes asegurarte de tener lo siguiente:

– Dos servidores PostgreSQL que tengan acceso el uno al otro por red.
– PostgreSQL debe estar configurado para escuchar en la dirección IP y el puerto correctos.
– No se deben tener problemas de firewall entre los dos servidores PostgreSQL.
– Las versiones de PostgreSQL deben ser las mismas en ambos servidores.

NOTA: Esto último no es 100% verdad. Podrías montar una arquitectura maestro-esclavo con diferentes versiones. Técnicamente es posible. Ahora bien, no tiene sentido hacerlo así que no lo hagas 🤠

– Tener un usuario configurado para la replicación.

Configurando la replicación en streaming en PostgreSQL

Si cumples con todos los requisitos previos, ¡felicidades!. Ahora estás listo para avanzar al siguiente paso: cómo configurar la replicación en streaming en PostgreSQL:

1. Editar el postgresql.conf y pg_hba.conf en el servidor principal

Abre el archivo postgresql.conf en el servidor principal y agrega o modifica las siguientes líneas:

listen_addresses = '*'
archive_mode = on
max_wal_senders = 5 
max_wal_size = 16MB   <--- Ajustable a tu caso    
wal_level = replica
hot_standby = on   
archive_command = 'rsync -a %p /opt/pg_archives/%f' 

Esto habilitará la replicación y permitirá que los archivos de registro de transacciones se envíen a la base de datos secundaria.

Por otra parte, asegúrate de que en tu pg_hba.conf la base de datos slave tiene acceso a la maestra.

host    replication  all   xxx.xxx.xx.xxx/xx   trust

Finalmente, reinicia el servicio Postrges para que los cambios en la configuración tomen efecto.

2. Configuración del la instancia standby

Deberías tener una instancia de postgres en tu servidor standby, o al menos, Postgres instalado si no me has mentido y has cumplido con los prerequisitos.

Arranca la base de datos, y acto seguido párala de nuevo. Ahora, borra todo el contenido del directorio pg_data, que estará lleno de los archivos por defecto.

$ /usr/pgsql-14/bin/initdb -D /var/lib/pgsql/14/data/

$ cd /var/lib/pgsql/14/data/

$ rm -rf ./*

Con el directorio vacío, vamos a ejecutar un pg_basebackup desde este nodo (standby), y apuntando al primario. Esto nos recreará exactamente la misma estructura que tenemos en nuestro master.

pg_basebackup -h xxx.xxx.xx.xxx -D /var/lib/pgsql/14/data -U replicator -P -v -R -X stream

NOTA: Si no tienes ni idea de qué tienes que poner en cada opción siéntete libre de revisar la documentación oficial.

Como estamos en la versión 14, y para todas las versiones superiores a la 12, creamos un archivo de standby vacío:

touch standby.signal

Y editamos el postgresql.conf para que sepa lo que tiene que replicar:

restore_command = 'rsync -a  postgres@<IP origen>:/opt/pg
_archives/%f %p' 

recovery_target_timeline = 'latest'

Ahora sí, tenemos nuestro esclavo configurado. Reinicia el servicio y vamos al siguiente paso.

3. Comprobar la replicación

Entramos en psql desde el servidor maestro y lanzamos el siguiente comando:

postgres=#\x

postgres=# select * from pg_stat_replication;

Por otra parte, comprobamos la replicación en el servidor esclavo con el siguiente comando, también desde psql:

postgres=# select * from pg_stat_wal_receiver;

Si en estos comandos no se te devuelve una salida donde puedas ver el último archivo enviado para su replicación, información del host (maestro o esclavo), timestamps, etc… Algo has hecho mal

Y si no, ya tienes una instancia maestro-esclavo básica.

Resumen

La replicación en PostgreSQL es una técnica importante que te permitirá mantener tus datos a salvo, reducir los tiempos de inactividad.

Dentro de los distintos tipos de replicación que nos ofrece PostgreSQL, la replicación en streaming es el mejor en términos de rendimiento y durabilidad.

Configurar la replicación en streaming en PostgreSQL no es difícil si sigues los pasos descritos anteriormente y cumpliste con los requisitos previos.

Eso sí, este es un set-up básico con las opciones más sencillas posibles. Si fuera a construir algo similar para un entorno de producción o crítico tendría en cuenta más opciones como el borrado de WALs obsoletos, la copia remota de WALs, el modo síncrono / asíncrono, etc.

Únete a la lista de emails para no perderte nada

No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉

    ¿Quieres trabajar con nosotros?

    Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.

    Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.

    Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.

    ¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!


    Comentarios

    Deja una respuesta

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