Aller à : navigation, rechercher

Maarch RM/Réplication de la base de données

Installation

Les deux serveurs doivent être installés dans la même version de PostgreSQL, avec les mêmes options de sécurité, notamment en termes d'authentification.

Définir un mot de passe

L'installation crée un utilisateur nommé "postgres" pour la gestion des bases de données initiales et l'exécution des processus. Pour la réplication, il faut définir un mot de passe pour l'utilisateur sur les deux systèmes :

sudo passwd postgres

Saisir le mot de passe souhaité.

Utiliser le SSH

Si les transferts de données doivent se faire de manière sécurisée, il faut générer une clé SSH pour l'utilisateur de la réplication Basculer sous l'utilisateur :

sudo su – postgres

Sur le serveur maître, générer une clé ssh pour l'utilisateur :

ssh-keygen

Transférer la clé sur le serveur esclave :

ssh-copy-id <ip_esclave>


Configurer le serveur maître

Configurer l'accès

Créer un utilisateur dédié à la réplication:

psql CREATE USER <nom_utilisateur> REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD '<mdp_utilisateur>';


Aller dans le répertoire principal des données:

cd /etc/postgresql/9.4/main

Editer le fichier de configuration de l'accès nommé "pg_hba.conf" qui gère les accès et ajouter la ligne suivante:

host replication <nom_utilisateur> <ip_esclave>/32 <mode_auth>

Configurer le service

Editer le fichier de configuration principal "postgresql.conf" et définir les directives suivantes :

listen_addresses = 'localhost,<ip_maître>'

wal_level = hot_standby

checkpoint_segments = 8 

archive_mode = on
archive_command = 'cd .'

max_wal_senders = 3
wal_keep_segments = 8

hot_standby = on

Redémarrer le serveur maître

Exécuter la commande suivante :

service postgresql restart

Configurer le serveur esclave

Arrêter le serveur

service postgresql stop

Configurer l'accès

Aller dans le répertoire principal des données:

cd /etc/postgresql/9.4/main

Editer le fichier de configuration de l'accès nommé "pg_hba.conf" et ajouter la ligne suivante:

host replication <nom_utilisateur> <ip_maître>/32 <mode_auth>

Configurer le service

Editer le fichier de configuration principal "postgresql.conf" et définir les directives suivantes :

listen_addresses = 'localhost,<ip_maître>'

wal_level = hot_standby

checkpoint_segments = 8 

archive_mode = on
archive_command = 'cd .'

max_wal_senders = 3
wal_keep_segments = 8

hot_standby = on

Configurer la réplication

Créer un fichier nommé "recovery.conf" à la racine du répertoire des données, avec le contenu suivant :

standby_mode = on
primary_conninfo = 'host=<ip_maître> port=<port_maître> user=<nom_utilisateur> password=<mdp_utilisateur>'
trigger_file = '/tmp/postgresql.trigger'

Synchroniser la base initiale

Sur le serveur maître, effectuer une sauvegarde initiale et transférer vers le serveur esclave :

psql -c "select pg_start_backup('initial_backup');"
rsync -cva --inplace --exclude=*pg_xlog* /var/lib/postgresql/9.4/main/ <ip_esclave>:/var/lib/postgresql/9.4/main/
psql -c "select pg_stop_backup();"

Redémarrer le serveur esclave :

service postgresql start

Tester

Pour tester la réplication, exécuter les commandes suivantes sur le serveur maître:

psql

CREATE TABLE test (test varchar(40));
INSERT INTO test VALUES ('données');
INSERT INTO test VALUES ('Encore des données');

\q

Aller sur le serveur esclave et vérifier la réplication :

psql

SELECT * FROM test;

 test       
-----------------
 données
 Encore des données
(2 rows)

\q