diff --git a/HowtoPostgreSQL/ReplicationPhysique.md b/HowtoPostgreSQL/ReplicationPhysique.md index 71122aa9..b34f45f5 100644 --- a/HowtoPostgreSQL/ReplicationPhysique.md +++ b/HowtoPostgreSQL/ReplicationPhysique.md @@ -41,12 +41,14 @@ listen_addresses = '*' # (1 processus = 1 connexion) max_wal_senders = 2 -# « niveau de verbosité » des journaux PostgreSQL. Le niveau maximum est -# nécessaire (hot_standby) pour que le réplica soit accessible en lecture. -wal_level = hot_standby +# « niveau de verbosité » des journaux PostgreSQL. Le niveau minimum +# nécessaire (replica) pour que le réplica soit accessible en lecture. +# Si une réplication logique est aussi en place il faut le niveau maximum (logical) +wal_level = replica # Activation de l'archivage des WAL. Nécessaire pour pouvoir remettre en # place facilement la réplication suite à un failover/switchover. +# Ceci n'est pas obligatoire pour la mise en place d'une réplication physique archive_mode = on archive_command = 'rsync %p 192.0.2.2:/srv/pg-archives/%f' ~~~ @@ -89,7 +91,7 @@ Il est nécessaire que ce fichier appartienne à l'utilisateur _postgres_, notam # chown postgres:postgres ~postgres/9.6/main/recovery.conf ~~~ -## Synchronisation initiale des données +## Synchronisation initiale des données (Méthode obsolète) * Arrêter PostgreSQL sur le réplica ; * sur le maître, indiquer à PostgreSQL qu'on commence une sauvegarde. Il va notamment faire un checkpoint dans son WAL courant et retourner sa position : @@ -110,16 +112,32 @@ postgres$ psql -c "SELECT pg_start_backup('synchro initiale')" postgres$ psql -c "SELECT pg_stop_backup()" ~~~ -On peut également utiliser le script _pg_basebackup_ comme ceci : +## Synchronisation initiale des données (Méthode courante) +* Arrêter PostgreSQL sur le réplica ; +* Supprimer le contenu de _/var/lib/postgresql/9.6/main/*_ +* Autorisé la connexion SSH par clé, de l'utilisateur postgres depuis le master vers le réplica, et également depuis le réplica vers le master. + +* Faire la syncho des données avec pg_basebackup comme ceci : ~~~ -# sudo -u postgres pg_basebackup -h IP_MASTER -D /var/lib/postgresql/9.6/main -U repl -v -P --xlog +# sudo -u postgres pg_basebackup -h IP_MASTER -D /var/lib/postgresql/9.6/main -P -v -U repl ~~~ pg_basebackup s'occupe de faire un checkpoint du WAL courant (pg_start_backup) de transférer les fichiers des bases puis d'exécuter la fonction SQL _pg_stop_backup_ Pendant le transfert des fichiers, la base a pu subir des modifications. Le paramètre --xlog ordonne à _pg_basebackup_ de transférer également les derniers journaux de transactions pour les rejouer sur le réplica. +* Créer un fichier `recovery.conf` situé dans le datadir avec les info suivantes : + +~~~ +standby_mode = 'on' +primary_conninfo = 'host=192.0.2.1 user=repl password=PASSWORD application_name=foo' +archive_cleanup_command = '/usr/lib/postgresql/9.6/bin/pg_archivecleanup /srv/pg-archives/ %r' +recovery_target_timeline = 'latest' +~~~ + +Il est nécessaire que ce fichier appartienne à l'utilisateur _postgres_, notamment en cas de promotion en master (car PostgreSQL va renommer le fichier en `recovery.done`) : + * redémarrer PostgreSQL sur le réplica. ## Administration