Vous êtes ici

Mise en place de la replication sur Postgresql

Nous allons voir dans cet article comment mettre en place une replication sur Postgresql avec un serveur maitre et un serveur esclave.


Serveur maitre : 192.168.0.2
Serveur esclave : 192.168.0.5

Sur le maitre :

1) Création d'un utilisateur pour la replication :
CREATE USER rep REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'rep_password';"

2) Renseigner l'esclave, pour cela ajouter la ligne suivante dans le fichier pg_hba.conf :
host    replication     rep     192.168.0.5/32   md5

3) Ajoutez les lignes suivantes au fichier postgresql.conf :
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on

4) Relancer postgres : /etc/init.d/psql restart

Sur l'esclave :

1) Stopper le service : /etc/init.d/psql stop

2) Renseigner le maitre, pour cela jouter la ligne suivante dans pg_hba.conf :
host    replication     rep     192.168.0.2/32  md5

3) Ajouter les lignes suivantes au fichier postgresql.conf :
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on

Repliquer la base de données :

1) Sur le maitre, passer la commande psql suivante :
psql -c "select pg_start_backup('initial_backup');"

2) Faire une synchro du repertoire de données du maitre vers l'esclave :
rsync -cva --inplace --exclude="*pg_xlog*" --exclude="*.conf" /pgsql/pgsql/data/ 192.168.0.5:/pgsql/pgsql/data/

Puis : psql -c "select pg_stop_backup();"

3) Sur l'esclave dans les fichiers de conf, ajouter un fichier de conf nommé recovery.conf qui contient :
standby_mode = 'on'
primary_conninfo = '192.168.0.2=5432 user=rep password=rep_password'
trigger_file = '/tmp/postgresql.trigger.5432'

Si le fichier /tmp/postgresql.trigger.5432 existe, alors l'esclave passera maitre

4) Démarrer postgresql : /etc/init.d/psql start
Si ça ne démarre pas correctement, verifier le fichier /var/log/postgresql/psql.log

Si il lui manque un point de synchro, recuperer le fichier manquant dans pg_xlog/ sur le maitre et le copier dans le pg_xlog/ de l'esclave, puis redémarrer le postgresql de l'esclave.

Procedure de test :

Sur le maitre : dans psql :

CREATE TABLE rep_test (test varchar(40));
INSERT INTO rep_test VALUES ('test');
\q


Sur l'esclave :
SELECT * FROM rep_test
la table doit etre présente.

DROP TABLE rep_test;
Normalement, ça doit etre refusé, car en lecture seul.

Vous avez donc à présent une réplication fonctionnelle sur votre base de données Postgres.

www.le-gas.fr : Le guide de l'admin Systeme