18
0
Fork 0

Ajout methode courante pour la mise en place de la Streaming Replication

This commit is contained in:
emorino 2019-12-16 17:30:03 +01:00
parent 4e31d115cf
commit 079630c6a4
1 changed files with 24 additions and 6 deletions

View File

@ -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