Mise en œuvre d'une réplication streaming PostgreSQL de base

Cette procédure détaille la mise en place d'une architecture de réplication primaire-secondaire simplifiée sur une seule instance de serveur Linux, idéale pour comprendre les mécanismes de synchronisation de PostgreSQL.

Spécifications de l'environnement

Paramètre Valeur
Système d'exploitation CentOS 7 / RHEL 7
Version Database PostgreSQL 10.x
Port Instance Primaire 5433
Port Instance Secondaire 5434

Pour cet exercice, les deux instances résident sur la même machine. L'utilisateur système dédié est postgres.

1. Préparation et initialisation de l'instance maître

Après l'installation des paquets via yum, nous créons l'arborescence des données et initialisons la base de données principale.

# Création des répertoires de données
mkdir -p /srv/postgresql/primary
chown -R postgres:postgres /srv/postgresql

# Basculer vers l'utilisateur postgres
su - postgres

# Initialisation du cluster primaire
initdb -D /srv/postgresql/primary

2. Configuration de l'instance primaire

Modifiez le fichier postgresql.conf pour définir le port et l'accès réseau :

# Fichier : /srv/postgresql/primary/postgresql.conf
port = 5433
listen_addresses = 'localhost'
wal_level = replica
max_wal_senders = 5
unix_socket_directories = '/tmp'

Ensuite, autorisez les connexions de réplication dans pg_hba.conf :

# Fichier : /srv/postgresql/primary/pg_hba.conf
# Autoriser l'utilisateur local à demander la réplication
host    replication     all             127.0.0.1/32            trust

Démarrez l'instance primaire :

pg_ctl -D /srv/postgresql/primary -l /srv/postgresql/primary/logfile start

3. Clonage des données pour l'instance secondaire

L'instance secondaire doit démarrrer à partir d'une copie conforme de l'instance primaire. Nous utilisons ici une copie physique des fichiers.

# Arrêt temporaire de la source (ou utilisation de pg_basebackup)
# Pour cet exemple simplifié, nous copions directement les fichiers
cp -R /srv/postgresql/primary /srv/postgresql/secondary

# Nettoyage des fichiers inutiles sur la copie secondaire
rm -rf /srv/postgresql/secondary/postmaster.pid

4. Configuration de l'instance secondaire

Il est nécessaire de modifier le port pour éviter les conflits et de créer le fichier de contrôle de récupération.

Dans /srv/postgresql/secondary/postgresql.conf :

port = 5434
unix_socket_directories = '/tmp'

Créez le fichier recovery.conf dans le répertoire de données de l'esclave :

# Fichier : /srv/postgresql/secondary/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=127.0.0.1 port=5433 user=postgres'
recovery_target_timeline = 'latest'

Ajustez les permissions pour garantir que PostgreSQL puisse lire les répertoires :

chmod 0700 /srv/postgresql/secondary

Démarrez l'instance secondaire :

pg_ctl -D /srv/postgresql/secondary -l /srv/postgresql/secondary/logfile start

5. Validation de la synchronisation

Pour vérifier que la réplication fonctionne, créez une table sur le serveur primaire (port 5433) et observez sa propagation sur le serveur secondaire (port 5434).

Sur le Primaire :

psql -p 5433 -d postgres -c "CREATE TABLE stocks (id SERIAL PRIMARY KEY, produit TEXT, quantite INT);"
psql -p 5433 -d postgres -c "INSERT INTO stocks (produit, quantite) VALUES ('Serveur Dell', 5), ('Switch Cisco', 12);"

Sur le Secondaire :

# Lecture des données répliquées
psql -p 5434 -d postgres -c "SELECT * FROM stocks;"

Le résultat devrait afficher les données insérées précédemment. Notez que toute tentative d'écriture (INSERT/UPDATE) sur le port 5434 échouera, car l'instance secondaire est en mode lecture seule (read-only).

Étiquettes: PostgreSQL réplication database-administration CentOS Linux

Publié le 8 août à 08h13