Respaldo continuo con PostgreSQL desde un servidor primario a uno en-espera y tibio (warn standby server) transmitiendo con rsync1. IntroducciónCómo se explica en https://www.postgresql.org/docs/15/different-replication-solutions.html hay diferentes mecanismos para hacer copias de respaldo que progresivamente van facilitando operación casi continua y alta disponibilidad:
Entre más alto nivel, más flexibilidad (por ejemplo con replicación lógica se puede replicar solo algunas tablas y sólo registros que cumplan un filtro, la base destino puede tener una versión diferente a la de la base origen e incluso una estructura diferente), pero también más involucrada la aplicación (por ejemplo el último se hace con ordenes de PostgreSQL). Suponiendo que tienes un servidor primario y quieres mantener una copia bastante actualizada de solo lectura de la base de datos completa en un servidor en-espera puedes usar el envió de registros de escritura anticipada (WAL). En este escrito presentamos tal configuración suponiendo que los servidores operan adJ. 2. Envío de registros de escritura anticipada con rsyncComo se explica en https://www.postgresql.org/docs/15/warm-standby.html el primario se configura en modo de archivado continuo y el servidor en espera se configuran en modo de recuperación continua. Supongamos que el servidor primario es un adJ con IP 192.168.1.5 y que el
servidor en espera es otro adJ con IP 192.168.1.11, y que para transmitir
los registros WAL del primario al servidor en espera se usa 1.1. Preparación del servidor en-esperaAsegurate de instalar PostgreSQL aunque no es necesario que inicialices base de datos.
Prepara el directorio donde llegarán los registros WAL, por ejemplo:
Y alista una llave RSA para enviar sin clave con ssh desde la cuenta
Para que pueda ser un método automático, no le pongas clave
Copia la llave privada al servidor primario:
1.2. Configuración del servidor primarioPrepara el envío de archivos sin clave con ssh y pruébalo:
La última orden debería copiar el archivo Modifica
Tras esto debes reiniciar PostgreSQL en el primario
Debes verificar que a medida que realizas operaciones de escritura en la
base del primario y que se crean registros WAL en
1.3 Copia de respaldo inicial del primario al servidor en-esperaDesde la cuenta
Y envía la copia generada al servidor en-espera
Desde el servidor en-espera descomprime la copia con permisos precisos
1.4 Configuración de servidor en-espera y arranqueConfigura
Para indicar que tu servidor operará en-espera y tibio:
Inicia la base de datos
El motor empezará a usar los registros que halla en el archivo y en
la bitácora
A medida que se escriban datos en el servidor primario, que se generen registros de escritura anticipada, que se transmitan al servidor en-espera y que este los replique podrás examinar en modo de solo lectura en el servidor en-espera la información más reciente que vaya cambiando en el servidor primario. 3. ConclusiónEs una configuración relativamente fácil de implementar que dejará una copia continuamente actualizada y de sólo lectura de la base de datos del servidor primario en un servidor en-espera, tibio. Es tibio porque la copia queda un poco retrasada respecto al original (en bases de datos con uso continuo queda retrasada unos segundos). |