Configurar el Servidor Principal para Replicación
En este primer paso, configurará el servidor PostgreSQL principal para prepararlo para la replicación. Esto implica modificar sus archivos de configuración para permitir conexiones de red, habilitar el nivel necesario de Write-Ahead Log (WAL) y crear un usuario especial para la replicación.
1. Modificar el Archivo de Configuración de PostgreSQL
Para prepararse para la replicación, necesita modificar el archivo de configuración principal, postgresql.conf. Editar este archivo grande manualmente con un editor de texto como nano puede ser desafiante y propenso a errores debido a la gran cantidad de opciones. Un método más eficiente y confiable es usar herramientas de línea de comandos para ver y actualizar las configuraciones específicas que necesita cambiar. Esto evita tener que desplazarse por cientos de líneas y previene errores accidentales.
Primero, verifiquemos los valores actuales de las configuraciones que necesitamos modificar: listen_addresses, wal_level y max_wal_senders.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Current Settings ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Probablemente verá estas líneas comentadas con un #.
Ahora, actualicemos estas configuraciones automáticamente. Los siguientes comandos harán una copia de seguridad del archivo de configuración y luego actualizarán cada parámetro requerido.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## Create a backup before making changes
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## Set listen_addresses to allow connections from any IP address
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## Set wal_level to 'replica' to enable replication logs
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## Set the maximum number of concurrent replication connections
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
Finalmente, verifiquemos que los cambios se aplicaron correctamente. El siguiente comando mostrará los nuevos valores, filtrando cualquier línea comentada.
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
La salida debería mostrar la configuración actualizada y activa:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
Con estas configuraciones confirmadas, el servidor está correctamente preparado para los siguientes pasos.
2. Crear un Usuario Dedicado para Replicación
Es una buena práctica usar un usuario dedicado para la replicación en lugar de un superusuario. Creemos un rol llamado replicator.
Conéctese a PostgreSQL usando el cliente de línea de comandos psql:
sudo -u postgres psql
Ahora, ejecute el siguiente comando SQL para crear el usuario con privilegios de replicación y una contraseña:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
Debería ver la salida CREATE ROLE. Ahora, salga del cliente psql:
\q
3. Permitir la Conexión de Replicación
A continuación, deberá configurar el servidor para permitir que el usuario replicator se conecte desde el servidor réplica. Hará esto editando el archivo pg_hba.conf.
Abra el archivo con nano:
sudo nano /etc/postgresql/14/main/pg_hba.conf
Agregue la siguiente línea al final del archivo. Esta regla especifica que al usuario replicator se le permite conectarse a la pseudo-base de datos replication desde cualquier dirección IP (0.0.0.0/0). Para este laboratorio, usamos 127.0.0.1/32 ya que ambos servidores están en la misma máquina.
host replication replicator 127.0.0.1/32 md5
Presione Ctrl+X, Y y Enter para guardar y salir.
4. Reiniciar el Servidor Principal
Para aplicar todos estos cambios de configuración, debe reiniciar el servicio de PostgreSQL.
sudo service postgresql restart
El servidor principal ahora está listo para aceptar conexiones de replicación.