Différences entre versions de « Replication PostgreSQL multi slaves »

De Ikoula Wiki
Jump to navigation Jump to search
 
(49 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<span data-link_translate_fr_title="Replication PostgreSQL multi slaves"  data-link_translate_fr_url="Replication PostgreSQL multi slaves"></span>[[:fr:Replication PostgreSQL multi slaves]][[fr:Replication PostgreSQL multi slaves]]
 +
<span data-link_translate_he_title="PostgreSQL שכפול עבדים רב"  data-link_translate_he_url="PostgreSQL+%D7%A9%D7%9B%D7%A4%D7%95%D7%9C+%D7%A2%D7%91%D7%93%D7%99%D7%9D+%D7%A8%D7%91"></span>[[:he:PostgreSQL שכפול עבדים רב]][[he:PostgreSQL שכפול עבדים רב]]
 +
<span data-link_translate_ro_title="PostgreSQL replicare sclavi multi"  data-link_translate_ro_url="PostgreSQL+replicare+sclavi+multi"></span>[[:ro:PostgreSQL replicare sclavi multi]][[ro:PostgreSQL replicare sclavi multi]]
 +
<span data-link_translate_ru_title="PostgreSQL репликации рабы multi"  data-link_translate_ru_url="PostgreSQL+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8+%D1%80%D0%B0%D0%B1%D1%8B+multi"></span>[[:ru:PostgreSQL репликации рабы multi]][[ru:PostgreSQL репликации рабы multi]]
 +
<span data-link_translate_pl_title="PostgreSQL replikacji niewolników multi"  data-link_translate_pl_url="PostgreSQL+replikacji+niewolnik%C3%B3w+multi"></span>[[:pl:PostgreSQL replikacji niewolników multi]][[pl:PostgreSQL replikacji niewolników multi]]
 +
<span data-link_translate_ja_title="PostgreSQL のレプリケーション スレーブ マルチ"  data-link_translate_ja_url="PostgreSQL+%E3%81%AE%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96+%E3%83%9E%E3%83%AB%E3%83%81"></span>[[:ja:PostgreSQL のレプリケーション スレーブ マルチ]][[ja:PostgreSQL のレプリケーション スレーブ マルチ]]
 +
<span data-link_translate_ar_title="كيو النسخ المتماثل العبيد متعددة"  data-link_translate_ar_url="%D9%83%D9%8A%D9%88+%D8%A7%D9%84%D9%86%D8%B3%D8%AE+%D8%A7%D9%84%D9%85%D8%AA%D9%85%D8%A7%D8%AB%D9%84+%D8%A7%D9%84%D8%B9%D8%A8%D9%8A%D8%AF+%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9"></span>[[:ar:كيو النسخ المتماثل العبيد متعددة]][[ar:كيو النسخ المتماثل العبيد متعددة]]
 +
<span data-link_translate_zh_title="PostgreSQL 复制奴隶多"  data-link_translate_zh_url="PostgreSQL+%E5%A4%8D%E5%88%B6%E5%A5%B4%E9%9A%B6%E5%A4%9A"></span>[[:zh:PostgreSQL 复制奴隶多]][[zh:PostgreSQL 复制奴隶多]]
 +
<span data-link_translate_de_title="PostgreSQL Replikation Sklaven multi"  data-link_translate_de_url="PostgreSQL+Replikation+Sklaven+multi"></span>[[:de:PostgreSQL Replikation Sklaven multi]][[de:PostgreSQL Replikation Sklaven multi]]
 +
<span data-link_translate_nl_title="PostgreSQL replicatie slaven multi"  data-link_translate_nl_url="PostgreSQL+replicatie+slaven+multi"></span>[[:nl:PostgreSQL replicatie slaven multi]][[nl:PostgreSQL replicatie slaven multi]]
 +
<span data-link_translate_it_title="PostgreSQL replica schiavi multi"  data-link_translate_it_url="PostgreSQL+replica+schiavi+multi"></span>[[:it:PostgreSQL replica schiavi multi]][[it:PostgreSQL replica schiavi multi]]
 +
<span data-link_translate_pt_title="Multi de escravos de replicação PostgreSQL"  data-link_translate_pt_url="Multi+de+escravos+de+replica%C3%A7%C3%A3o+PostgreSQL"></span>[[:pt:Multi de escravos de replicação PostgreSQL]][[pt:Multi de escravos de replicação PostgreSQL]]
 +
<span data-link_translate_es_title="PostgreSQL replicación esclavos multi"  data-link_translate_es_url="PostgreSQL+replicaci%C3%B3n+esclavos+multi"></span>[[:es:PostgreSQL replicación esclavos multi]][[es:PostgreSQL replicación esclavos multi]]
 +
<span data-link_translate_en_title="PostgreSQL replication slaves multi"  data-link_translate_en_url="PostgreSQL+replication+slaves+multi"></span>[[:en:PostgreSQL replication slaves multi]][[en:PostgreSQL replication slaves multi]]
 +
 +
 +
{{#seo:
 +
    |title=Replication PostgreSQL multi slaves
 +
    |titlemode=replace
 +
    |keywords=PostgreSQL
 +
    |description=Cette page traite de la mise en place d'une réplication PostgreSQL streaming asynchrone avec un master et deux slaves. Nos slaves seront configurés comme hot standby.
 +
    |og:type=article
 +
    |og:image=https://fr-wiki.ikoula.com/resources/assets/logo_ikwiki.png
 +
   
 +
    }}
 +
 +
    [[Fichier:postgresql.png|300px|right|postgresql logo]]
 +
 
== Introduction ==
 
== Introduction ==
 +
Cette page traite de la mise en place d'une réplication '''[https://www.ikoula.com/fr/cloud-public/oneclick/postgresql PostgreSQL]''' streaming asynchrone avec un master et deux slaves. Nos slaves seront configurés comme hot standby, c'est à dire qu'il sera possible d'exécuter des requêtes (en lecture uniquement) sur ceux-ci.
  
  
Cette page traite de la mise en place d'une réplication PostgreSQL streaming asynchrone avec un master et deux slaves. Nos slaves seront configurés comme hot standby, c'est à dire qu'il sera possible d'exécuter des requêtes (en lecture uniquement) sur ceux-ci.
+
'''Contexte de cette mise en place :'''
  
Contexte de cette mise en place :
 
  
Nous avons 3 serveurs Debian 8 (mis à jour) :
+
Nous avons 3 {{Template:Serveur}}s Debian 8 (mis à jour) :
 +
 
 
Postgres01 (10.1.1.75) : sera notre Master  
 
Postgres01 (10.1.1.75) : sera notre Master  
 +
 
Postgres02 (10.1.1.90) : sera un slave  
 
Postgres02 (10.1.1.90) : sera un slave  
 +
 
Postgres03 (10.1.1.199) : sera un second slave
 
Postgres03 (10.1.1.199) : sera un second slave
  
Les commandes indiquées seront à effectuer en root quand elles sont précédées de "#" et en tant qu'utilisateur système postgres quand elles sont précédées de "$".
 
  
== Installation de PostgreSQL et pré-configuration des trois serveurs ==
+
Les commandes indiquées seront à effectuer en root quand elles sont précédées de "'''#'''" et en tant qu'utilisateur système postgres quand elles sont précédées de "'''$'''".
 +
 
 +
== Installation de PostgreSQL et pré-configuration des trois {{Template:Serveur}}s ==
  
Toutes les commandes de cette partie sont à faire sur chacun des serveurs.
+
Toutes les commandes de cette partie sont à faire sur chacun des {{Template:Serveur}}s.
  
Dans un premier temps, il est recommandé d'avoir un fichier /etc/hosts peuplé avec les correspondances de chaque serveur, comme ceci :
+
Dans un premier temps, il est recommandé d'avoir un fichier /etc/hosts peuplé avec les correspondances de chaque {{Template:Serveur}}, comme ceci (en adaptant avec les hostnames et adresses ip de vos propres {{Template:Serveur}}s)  :
  
 
<pre>
 
<pre>
Ligne 27 : Ligne 59 :
 
10.1.1.199      postgres03
 
10.1.1.199      postgres03
 
</pre>
 
</pre>
 +
  
 
On ajoute le dépôt APT PostgreSQL :
 
On ajoute le dépôt APT PostgreSQL :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list
 
# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list
</pre>
+
</syntaxhighlight>
 +
 
  
 
On importe la clé public de ce dépôt :
 
On importe la clé public de ce dépôt :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
 
# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
 
gpg: directory `/root/.gnupg' created
 
gpg: directory `/root/.gnupg' created
Ligne 50 : Ligne 84 :
 
gpg:              imported: 1  (RSA: 1)
 
gpg:              imported: 1  (RSA: 1)
 
OK
 
OK
</pre>
+
</syntaxhighlight>
 +
 
  
 
On met à jour le cache APT pour prendre en compte le dépôt :
 
On met à jour le cache APT pour prendre en compte le dépôt :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# apt-get update
 
# apt-get update
</pre>
+
</syntaxhighlight>
 +
 
  
 
On installe le paquet postgresql (installera la dernière version stable soit la 9.5 au moment où sont écrites ces lignes) :
 
On installe le paquet postgresql (installera la dernière version stable soit la 9.5 au moment où sont écrites ces lignes) :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# apt-get install postgresql
 
# apt-get install postgresql
</pre>
+
</syntaxhighlight>
 +
 
  
 
On définit un mot de passe (de son choix mais sécurisé) et génère une paire de clé ssh (sans passphrase) pour l’utilisateur système postgres :
 
On définit un mot de passe (de son choix mais sécurisé) et génère une paire de clé ssh (sans passphrase) pour l’utilisateur système postgres :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# passwd postgres
 
# passwd postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
# su - postgres
 
# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
$ ssh-keygen
 
$ ssh-keygen
</pre>
+
</syntaxhighlight>
 +
 
 +
 
 +
On copie la clé ssh public de l’utilisateur postgres depuis et entre chaque {{Template:Serveur}} :
  
On copie la clé ssh public de l’utilisateur postgres depuis et entre chaque serveur :
 
  
Depuis le premier serveur (postgres01 dans notre cas) vers le second (postgres02 pour nous) et troisisème (postgres03) :
+
Depuis le premier {{Template:Serveur}} (postgres01 dans notre cas) vers le second (postgres02 pour nous) et troisisème (postgres03) :
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres01:~# su - postgres
 
root@postgres01:~# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres01:~$ ssh-copy-id postgres02
 
postgres@postgres01:~$ ssh-copy-id postgres02
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres01:~$ ssh-copy-id postgres03
 
postgres@postgres01:~$ ssh-copy-id postgres03
</pre>
+
</syntaxhighlight>
 +
 
  
Depuis le second serveur vers le premier et troisième :
+
Depuis le second {{Template:Serveur}} vers le premier et troisième :
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres02:~# su - postgres
 
root@postgres02:~# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres02:~$ ssh-copy-id postgres01
 
postgres@postgres02:~$ ssh-copy-id postgres01
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres02:~$ ssh-copy-id postgres03
 
postgres@postgres02:~$ ssh-copy-id postgres03
</pre>
+
</syntaxhighlight>
 +
 
  
Depuis le troisième serveur vers le premier et second :
+
Depuis le troisième {{Template:Serveur}} vers le premier et second :
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres03:~# su - postgres
 
root@postgres03:~# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres03:~$ ssh-copy-id postgres01
 
postgres@postgres03:~$ ssh-copy-id postgres01
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres03:~$ ssh-copy-id postgres02
 
postgres@postgres03:~$ ssh-copy-id postgres02
</pre>
+
</syntaxhighlight>
  
 
== Configuration du Master ==
 
== Configuration du Master ==
 +
  
 
A faire uniquement sur le master (postgres01 dans notre cas) :
 
A faire uniquement sur le master (postgres01 dans notre cas) :
 +
  
 
On crée le rôle/utilisateur de réplication :
 
On crée le rôle/utilisateur de réplication :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# su - postgres
 
# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD 'GmuY@8Smm%';"
+
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"
</pre>
+
</syntaxhighlight>
 +
 
 +
''Note : on définit une limite de connexion de 2 car nous avons 2 slaves''
  
Note : on définit une limite de connexion de 2 car nous avons 2 slaves
 
  
 
On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les directives suivantes :
 
On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les directives suivantes :
  
<pre>
+
<syntaxhighlight lang="bash">
 
listen_addresses = '*'
 
listen_addresses = '*'
 
wal_level = hot_standby
 
wal_level = hot_standby
 
archive_mode = on
 
archive_mode = on
archive_command = 'rsync -av %p postgres@10.1.1.90:/var/lib/postgresql/wal_archive/%f'
+
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
 
max_wal_senders = 2
 
max_wal_senders = 2
 
wal_keep_segments = 256
 
wal_keep_segments = 256
 
hot_standby = on
 
hot_standby = on
</pre>
+
</syntaxhighlight>
  
Note: nous activons l’archivage vers notre second serveur (adaptez l’adresse ip par celle de votre serveur) pour encore plus de précautions. Nous définissons également les paramètres hot_standby, bien que ignorés sur un master, dans le cas où celui-ci devait être rétrogradé en slave dans l’avenir.
+
''Note: nous activons l’archivage vers notre second {{Template:Serveur}} (adaptez l’adresse ip par celle de votre {{Template:Serveur}}) pour encore plus de précautions mais cela n'est pas une obligation. Nous définissons également les paramètres hot_standby, bien que ignorés sur un master, dans le cas où celui-ci devait être rétrogradé en slave dans l’avenir.''
  
  
 
On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos slaves soit la ligne suivante à la fin du fichier :
 
On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos slaves soit la ligne suivante à la fin du fichier :
  
<pre>
+
<syntaxhighlight lang="bash">
hostssl replication    repuser 10.1.1.0/24    md5
+
hostssl replication    repuser <ip du réseau de vos serveurs>/24    md5
</pre>
+
</syntaxhighlight>
 +
 
 +
''Veuillez adapter cette ligne en fonction du nom de votre utilisateur de réplication et du réseau (ou adresses ip respectives) de vos slaves''
  
Veuillez adapter cette ligne en fonction du nom de votre utilisateur de réplication et du réseau (ou adresses ip respectives) de vos slaves
 
  
 
On redémarre le service postgresql pour prendre en compte notre configuration (en root) :
 
On redémarre le service postgresql pour prendre en compte notre configuration (en root) :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# systemctl restart postgresql
 
# systemctl restart postgresql
</pre>
+
</syntaxhighlight>
 +
 
  
 
On s’assure que le service a démarré correctement :
 
On s’assure que le service a démarré correctement :
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres01:~# systemctl status postgresql
 
root@postgres01:~# systemctl status postgresql
 
● postgresql.service - PostgreSQL RDBMS
 
● postgresql.service - PostgreSQL RDBMS
Ligne 167 : Ligne 213 :
 
   Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 
   Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 
  Main PID: 77056 (code=exited, status=0/SUCCESS)
 
  Main PID: 77056 (code=exited, status=0/SUCCESS)
</pre>
+
</syntaxhighlight>
 +
 
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres01:~# ps -u postgres u
 
root@postgres01:~# ps -u postgres u
 
USER        PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
USER        PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
Ligne 179 : Ligne 226 :
 
postgres  77044  0.0  0.6  82244  3392 ?        Ss  12:06  0:00 postgres: archiver process
 
postgres  77044  0.0  0.6  82244  3392 ?        Ss  12:06  0:00 postgres: archiver process
 
postgres  77045  0.0  0.8  82244  4244 ?        Ss  12:06  0:00 postgres: stats collector process
 
postgres  77045  0.0  0.8  82244  4244 ?        Ss  12:06  0:00 postgres: stats collector process
</pre>
+
</syntaxhighlight>
  
 
== Configuration des slaves ==
 
== Configuration des slaves ==
Ligne 187 : Ligne 234 :
 
On commence par stopper le service postgresql :
 
On commence par stopper le service postgresql :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# systemctl stop postgresql
 
# systemctl stop postgresql
</pre>
+
</syntaxhighlight>
 +
 
  
On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les même directives que sur le master, en adaptant juste l’ip du premier slave par celle du second slave dans la commande rsync d’archivage soit :
+
On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les même directives que sur le master, en adaptant juste l’ip du premier slave par celle du second slave dans la commande rsync d’archivage si vous souhaitez l'activer soit :
  
<pre>
+
<syntaxhighlight lang="bash">
 
listen_addresses = '*'
 
listen_addresses = '*'
 
wal_level = hot_standby
 
wal_level = hot_standby
 
archive_mode = on
 
archive_mode = on
archive_command = 'rsync -av %p postgres@10.1.1.199:/var/lib/postgresql/wal_archive/%f'
+
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
 
max_wal_senders = 2
 
max_wal_senders = 2
 
wal_keep_segments = 256
 
wal_keep_segments = 256
 
hot_standby = on
 
hot_standby = on
</pre>
+
</syntaxhighlight>
 +
 
 +
 
 +
On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos autres {{Template:Serveur}}s (cela ne servira que dans le cas où ce slave devrait promu master) :
  
On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos autres serveurs cela ne servira qu’au cas où ce slave serait promu master :
+
<syntaxhighlight lang="bash">
 +
hostssl replication    repuser <ip du réseau de vos serveurs>/24    md5
 +
</syntaxhighlight>
  
<pre>
+
''Note : Avec cette configuration similaire à celle de notre master cela permettra de promouvoir facilement ce slave en tant que master en cas de besoin.''
hostssl replication    repuser 10.1.1.0/24    md5
 
</pre>
 
  
Avec cette configuration similaire à celle de notre master cela permettra de promouvoir facilement ce slave en tant que master en cas de besoin.
 
  
 
Pour les opérations ci-dessous, connectez-vous en tant qu’utilisateur système postgres :
 
Pour les opérations ci-dessous, connectez-vous en tant qu’utilisateur système postgres :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# su – postgres
 
# su – postgres
</pre>
+
</syntaxhighlight>
 +
 
  
 
On crée le répertoire de destination des archives wal du master :
 
On crée le répertoire de destination des archives wal du master :
  
<pre>
+
<syntaxhighlight lang="bash">
 
$ mkdir /var/lib/postgresql/wal_archive
 
$ mkdir /var/lib/postgresql/wal_archive
</pre>
+
</syntaxhighlight>
 +
 
  
 
On supprime le répertoire de données postgresql :
 
On supprime le répertoire de données postgresql :
  
<pre>
+
<syntaxhighlight lang="bash">
 
$ rm -rf /var/lib/postgresql/9.5/main
 
$ rm -rf /var/lib/postgresql/9.5/main
</pre>
+
</syntaxhighlight>
 +
 
  
On fait le base backup (adaptez l’ip par celle de votre master et le nom de votre utilisateur de réplication), le mot de passe de votre utilisateur de réplication vous sera demandé :
+
On fait le base {{Template:Backup}} (adaptez l’ip par celle de votre master et le nom de votre utilisateur de réplication), le mot de passe de votre utilisateur de réplication vous sera demandé :
  
<pre>
+
<syntaxhighlight lang="bash">
 
$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog
 
$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog
</pre>
+
</syntaxhighlight>
 +
 
  
 
On configure la réplication en créant le fichier /var/lib/postgresql/9.5/main/recovery.conf avec les paramètres suivants :
 
On configure la réplication en créant le fichier /var/lib/postgresql/9.5/main/recovery.conf avec les paramètres suivants :
  
<pre>
+
<syntaxhighlight lang="bash">
 
standby_mode = on
 
standby_mode = on
 
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
 
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
 
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'
 
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'
</pre>
+
</syntaxhighlight>
 +
 
 +
''Note : Le fichier trigger est le fichier qu’on ne crée que lorsque l’on veut que son slave arrête la réplication et commence à accepter les écritures c’est-à-dire quand on veut le promouvoir comme master. Avant de promouvoir un slave en cas de crash de son master, il faut s’assurer que le master initial ne remontera pas pour éviter toute corruption.''
  
Le fichier trigger est le fichier qu’on ne crée que lorsque l’on veut que son slave arrête la réplication et commence à accepter les écritures c’est-à-dire quand on veut le promouvoir comme master. Avant de promouvoir un slave en cas de crash de son master il faut s’assurer que son master ne remontera pas.
 
  
 
On repasse root et on démarre le service :
 
On repasse root et on démarre le service :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# systemctl start postgresql
 
# systemctl start postgresql
</pre>
+
</syntaxhighlight>
 +
 
  
 
On s’assure que le service a correctement démarré :
 
On s’assure que le service a correctement démarré :
  
<pre>
+
<syntaxhighlight lang="bash">
root@postgres02:~# systemctl status postgresql
+
# systemctl status postgresql
 
● postgresql.service - PostgreSQL RDBMS
 
● postgresql.service - PostgreSQL RDBMS
 
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
 
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
Ligne 260 : Ligne 316 :
 
   Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 
   Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 
  Main PID: 8894 (code=exited, status=0/SUCCESS)
 
  Main PID: 8894 (code=exited, status=0/SUCCESS)
</pre>
+
</syntaxhighlight>
 +
 
  
<pre>
+
<syntaxhighlight lang="bash">
root@postgres02:~# ps -u postgres u
+
# ps -u postgres u
 
USER        PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
USER        PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
postgres  8878  0.0  4.4 227308 21892 ?        S    12:53  0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
 
postgres  8878  0.0  4.4 227308 21892 ?        S    12:53  0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
Ligne 271 : Ligne 328 :
 
postgres  8882  0.0  0.6  82252  3316 ?        Ss  12:53  0:00 postgres: stats collector process
 
postgres  8882  0.0  0.6  82252  3316 ?        Ss  12:53  0:00 postgres: stats collector process
 
postgres  8883  0.0  1.7 238064  8520 ?        Ss  12:53  0:00 postgres: wal receiver process  streaming 0/30003E0
 
postgres  8883  0.0  1.7 238064  8520 ?        Ss  12:53  0:00 postgres: wal receiver process  streaming 0/30003E0
</pre>
+
</syntaxhighlight>
  
  
Si on se connecte à notre master, on peut déjà verifier que notre replication entre le master et le premier slave est fonctionnelle :
+
Si on se connecte à notre master, on peut déjà vérifier que notre réplication entre le master et le premier slave est fonctionnelle :
  
On se connecte sur notre master et on se loggue en utilisateur système postgres :
+
On se connecte sur notre master et on se connecte en utilisateur système postgres :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# su - postgres
 
# su - postgres
</pre>
+
</syntaxhighlight>
 +
 
  
Puis on se connecte à postgresql :
+
Puis on se connecte à ''postgresql'' :
  
<pre>
+
<syntaxhighlight lang="bash">
 
$ psql
 
$ psql
</pre>
+
</syntaxhighlight>
 +
 
  
 
On active l’affichage étendu et on vérifie notre réplication :
 
On active l’affichage étendu et on vérifie notre réplication :
  
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# \x
 
postgres=# \x
 
Expanded display is on.
 
Expanded display is on.
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# select * from pg_stat_replication;
 
postgres=# select * from pg_stat_replication;
 
-[ RECORD 1 ]----+------------------------------
 
-[ RECORD 1 ]----+------------------------------
Ligne 313 : Ligne 372 :
 
sync_priority    | 0
 
sync_priority    | 0
 
sync_state      | async
 
sync_state      | async
</pre>
+
</syntaxhighlight>
  
 
Notre réplication streaming asynchrone avec notre premier slave s’est bien faite. A ce stade on a une réplication Master/slave classique (un seul slave en streaming asynchrone)
 
Notre réplication streaming asynchrone avec notre premier slave s’est bien faite. A ce stade on a une réplication Master/slave classique (un seul slave en streaming asynchrone)
Ligne 325 : Ligne 384 :
 
On se connecte sur le master et on se loggue en utilisateur postgres :
 
On se connecte sur le master et on se loggue en utilisateur postgres :
  
<pre>
+
<syntaxhighlight lang="bash">
 
# su – postgres
 
# su – postgres
</pre>
+
</syntaxhighlight>
  
 
Puis on se connecte à postgresql :
 
Puis on se connecte à postgresql :
  
<pre>
+
<syntaxhighlight lang="bash">
 
$ psql
 
$ psql
</pre>
+
</syntaxhighlight>
 +
 
  
 
On active l’affichage étendu et on vérifie notre réplication :
 
On active l’affichage étendu et on vérifie notre réplication :
  
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# \x
 
postgres=# \x
 
Expanded display is on.
 
Expanded display is on.
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# select * from pg_stat_replication;
 
postgres=# select * from pg_stat_replication;
 
-[ RECORD 1 ]----+------------------------------
 
-[ RECORD 1 ]----+------------------------------
Ligne 377 : Ligne 437 :
 
sync_priority    | 0
 
sync_priority    | 0
 
sync_state      | async
 
sync_state      | async
</pre>
+
</syntaxhighlight>
 +
 
 +
On a donc bien nos 2 réplications avec nos deux {{Template:Serveur}}s slaves (postgres02 et postgres03).
  
On a donc bien nos 2 réplications avec nos deux serveurs slaves (postgres02 et postgres03).
 
  
Toujours connecté à postgresql sur le master, on crée une base de donnée (ex : checkrep) :
+
Toujours connecté à postgresql sur le master, on crée une base de données de test (ex : checkrep) pour confirmer que la réplication est fonctionnelle :
  
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# CREATE DATABASE checkrep;
 
postgres=# CREATE DATABASE checkrep;
</pre>
+
</syntaxhighlight>
 +
 
  
On vérifie que cette base de données s’est bien répliqué sur nos 2 slaves :
+
On vérifie que cette base de données s’est bien répliquée sur nos 2 slaves :
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres02:~# su - postgres
 
root@postgres02:~# su - postgres
</pre>
+
</syntaxhighlight>
<pre>
+
<syntaxhighlight lang="bash">
 
postgres@postgres02:~$ psql
 
postgres@postgres02:~$ psql
 
psql (9.5.3)
 
psql (9.5.3)
Ligne 408 : Ligne 470 :
 
           |          |          |            |            | postgres=CTc/postgres
 
           |          |          |            |            | postgres=CTc/postgres
 
(4 rows)
 
(4 rows)
</pre>
+
</syntaxhighlight>
 +
 
  
<pre>
+
<syntaxhighlight lang="bash">
 
root@postgres03:~# su - postgres
 
root@postgres03:~# su - postgres
 
postgres@postgres03:~$ psql
 
postgres@postgres03:~$ psql
Ligne 427 : Ligne 490 :
 
           |          |          |            |            | postgres=CTc/postgres
 
           |          |          |            |            | postgres=CTc/postgres
 
(4 rows)
 
(4 rows)
</pre>
+
</syntaxhighlight>
  
 
La base de données que nous avons crée sur notre master s’est donc bien automatiquement répliquée sur nos deux slaves.
 
La base de données que nous avons crée sur notre master s’est donc bien automatiquement répliquée sur nos deux slaves.
 +
  
 
Pour la supprimer, depuis le master :
 
Pour la supprimer, depuis le master :
  
<pre>
+
<syntaxhighlight lang="bash">
 
postgres=# DROP DATABASE checkrep;
 
postgres=# DROP DATABASE checkrep;
</pre>
+
</syntaxhighlight>
 +
 
 +
 
 +
 
 +
 
 +
[[category:PostgreSQL]]
 +
[[category:Linux]]
 +
[[Catégorie:Serveur VPS]]
 +
[[Catégorie:Serveur dédié]]
 +
<br />
 +
<comments />

Version actuelle datée du 1 janvier 2021 à 04:02

fr:Replication PostgreSQL multi slaves he:PostgreSQL שכפול עבדים רב ro:PostgreSQL replicare sclavi multi ru:PostgreSQL репликации рабы multi pl:PostgreSQL replikacji niewolników multi ja:PostgreSQL のレプリケーション スレーブ マルチ ar:كيو النسخ المتماثل العبيد متعددة zh:PostgreSQL 复制奴隶多 de:PostgreSQL Replikation Sklaven multi nl:PostgreSQL replicatie slaven multi it:PostgreSQL replica schiavi multi pt:Multi de escravos de replicação PostgreSQL es:PostgreSQL replicación esclavos multi en:PostgreSQL replication slaves multi


postgresql logo

Introduction

Cette page traite de la mise en place d'une réplication PostgreSQL streaming asynchrone avec un master et deux slaves. Nos slaves seront configurés comme hot standby, c'est à dire qu'il sera possible d'exécuter des requêtes (en lecture uniquement) sur ceux-ci.


Contexte de cette mise en place :


Nous avons 3 serveurs Debian 8 (mis à jour) :

Postgres01 (10.1.1.75) : sera notre Master

Postgres02 (10.1.1.90) : sera un slave

Postgres03 (10.1.1.199) : sera un second slave


Les commandes indiquées seront à effectuer en root quand elles sont précédées de "#" et en tant qu'utilisateur système postgres quand elles sont précédées de "$".

Installation de PostgreSQL et pré-configuration des trois serveurs

Toutes les commandes de cette partie sont à faire sur chacun des serveurs.

Dans un premier temps, il est recommandé d'avoir un fichier /etc/hosts peuplé avec les correspondances de chaque serveur, comme ceci (en adaptant avec les hostnames et adresses ip de vos propres serveurs) :

# cat /etc/hosts
127.0.0.1       localhost

10.1.1.75       postgres01
10.1.1.90       postgres02
10.1.1.199      postgres03


On ajoute le dépôt APT PostgreSQL :

# echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgres.list


On importe la clé public de ce dépôt :

# gpg --keyserver pgpkeys.mit.edu --recv-key 7FCC7D46ACCC4CF8 && gpg -a --export 7FCC7D46ACCC4CF8 | apt-key add -
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key ACCC4CF8 from hkp server pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ACCC4CF8: public key "PostgreSQL Debian Repository" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK


On met à jour le cache APT pour prendre en compte le dépôt :

# apt-get update


On installe le paquet postgresql (installera la dernière version stable soit la 9.5 au moment où sont écrites ces lignes) :

# apt-get install postgresql


On définit un mot de passe (de son choix mais sécurisé) et génère une paire de clé ssh (sans passphrase) pour l’utilisateur système postgres :

# passwd postgres
# su - postgres
$ ssh-keygen


On copie la clé ssh public de l’utilisateur postgres depuis et entre chaque serveur :


Depuis le premier serveur (postgres01 dans notre cas) vers le second (postgres02 pour nous) et troisisème (postgres03) :

root@postgres01:~# su - postgres
postgres@postgres01:~$ ssh-copy-id postgres02
postgres@postgres01:~$ ssh-copy-id postgres03


Depuis le second serveur vers le premier et troisième :

root@postgres02:~# su - postgres
postgres@postgres02:~$ ssh-copy-id postgres01
postgres@postgres02:~$ ssh-copy-id postgres03


Depuis le troisième serveur vers le premier et second :

root@postgres03:~# su - postgres
postgres@postgres03:~$ ssh-copy-id postgres01
postgres@postgres03:~$ ssh-copy-id postgres02

Configuration du Master

A faire uniquement sur le master (postgres01 dans notre cas) :


On crée le rôle/utilisateur de réplication :

# su - postgres
$ psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '<mot de passe repuser>';"

Note : on définit une limite de connexion de 2 car nous avons 2 slaves


On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les directives suivantes :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du premier slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on

Note: nous activons l’archivage vers notre second serveur (adaptez l’adresse ip par celle de votre serveur) pour encore plus de précautions mais cela n'est pas une obligation. Nous définissons également les paramètres hot_standby, bien que ignorés sur un master, dans le cas où celui-ci devait être rétrogradé en slave dans l’avenir.


On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos slaves soit la ligne suivante à la fin du fichier :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Veuillez adapter cette ligne en fonction du nom de votre utilisateur de réplication et du réseau (ou adresses ip respectives) de vos slaves


On redémarre le service postgresql pour prendre en compte notre configuration (en root) :

# systemctl restart postgresql


On s’assure que le service a démarré correctement :

root@postgres01:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:06:28 CEST; 22s ago
  Process: 77056 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 77056 (code=exited, status=0/SUCCESS)


root@postgres01:~# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres  77038  0.0  4.4 227300 21836 ?        S    12:06   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres  77040  0.0  0.8 227300  4160 ?        Ss   12:06   0:00 postgres: checkpointer process
postgres  77041  0.0  1.0 227300  4968 ?        Ss   12:06   0:00 postgres: writer process
postgres  77042  0.0  1.7 227300  8776 ?        Ss   12:06   0:00 postgres: wal writer process
postgres  77043  0.0  1.3 227728  6708 ?        Ss   12:06   0:00 postgres: autovacuum launcher process
postgres  77044  0.0  0.6  82244  3392 ?        Ss   12:06   0:00 postgres: archiver process
postgres  77045  0.0  0.8  82244  4244 ?        Ss   12:06   0:00 postgres: stats collector process

Configuration des slaves

Sur le premier slave

On commence par stopper le service postgresql :

# systemctl stop postgresql


On édite le fichier de configuration principal de postgresql /etc/postgresql/9.5/main/postgresql.conf pour configurer les même directives que sur le master, en adaptant juste l’ip du premier slave par celle du second slave dans la commande rsync d’archivage si vous souhaitez l'activer soit :

listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
archive_command = 'rsync -av %p postgres@<ip du second slave>:/var/lib/postgresql/wal_archive/%f'
max_wal_senders = 2
wal_keep_segments = 256
hot_standby = on


On édite maintenant le fichier d’authentification de postgresql /etc/postgresql/9.5/main/pg_hba.conf pour ajouter l’autorisation de notre utilisateur de réplication à se connecter depuis nos autres serveurs (cela ne servira que dans le cas où ce slave devrait promu master) :

hostssl replication     repuser <ip du réseau de vos serveurs>/24     md5

Note : Avec cette configuration similaire à celle de notre master cela permettra de promouvoir facilement ce slave en tant que master en cas de besoin.


Pour les opérations ci-dessous, connectez-vous en tant qu’utilisateur système postgres :

# su – postgres


On crée le répertoire de destination des archives wal du master :

$ mkdir /var/lib/postgresql/wal_archive


On supprime le répertoire de données postgresql :

$ rm -rf /var/lib/postgresql/9.5/main


On fait le base backup (adaptez l’ip par celle de votre master et le nom de votre utilisateur de réplication), le mot de passe de votre utilisateur de réplication vous sera demandé :

$ pg_basebackup -h <ip de votre master> -D /var/lib/postgresql/9.5/main -U repuser -v -P --xlog


On configure la réplication en créant le fichier /var/lib/postgresql/9.5/main/recovery.conf avec les paramètres suivants :

standby_mode = on
primary_conninfo = 'host=<ip de votre master> port=5432 user=repuser password=<mot de passe de repuser> sslmode=require application_name=<hostname de votre slave>'
trigger_file = '/var/lib/postgresql/9.5/postgres.trigger'

Note : Le fichier trigger est le fichier qu’on ne crée que lorsque l’on veut que son slave arrête la réplication et commence à accepter les écritures c’est-à-dire quand on veut le promouvoir comme master. Avant de promouvoir un slave en cas de crash de son master, il faut s’assurer que le master initial ne remontera pas pour éviter toute corruption.


On repasse root et on démarre le service :

# systemctl start postgresql


On s’assure que le service a correctement démarré :

# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Thu 2016-06-02 12:53:42 CEST; 1min 6s ago
  Process: 8894 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 8894 (code=exited, status=0/SUCCESS)


# ps -u postgres u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres   8878  0.0  4.4 227308 21892 ?        S    12:53   0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.
postgres   8879  0.0  1.1 227376  5700 ?        Ss   12:53   0:00 postgres: startup process   recovering 00000001000000000000000
postgres   8880  0.0  0.8 227308  4140 ?        Ss   12:53   0:00 postgres: checkpointer process
postgres   8881  0.0  1.0 227308  5236 ?        Ss   12:53   0:00 postgres: writer process
postgres   8882  0.0  0.6  82252  3316 ?        Ss   12:53   0:00 postgres: stats collector process
postgres   8883  0.0  1.7 238064  8520 ?        Ss   12:53   0:00 postgres: wal receiver process   streaming 0/30003E0


Si on se connecte à notre master, on peut déjà vérifier que notre réplication entre le master et le premier slave est fonctionnelle :

On se connecte sur notre master et on se connecte en utilisateur système postgres :

# su - postgres


Puis on se connecte à postgresql :

$ psql


On active l’affichage étendu et on vérifie notre réplication :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_CRElocation    | 0/30004C0
write_location   | 0/30004C0
flush_location   | 0/30004C0
replay_location  | 0/30004C0
sync_priority    | 0
sync_state       | async

Notre réplication streaming asynchrone avec notre premier slave s’est bien faite. A ce stade on a une réplication Master/slave classique (un seul slave en streaming asynchrone)

Sur le second slave

On refait à l’identique ce qui a été fait sur le premier slave en adaptant évidemment son hostname dans le fichier recovery.conf et l’adresse ip dans la commande d’archivage dans le fichier de configuration principal si vous souhaitez également activer l'archivage sur ce second slave.

Vérification et test de notre réplication master multi slaves

On se connecte sur le master et on se loggue en utilisateur postgres :

# su – postgres

Puis on se connecte à postgresql :

$ psql


On active l’affichage étendu et on vérifie notre réplication :

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 78879
usesysid         | 16384
usename          | repuser
application_name | postgres02
client_addr      | 10.1.1.90
client_hostname  |
client_port      | 49009
backend_start    | 2016-06-02 12:53:36.641823+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async
-[ RECORD 2 ]----+------------------------------
pid              | 82725
usesysid         | 16384
usename          | repuser
application_name | postgres03
client_addr      | 10.1.1.199
client_hostname  |
client_port      | 51754
backend_start    | 2016-06-02 14:31:43.759683+02
backend_xmin     |
state            | streaming
sent_location    | 0/5000140
write_location   | 0/5000140
flush_location   | 0/5000140
replay_location  | 0/5000140
sync_priority    | 0
sync_state       | async

On a donc bien nos 2 réplications avec nos deux serveurs slaves (postgres02 et postgres03).


Toujours connecté à postgresql sur le master, on crée une base de données de test (ex : checkrep) pour confirmer que la réplication est fonctionnelle :

postgres=# CREATE DATABASE checkrep;


On vérifie que cette base de données s’est bien répliquée sur nos 2 slaves :

root@postgres02:~# su - postgres
postgres@postgres02:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)


root@postgres03:~# su - postgres
postgres@postgres03:~$ psql
psql (9.5.3)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 checkrep  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

La base de données que nous avons crée sur notre master s’est donc bien automatiquement répliquée sur nos deux slaves.


Pour la supprimer, depuis le master :

postgres=# DROP DATABASE checkrep;



Vous n'êtes pas autorisé à publier de commentaire.