Dans cette première étape, vous allez configurer le serveur PostgreSQL primaire pour le préparer à la réplication. Cela implique de modifier ses fichiers de configuration pour autoriser les connexions réseau, d'activer le niveau nécessaire de Write-Ahead Log (WAL), et de créer un utilisateur spécial pour la réplication.
1. Modifier le Fichier de Configuration PostgreSQL
Pour vous préparer à la réplication, vous devez modifier le fichier de configuration principal, postgresql.conf. L'édition manuelle de ce fichier volumineux avec un éditeur de texte comme nano peut être difficile et sujette aux erreurs en raison du grand nombre d'options. Une méthode plus efficace et fiable consiste à utiliser des outils en ligne de commande pour visualiser et mettre à jour les paramètres spécifiques que vous devez modifier. Cela évite d'avoir à parcourir des centaines de lignes et prévient les erreurs accidentelles.
Tout d'abord, vérifions les valeurs actuelles des paramètres que nous devons modifier : listen_addresses, wal_level, et 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
Vous verrez probablement ces lignes commentées avec un #.
Maintenant, mettons à jour ces paramètres automatiquement. Les commandes suivantes sauvegarderont le fichier de configuration, puis mettront à jour chaque paramètre requis.
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"
Enfin, vérifions que les modifications ont été appliquées correctement. La commande ci-dessous affichera les nouvelles valeurs, en filtrant les lignes commentées.
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
La sortie devrait afficher la configuration mise à jour et active :
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
Avec ces paramètres confirmés, le serveur est correctement configuré pour les étapes suivantes.
2. Créer un Utilisateur de Réplication Dédié
Il est recommandé d'utiliser un utilisateur dédié pour la réplication plutôt qu'un superutilisateur. Créons un rôle nommé replicator.
Connectez-vous à PostgreSQL en utilisant le client en ligne de commande psql :
sudo -u postgres psql
Exécutez maintenant la commande SQL suivante pour créer l'utilisateur avec les privilèges de réplication et un mot de passe :
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
Vous devriez voir la sortie CREATE ROLE. Maintenant, quittez le client psql :
\q
3. Autoriser la Connexion de Réplication
Ensuite, vous devez configurer le serveur pour permettre à l'utilisateur replicator de se connecter depuis le serveur réplique. Vous le ferez en modifiant le fichier pg_hba.conf.
Ouvrez le fichier avec nano :
sudo nano /etc/postgresql/14/main/pg_hba.conf
Ajoutez la ligne suivante à la fin du fichier. Cette règle spécifie que l'utilisateur replicator est autorisé à se connecter à la pseudo-base de données replication depuis n'importe quelle adresse IP (0.0.0.0/0). Pour ce laboratoire, nous utilisons 127.0.0.1/32 car les deux serveurs sont sur la même machine.
host replication replicator 127.0.0.1/32 md5
Appuyez sur Ctrl+X, Y, puis Entrée pour sauvegarder et quitter.
4. Redémarrer le Serveur Primaire
Pour appliquer toutes ces modifications de configuration, vous devez redémarrer le service PostgreSQL.
sudo service postgresql restart
Le serveur primaire est maintenant prêt à accepter les connexions de réplication.