{"id":60530,"date":"2022-08-11T13:36:50","date_gmt":"2022-08-11T12:36:50","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=60530&#038;preview=true&#038;preview_id=60530"},"modified":"2023-08-22T13:03:18","modified_gmt":"2023-08-22T12:03:18","slug":"replication-postgresql","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/","title":{"rendered":"R\u00e9plication PostgreSQL : Un guide complet"},"content":{"rendered":"<p>Comme tout propri\u00e9taire de site vous le dira, les pertes de donn\u00e9es et les temps d&rsquo;arr\u00eat, m\u00eame \u00e0 doses minimes, peuvent \u00eatre catastrophiques. Elles peuvent frapper \u00e0 tout moment les personnes non pr\u00e9par\u00e9es, entra\u00eenant une r\u00e9duction de la productivit\u00e9, de l&rsquo;accessibilit\u00e9 et de la confiance dans les produits.<\/p>\n<p>Pour prot\u00e9ger l&rsquo;int\u00e9grit\u00e9 de votre site, il est essentiel de mettre en place des protections contre l&rsquo;\u00e9ventualit\u00e9 d&rsquo;un temps d&rsquo;arr\u00eat ou d&rsquo;une perte de donn\u00e9es.<\/p>\n<p>C&rsquo;est l\u00e0 que la r\u00e9plication des donn\u00e9es entre en jeu.<\/p>\n\n<p>La r\u00e9plication de donn\u00e9es est un processus de sauvegarde automatis\u00e9 dans lequel vos donn\u00e9es sont copi\u00e9es de mani\u00e8re r\u00e9p\u00e9t\u00e9e depuis sa base de donn\u00e9es principale vers un autre emplacement distant pour \u00eatre conserv\u00e9es en s\u00e9curit\u00e9. Il s&rsquo;agit d&rsquo;une technologie int\u00e9grale pour tout site ou application utilisant un serveur de <a href=\"https:\/\/kinsta.com\/fr\/blog\/bases-de-donnees-wordpress\/\">base de donn\u00e9es<\/a>. Vous pouvez \u00e9galement exploiter la base de donn\u00e9es r\u00e9pliqu\u00e9e pour traiter le SQL en lecture seule, ce qui permet d&rsquo;ex\u00e9cuter davantage de processus dans le syst\u00e8me.<\/p>\n<p>La mise en place d&rsquo;une r\u00e9plication entre deux bases de donn\u00e9es offre une tol\u00e9rance aux pannes contre les impr\u00e9vus. Elle est consid\u00e9r\u00e9e comme la meilleure strat\u00e9gie pour obtenir une haute disponibilit\u00e9 en cas de sinistre.<\/p>\n<p>Dans cet article, nous allons nous plonger dans les diff\u00e9rentes strat\u00e9gies qui peuvent \u00eatre mises en \u0153uvre par les <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpeur-backend\/\">d\u00e9veloppeurs backend<\/a> pour une r\u00e9plication PostgreSQL transparente.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Qu&rsquo;est-ce que la r\u00e9plication PostgreSQL ?<\/h2>\n<figure id=\"attachment_128034\" aria-describedby=\"caption-attachment-128034\" style=\"width: 945px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128034 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/PostgreSQL-Replication-Illustration.png\" alt=\"Illustration de la r\u00e9plication PostgreSQL\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Illustration de la r\u00e9plication PostgreSQL (Image Source : <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>La r\u00e9plication PostgreSQL est d\u00e9finie comme le processus de copie des donn\u00e9es d&rsquo;un serveur de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-postgresql\/\">base de donn\u00e9es PostgreSQL<\/a> vers un autre serveur. Le serveur de base de donn\u00e9es source est \u00e9galement connu sous le nom de serveur \u00ab primaire \u00bb, tandis que le serveur de base de donn\u00e9es recevant les donn\u00e9es copi\u00e9es est connu sous le nom de serveur \u00ab r\u00e9plique \u00bb.<\/p>\n<p>La base de donn\u00e9es PostgreSQL suit un mod\u00e8le de r\u00e9plication simple, o\u00f9 toutes les \u00e9critures vont vers un n\u0153ud primaire. Le n\u0153ud primaire peut ensuite appliquer ces modifications et les diffuser aux n\u0153uds secondaires.<\/p>\n<h3>Qu&rsquo;est-ce que le basculement automatique ?<\/h3>\n<p>Le basculement est une m\u00e9thode permettant de <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\">r\u00e9cup\u00e9rer les donn\u00e9es si le serveur primaire s&rsquo;arr\u00eate<\/a> pour une raison quelconque. Tant que vous avez configur\u00e9 PostreSQL pour g\u00e9rer la r\u00e9plication de votre flux physique, vous &#8211; et vos utilisateurs &#8211; serez prot\u00e9g\u00e9s des temps d&rsquo;arr\u00eat dus \u00e0 une d\u00e9faillance du serveur primaire.<\/p>\n<p>Notez que le processus de basculement peut prendre un certain temps \u00e0 configurer et \u00e0 lancer. Il n&rsquo;existe pas d&rsquo;outils int\u00e9gr\u00e9s pour la surveillance et la port\u00e9e des pannes de serveur dans PostgreSQL, vous devrez donc faire preuve de cr\u00e9ativit\u00e9.<\/p>\n<p>Heureusement, vous ne devez pas \u00eatre d\u00e9pendant de PostgreSQL pour le basculement. Il existe des outils d\u00e9di\u00e9s qui permettent le basculement automatique et la commutation automatique sur le serveur de secours, r\u00e9duisant ainsi les <a href=\"https:\/\/kinsta.com\/fr\/blog\/reparer-base-de-donnees-wordpress\/\">temps d&rsquo;arr\u00eat de la base de donn\u00e9es<\/a>.<\/p>\n<p>En mettant en place la r\u00e9plication par basculement, vous garantissez pratiquement la haute disponibilit\u00e9 en vous assurant que les serveurs de secours sont disponibles si le serveur primaire s&rsquo;effondre un jour.<\/p>\n<h2>Avantages de l&rsquo;utilisation de la r\u00e9plication PostgreSQL<\/h2>\n<p>Voici quelques avantages cl\u00e9s de l&rsquo;utilisation de la r\u00e9plication PostgreSQL :<\/p>\n<ul>\n<li><strong>Migration des donn\u00e9es <\/strong>: Vous pouvez exploiter la r\u00e9plication PostgreSQL pour la migration des donn\u00e9es, soit par un changement de mat\u00e9riel du serveur de base de donn\u00e9es, soit par le d\u00e9ploiement du syst\u00e8me.<\/li>\n<li><strong>Tol\u00e9rance aux pannes <\/strong>: Si le serveur primaire tombe en panne, le serveur de secours peut faire office de serveur car les donn\u00e9es contenues dans les serveurs primaire et de secours sont les m\u00eames.<\/li>\n<li><strong>Performances du traitement transactionnel en ligne (OLTP) <\/strong>: Vous pouvez am\u00e9liorer le temps de traitement des transactions et le temps de requ\u00eate d&rsquo;un syst\u00e8me OLTP en supprimant la charge de requ\u00eate de reporting. Le temps de traitement des transactions est la dur\u00e9e n\u00e9cessaire \u00e0 l&rsquo;ex\u00e9cution d&rsquo;une requ\u00eate donn\u00e9e avant qu&rsquo;une transaction ne soit termin\u00e9e.<\/li>\n<li><strong>Test du syst\u00e8me en parall\u00e8le <\/strong>: Lors de la mise \u00e0 niveau d&rsquo;un nouveau syst\u00e8me, vous devez vous assurer que le syst\u00e8me se comporte bien avec les donn\u00e9es existantes, d&rsquo;o\u00f9 la n\u00e9cessit\u00e9 de tester avec une copie de la base de donn\u00e9es de production avant le d\u00e9ploiement.<\/li>\n<\/ul>\n<h2>Comment fonctionne la r\u00e9plication PostgreSQL<\/h2>\n<p>En g\u00e9n\u00e9ral, les gens pensent que quand on s&rsquo;amuse avec une architecture primaire et secondaire, il n&rsquo;y a qu&rsquo;une seule fa\u00e7on de <a href=\"https:\/\/kinsta.com\/fr\/blog\/sauvegarder-site-wordpress\/\">configurer les sauvegardes<\/a> et la r\u00e9plication. Les d\u00e9ploiements PostgreSQL, cependant, peuvent suivre n&rsquo;importe <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\">laquelle de ces trois m\u00e9thodes<\/a> :<\/p>\n<ol>\n<li><strong>R\u00e9plication en continu :<\/strong> R\u00e9plique les donn\u00e9es depuis le n\u0153ud primaire vers le secondaire, puis copie les donn\u00e9es sur Amazon S3 ou Azure Blob pour le stockage de sauvegarde.<\/li>\n<li><strong>R\u00e9plication au niveau du volume :<\/strong> R\u00e9plique les donn\u00e9es au niveau de la couche de stockage, depuis le n\u0153ud primaire vers le n\u0153ud secondaire, puis copie les donn\u00e9es vers Amazon S3 ou Azure Blob pour le stockage de sauvegarde.<\/li>\n<li><strong>Sauvegardes incr\u00e9mentielles :<\/strong> R\u00e9plique les donn\u00e9es depuis le n\u0153ud primaire tout en construisant un nouveau n\u0153ud secondaire \u00e0 partir du stockage Amazon S3 ou Azure Blob, ce qui permet le streaming directement depuis le n\u0153ud primaire.<\/li>\n<\/ol>\n<h3>M\u00e9thode 1 : Streaming<\/h3>\n<p>La r\u00e9plication en continu PostgreSQL, \u00e9galement connue sous le nom de r\u00e9plication WAL, peut \u00eatre configur\u00e9e de mani\u00e8re transparente apr\u00e8s l&rsquo;installation de PostgreSQL sur tous les serveurs. Cette approche de la r\u00e9plication est bas\u00e9e sur le d\u00e9placement des fichiers WAL de la base de donn\u00e9es primaire vers la base de donn\u00e9es cible.<\/p>\n<p>Vous pouvez impl\u00e9menter la r\u00e9plication en continu PostgreSQL en utilisant une configuration primaire-secondaire. Le serveur primaire est l&rsquo;instance principale qui g\u00e8re la base de donn\u00e9es primaire et toutes ses op\u00e9rations. Le serveur secondaire agit en tant qu&rsquo;instance suppl\u00e9mentaire et ex\u00e9cute toutes les modifications apport\u00e9es \u00e0 la base de donn\u00e9es primaire sur lui-m\u00eame, g\u00e9n\u00e9rant une copie identique dans le processus. Le serveur primaire est le serveur de lecture\/\u00e9criture tandis que le serveur secondaire est simplement en lecture seule.<\/p>\n<p>Pour cette m\u00e9thode, vous devez configurer \u00e0 la fois le n\u0153ud primaire et le n\u0153ud de secours. Les sections suivantes expliquent les \u00e9tapes \u00e0 suivre pour les configurer facilement.<\/p>\n<h4>Configuration du n\u0153ud primaire<\/h4>\n<p>Vous pouvez configurer le n\u0153ud primaire pour la r\u00e9plication en continu en effectuant les \u00e9tapes suivantes :<\/p>\n<h5>\u00c9tape 1 : initialiser la base de donn\u00e9es<\/h5>\n<p>Pour <a href=\"https:\/\/hevodata.com\/learn\/postgresql-streaming-replication\/#master1\">initialiser la base de donn\u00e9es<\/a>, vous pouvez utiliser la commande utilitaire <code>initdb<\/code>. Ensuite, vous pouvez cr\u00e9er un nouvel utilisateur avec des privil\u00e8ges de r\u00e9plication en utilisant la commande suivante :<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>L&rsquo;utilisateur devra fournir un mot de passe et un nom d&rsquo;utilisateur pour la requ\u00eate donn\u00e9e. Le mot-cl\u00e9 de r\u00e9plication est utilis\u00e9 pour donner \u00e0 l&rsquo;utilisateur les privil\u00e8ges requis. Un exemple de requ\u00eate ressemblerait \u00e0 ceci :<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>\u00c9tape 2 : Configuration des propri\u00e9t\u00e9s de streaming<\/h5>\n<p>Ensuite, vous pouvez configurer les propri\u00e9t\u00e9s de streaming avec le fichier de configuration de PostgreSQL (<strong>postgresql.conf<\/strong>) qui peut \u00eatre modifi\u00e9 comme suit :<\/p>\n<pre><code class=\"bash\">wal_level = logical\nwal_log_hints = on\nmax_wal_senders = 8\nmax_wal_size = 1GB\nhot_standby = on<\/code><\/pre>\n<p>Voici un peu de contexte autour des param\u00e8tres utilis\u00e9s dans le snippet pr\u00e9c\u00e9dent :<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code><\/strong>: Ce param\u00e8tre est n\u00e9cessaire pour la fonction <code>pg_rewind<\/code> qui s&rsquo;av\u00e8re utile lorsque le serveur en attente n&rsquo;est pas synchronis\u00e9 avec le serveur principal.<\/li>\n<li><strong><code>wal_level<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour activer la r\u00e9plication PostgreSQL en continu, avec des valeurs possibles telles que <code>minimal<\/code>, <code>replica<\/code>, ou <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour sp\u00e9cifier la taille des fichiers WAL qui peuvent \u00eatre conserv\u00e9s dans les fichiers journaux.<\/li>\n<li><strong><code>hot_standby<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour une connexion en lecture seule avec le secondaire lorsqu&rsquo;il est d\u00e9fini sur ON.<\/li>\n<li><strong><code>max_wal_senders<\/code><\/strong>: Vous pouvez utiliser <code>max_wal_senders<\/code> pour sp\u00e9cifier le nombre maximum de connexions simultan\u00e9es qui peuvent \u00eatre \u00e9tablies avec les serveurs en attente.<\/li>\n<\/ul>\n<h5>\u00c9tape 3 : Cr\u00e9er une nouvelle entr\u00e9e<\/h5>\n<p>Apr\u00e8s avoir modifi\u00e9 les param\u00e8tres dans le fichier <strong>postgresql.conf<\/strong>, une nouvelle entr\u00e9e de r\u00e9plication dans le fichier <strong>pg_hba.conf<\/strong> peut permettre aux serveurs d&rsquo;\u00e9tablir une connexion entre eux pour la r\u00e9plication.<\/p>\n<p>Vous pouvez g\u00e9n\u00e9ralement trouver ce fichier dans le r\u00e9pertoire de donn\u00e9es de PostgreSQL. Vous pouvez utiliser l&rsquo;extrait de code suivant pour ce faire :<\/p>\n<pre><code class=\"language-bash\">host replication rep_user IPaddress md5<\/code><\/pre>\n<p>Une fois que le bout de code est ex\u00e9cut\u00e9, le serveur primaire permet \u00e0 un utilisateur appel\u00e9 <code>rep_user<\/code> de se connecter et d&rsquo;agir en tant que serveur de secours en utilisant l&rsquo;IP sp\u00e9cifi\u00e9e pour la r\u00e9plication. Par exemple :<\/p>\n<pre><code class=\"language-bash\">host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Configuration du n\u0153ud de standby<\/h4>\n<p>Pour configurer le n\u0153ud de standby pour la r\u00e9plication en continu, suivez ces \u00e9tapes :<\/p>\n<h5>\u00c9tape 1 : sauvegarder le n\u0153ud primaire<\/h5>\n<p>Pour configurer le n\u0153ud de secours, exploitez l&rsquo;utilitaire <code>pg_basebackup<\/code> pour g\u00e9n\u00e9rer une sauvegarde du n\u0153ud primaire. Celle-ci servira de point de d\u00e9part pour le n\u0153ud de secours. Vous pouvez utiliser cet utilitaire avec la syntaxe suivante :<\/p>\n<pre><code class=\"language-bash\"> pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>Les param\u00e8tres utilis\u00e9s dans la syntaxe mentionn\u00e9e ci-dessus sont les suivants :<\/p>\n<ul>\n<li><strong><code>-h<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour mentionner l&rsquo;h\u00f4te primaire.<\/li>\n<li><strong><code>-D<\/code><\/strong>: Ce param\u00e8tre indique le r\u00e9pertoire sur lequel vous travaillez actuellement.<\/li>\n<li><strong><code>-C<\/code><\/strong>: Vous pouvez l&rsquo;utiliser pour d\u00e9finir les points de contr\u00f4le.<\/li>\n<li><strong><code>-X<\/code><\/strong>: Ce param\u00e8tre peut \u00eatre utilis\u00e9 pour inclure les fichiers journaux transactionnels n\u00e9cessaires.<\/li>\n<li><strong><code>-W<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour demander \u00e0 l&rsquo;utilisateur un mot de passe avant de se connecter \u00e0 la base de donn\u00e9es.<\/li>\n<\/ul>\n<h5>\u00c9tape 2 : Configurer le fichier de configuration de r\u00e9plication<\/h5>\n<p>Ensuite, vous devez v\u00e9rifier si le fichier de configuration de r\u00e9plication existe. S&rsquo;il n&rsquo;existe pas, vous pouvez g\u00e9n\u00e9rer le fichier de configuration de r\u00e9plication en tant que <strong>recovery.conf<\/strong>.<\/p>\n<p>Vous devez cr\u00e9er ce fichier dans le r\u00e9pertoire de donn\u00e9es de l&rsquo;installation PostgreSQL. Vous pouvez le g\u00e9n\u00e9rer automatiquement en utilisant l&rsquo;option <code>-R<\/code> dans l&rsquo;utilitaire <code>pg_basebackup<\/code>.<\/p>\n<p>Le fichier <strong>recovery.conf<\/strong> doit contenir les commandes suivantes :<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'\n\nprimary_conninfo = 'host=&lt;master_host&gt; port=&lt;postgres_port&gt; user=&lt;replication_user&gt; password=&lt;password&gt; application_name= \"host_name\"''\n\nrecovery_target_timeline = 'latest' (dernier)<\/code><\/pre>\n<p>Les param\u00e8tres utilis\u00e9s dans les commandes susmentionn\u00e9es sont les suivants :<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour \u00e9tablir une connexion entre les serveurs primaire et secondaire en exploitant une cha\u00eene de connexion.<\/li>\n<li><strong><code>standby_mode<\/code><\/strong>: Ce param\u00e8tre peut faire en sorte que le serveur primaire d\u00e9marre en tant que serveur de secours lorsqu&rsquo;il est allum\u00e9.<\/li>\n<li><strong><code>recovery_target_timeline<\/code><\/strong>: Vous pouvez utiliser ce param\u00e8tre pour d\u00e9finir le temps de r\u00e9cup\u00e9ration.<\/li>\n<\/ul>\n<p>Pour \u00e9tablir une connexion, vous devez fournir le nom d&rsquo;utilisateur, l&rsquo;adresse IP et le mot de passe comme valeurs pour le param\u00e8tre primary_conninfo. Par exemple :<\/p>\n<pre><code class=\"language-bash\">primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'<\/code><\/pre>\n<h5>\u00c9tape 3 : Red\u00e9marrer le serveur secondaire<\/h5>\n<p>Enfin, vous pouvez red\u00e9marrer le serveur secondaire pour terminer le processus de configuration.<\/p>\n<p>Cependant, la r\u00e9plication en continu s&rsquo;accompagne de plusieurs d\u00e9fis, tels que :<\/p>\n<ul>\n<li>Divers clients PostgreSQL (\u00e9crits dans diff\u00e9rents langages de programmation) conversent avec un seul point de terminaison. Lorsque le n\u0153ud primaire tombe en panne, ces clients continuent \u00e0 r\u00e9essayer le m\u00eame nom DNS ou IP. Cela rend le basculement visible pour l&rsquo;application.<\/li>\n<li>La r\u00e9plication PostgreSQL n&rsquo;est pas fournie avec un basculement et une surveillance int\u00e9gr\u00e9s. Lorsque le n\u0153ud primaire tombe en panne, vous devez promouvoir un secondaire pour qu&rsquo;il devienne le nouveau primaire. Cette promotion doit \u00eatre ex\u00e9cut\u00e9e de mani\u00e8re \u00e0 ce que les clients n&rsquo;\u00e9crivent que sur un seul n\u0153ud primaire et qu&rsquo;ils n&rsquo;observent pas d&rsquo;incoh\u00e9rences de donn\u00e9es.<\/li>\n<li>PostgreSQL r\u00e9plique l&rsquo;int\u00e9gralit\u00e9 de son \u00e9tat. Lorsque vous devez d\u00e9velopper un nouveau n\u0153ud secondaire, ce dernier doit r\u00e9capituler tout l&rsquo;historique des changements d&rsquo;\u00e9tat du n\u0153ud primaire, ce qui demande beaucoup de ressources et rend co\u00fbteux l&rsquo;\u00e9limination des n\u0153uds de t\u00eate et la cr\u00e9ation de nouveaux n\u0153uds.<\/li>\n<\/ul>\n<h3>M\u00e9thode 2 : Dispositif de bloc r\u00e9pliqu\u00e9<\/h3>\n<p>La m\u00e9thode du dispositif de blocs r\u00e9pliqu\u00e9s d\u00e9pend de la mise en miroir des disques (\u00e9galement connue sous le nom de r\u00e9plication de volume). Dans cette approche, les modifications sont \u00e9crites sur un volume persistant qui est mis en miroir de mani\u00e8re synchrone sur un autre volume.<\/p>\n<p>L&rsquo;avantage suppl\u00e9mentaire de cette m\u00e9thode\u00a0est sa compatibilit\u00e9 et la durabilit\u00e9 des donn\u00e9es dans les environnements de cloud avec toutes les bases de donn\u00e9es relationnelles, y compris PostgreSQL, MySQL et <a href=\"https:\/\/kinsta.com\/fr\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, pour n&rsquo;en citer que quelques-unes.<\/p>\n<p>Cependant, m\u00e9thode\u00a0de la r\u00e9plication PostgreSQL par miroir de disque n\u00e9cessite que vous r\u00e9pliquiez \u00e0 la fois le journal WAL et les donn\u00e9es de table. Comme chaque \u00e9criture dans la base de donn\u00e9es doit maintenant passer par le r\u00e9seau de mani\u00e8re synchrone, vous ne pouvez pas vous permettre de perdre un seul octet, car cela pourrait laisser votre base de donn\u00e9es dans un \u00e9tat corrompu.<\/p>\n<p>Cette m\u00e9thode\u00a0est normalement exploit\u00e9e en utilisant Azure PostgreSQL et Amazon RDS.<\/p>\n<h3>M\u00e9thode 3 : WAL<\/h3>\n<p>WAL se compose de fichiers de segments (16 Mo par d\u00e9faut). Chaque segment comporte un ou plusieurs enregistrements. Un enregistrement de s\u00e9quence de journal (LSN) est un pointeur vers un enregistrement dans WAL, vous permettant de conna\u00eetre la position\/l&#8217;emplacement o\u00f9 l&rsquo;enregistrement a \u00e9t\u00e9 sauvegard\u00e9 dans le fichier journal.<\/p>\n<p>Un serveur de secours exploite les segments WAL &#8211; \u00e9galement connus sous le nom de XLOGS dans la terminologie PostgreSQL &#8211; pour r\u00e9pliquer en continu les modifications de son serveur primaire. Vous pouvez utiliser la journalisation write-ahead pour garantir la durabilit\u00e9 et l&rsquo;atomicit\u00e9 d&rsquo;un SGBD en s\u00e9rialisant des morceaux de donn\u00e9es de type byte-array (chacun avec un LSN unique) dans un stockage stable avant qu&rsquo;ils ne soient appliqu\u00e9s \u00e0 une base de donn\u00e9es.<\/p>\n<p>L&rsquo;application d&rsquo;une mutation \u00e0 une base de donn\u00e9es peut entra\u00eener diverses op\u00e9rations sur le syst\u00e8me de fichiers. Une question pertinente qui se pose est de savoir comment une base de donn\u00e9es peut assurer l&rsquo;atomicit\u00e9 en cas de d\u00e9faillance du serveur due \u00e0 une panne de courant alors qu&rsquo;elle est en pleine mise \u00e0 jour du syst\u00e8me de fichiers. Lorsqu&rsquo;une base de donn\u00e9es d\u00e9marre, elle lance un processus de d\u00e9marrage ou de relecture qui peut lire les segments WAL disponibles et les compare avec le LSN stock\u00e9 sur chaque page de donn\u00e9es (chaque page de donn\u00e9es est marqu\u00e9e avec le LSN du dernier enregistrement WAL qui affecte la page).<\/p>\n<h4>R\u00e9plication en continu des journaux (niveau bloc)<\/h4>\n<p>La r\u00e9plication en continu affine le processus d&rsquo;exp\u00e9dition des journaux. Au lieu d&rsquo;attendre le changement de WAL, les enregistrements sont envoy\u00e9s au fur et \u00e0 mesure de leur cr\u00e9ation, ce qui r\u00e9duit le d\u00e9lai de r\u00e9plication.<\/p>\n<p>La r\u00e9plication en continu l&#8217;emporte \u00e9galement sur l&rsquo;exp\u00e9dition de journaux, car le serveur en attente se lie au serveur primaire sur le r\u00e9seau en tirant parti d&rsquo;un protocole de r\u00e9plication. Le serveur primaire peut alors envoyer des enregistrements WAL directement sur cette connexion sans avoir \u00e0 d\u00e9pendre de scripts fournis par l&rsquo;utilisateur final.<\/p>\n<h4>R\u00e9plication bas\u00e9e sur l&rsquo;exp\u00e9dition de journaux (niveau fichier)<\/h4>\n<p>L&rsquo;exp\u00e9dition de journaux est d\u00e9finie comme la copie des fichiers journaux vers un autre serveur PostgreSQL pour g\u00e9n\u00e9rer un autre serveur de secours en rejouant les fichiers WAL. Ce serveur est configur\u00e9 pour fonctionner en mode de r\u00e9cup\u00e9ration, et son seul but est d&rsquo;appliquer tous les nouveaux fichiers WAL au fur et \u00e0 mesure qu&rsquo;ils apparaissent.<\/p>\n<p>Ce serveur secondaire devient alors une sauvegarde \u00e0 chaud du serveur PostgreSQL primaire. Il peut \u00e9galement \u00eatre configur\u00e9 pour \u00eatre une r\u00e9plique en lecture, o\u00f9 il peut offrir des requ\u00eates en lecture seule, \u00e9galement appel\u00e9 hot standby.<\/p>\n<h4>Archivage WAL continu<\/h4>\n<p>Dupliquer les fichiers WAL \u00e0 mesure qu&rsquo;ils sont cr\u00e9\u00e9s dans un emplacement autre que le sous-r\u00e9pertoire <code>pg_wal<\/code> pour les archiver est connu sous le nom d&rsquo;archivage WAL. PostgreSQL appellera un script donn\u00e9 par l&rsquo;utilisateur pour l&rsquo;archivage, chaque fois qu&rsquo;un fichier WAL sera cr\u00e9\u00e9.<\/p>\n<p>Le script peut s&rsquo;appuyer sur la commande <code>scp<\/code> pour dupliquer le fichier vers un ou plusieurs emplacements tels qu&rsquo;un montage NFS. Une fois archiv\u00e9s, les fichiers de segments WAL peuvent \u00eatre exploit\u00e9s pour r\u00e9cup\u00e9rer la base de donn\u00e9es \u00e0 un moment donn\u00e9.<\/p>\n<p>D&rsquo;autres configurations bas\u00e9es sur les journaux incluent :<\/p>\n<ul>\n<li><strong>R\u00e9plication synchrone <\/strong>: Avant que chaque transaction de r\u00e9plication synchrone ne soit engag\u00e9e, le serveur primaire attend que les standbys confirment qu&rsquo;ils ont obtenu les donn\u00e9es. L&rsquo;avantage de cette configuration est qu&rsquo;il n&rsquo;y aura pas de conflits caus\u00e9s par des processus d&rsquo;\u00e9criture parall\u00e8les.<\/li>\n<li><strong>R\u00e9plication synchrone multi-ma\u00eetre <\/strong>: Ici, chaque serveur peut accepter des demandes d&rsquo;\u00e9criture, et les donn\u00e9es modifi\u00e9es sont transmises du serveur d&rsquo;origine \u00e0 tous les autres serveurs avant que chaque transaction ne soit valid\u00e9e. Elle exploite le protocole 2PC et adh\u00e8re \u00e0 la r\u00e8gle du tout ou rien.<\/li>\n<\/ul>\n<h4>D\u00e9tails du protocole de diffusion WAL<\/h4>\n<p>Un processus connu sous le nom de r\u00e9cepteur WAL, ex\u00e9cut\u00e9 sur le serveur de secours, exploite les d\u00e9tails de connexion fournis dans le param\u00e8tre <code>primary_conninfo<\/code> de <strong>recovery.conf<\/strong> et se connecte au serveur primaire en exploitant une connexion TCP\/IP.<\/p>\n<p>Pour lancer la r\u00e9plication en continu, le frontend peut envoyer le param\u00e8tre de r\u00e9plication dans le message de d\u00e9marrage. Une valeur bool\u00e9enne de true, yes, 1, ou ON permet au <a href=\"https:\/\/kinsta.com\/fr\/blog\/salaire-developpeur-backend\/\">backend<\/a> de savoir qu&rsquo;il doit passer en mode walsender de r\u00e9plication physique.<\/p>\n<p>L&rsquo;exp\u00e9diteur WAL est un autre processus qui s&rsquo;ex\u00e9cute sur le serveur primaire et qui est charg\u00e9 d&rsquo;envoyer les enregistrements WAL au serveur de secours au fur et \u00e0 mesure qu&rsquo;ils sont g\u00e9n\u00e9r\u00e9s. Le r\u00e9cepteur WAL enregistre les enregistrements WAL dans le WAL comme s&rsquo;ils \u00e9taient cr\u00e9\u00e9s par l&rsquo;activit\u00e9 des clients connect\u00e9s localement.<\/p>\n<p>Une fois que les enregistrements WAL atteignent les fichiers de segment WAL, le serveur de standby continue de rejouer constamment le WAL afin que le primaire et le standby soient \u00e0 jour.<\/p>\n<figure id=\"attachment_128035\" aria-describedby=\"caption-attachment-128035\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128035 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/WAL-Streaming-Protocol-Details.png\" alt=\"Diagramme de flux du protocole de streaming WAL\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">Diagramme de flux du protocole de streaming WAL (Image Source : <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>\u00c9l\u00e9ments de r\u00e9plication PostgreSQL<\/h2>\n<p>Dans cette section, vous allez acqu\u00e9rir une compr\u00e9hension plus approfondie des mod\u00e8les (r\u00e9plication mono-ma\u00eetre et multi-ma\u00eetre), des types (r\u00e9plication physique et logique) et des modes (synchrone et asynchrone) couramment utilis\u00e9s pour la r\u00e9plication PostgreSQL.<\/p>\n<h3>Mod\u00e8les de r\u00e9plication des bases de donn\u00e9es PostgreSQL<\/h3>\n<p>L&rsquo;\u00e9volutivit\u00e9 consiste \u00e0 ajouter plus de ressources\/mat\u00e9riel aux n\u0153uds existants afin d&rsquo;am\u00e9liorer la capacit\u00e9 de la base de donn\u00e9es \u00e0 stocker et \u00e0 traiter plus de donn\u00e9es, ce qui peut \u00eatre r\u00e9alis\u00e9 horizontalement et verticalement. La r\u00e9plication PostgreSQL est un exemple d&rsquo;\u00e9volutivit\u00e9 horizontale qui est beaucoup plus difficile \u00e0 mettre en \u0153uvre que l&rsquo;\u00e9volutivit\u00e9 verticale. Nous pouvons r\u00e9aliser l&rsquo;extensibilit\u00e9 horizontale principalement par la r\u00e9plication \u00e0 ma\u00eetre unique (SMR) et la r\u00e9plication \u00e0 ma\u00eetre multiple (MMR).<\/p>\n<p>La r\u00e9plication \u00e0 ma\u00eetre unique permet aux donn\u00e9es d&rsquo;\u00eatre modifi\u00e9es uniquement sur un seul n\u0153ud, et ces modifications sont r\u00e9pliqu\u00e9es sur un ou plusieurs n\u0153uds. Les tables r\u00e9pliqu\u00e9es dans la base de donn\u00e9es r\u00e9pliqu\u00e9e ne sont pas autoris\u00e9es \u00e0 accepter des modifications, sauf celles provenant du serveur primaire. M\u00eame si elles le font, les modifications ne sont pas r\u00e9pliqu\u00e9es vers le serveur primaire.<\/p>\n<p>La plupart du temps, SMR est suffisant pour l&rsquo;application car il est moins compliqu\u00e9 \u00e0 configurer et \u00e0 g\u00e9rer, sans risque de conflits. La r\u00e9plication \u00e0 ma\u00eetre unique est \u00e9galement unidirectionnelle, puisque les donn\u00e9es de r\u00e9plication circulent dans une seule direction principalement, de la base de donn\u00e9es primaire \u00e0 la base de donn\u00e9es r\u00e9plique.<\/p>\n<p>Dans certains cas, SMR seul peut ne pas \u00eatre suffisant, et vous pouvez avoir besoin de mettre en \u0153uvre MMR. MMR permet \u00e0 plus d&rsquo;un n\u0153ud d&rsquo;agir en tant que n\u0153ud primaire. Les modifications apport\u00e9es aux lignes des tables dans plus d&rsquo;une base de donn\u00e9es primaire d\u00e9sign\u00e9e sont r\u00e9pliqu\u00e9es vers leurs tables homologues dans toutes les autres bases de donn\u00e9es primaires. Dans ce mod\u00e8le, des sch\u00e9mas de r\u00e9solution de conflits sont souvent employ\u00e9s pour \u00e9viter les probl\u00e8mes tels que les cl\u00e9s primaires dupliqu\u00e9es.<\/p>\n<p>L&rsquo;utilisation du mod\u00e8le MMR pr\u00e9sente quelques avantages, \u00e0 savoir :<\/p>\n<ul>\n<li>En cas de d\u00e9faillance d&rsquo;un h\u00f4te, les autres h\u00f4tes peuvent toujours fournir des services de mise \u00e0 jour et d&rsquo;insertion.<\/li>\n<li>Les n\u0153uds primaires sont r\u00e9partis sur plusieurs sites diff\u00e9rents, de sorte que le risque de d\u00e9faillance de tous les n\u0153uds primaires est tr\u00e8s faible.<\/li>\n<li>Possibilit\u00e9 d&rsquo;utiliser un r\u00e9seau \u00e9tendu (WAN) de bases de donn\u00e9es primaires qui peuvent \u00eatre g\u00e9ographiquement proches de groupes de clients, tout en maintenant la coh\u00e9rence des donn\u00e9es sur le r\u00e9seau.<\/li>\n<\/ul>\n<p>Cependant, l&rsquo;inconv\u00e9nient de la mise en \u0153uvre de MMR est sa complexit\u00e9 et sa difficult\u00e9 \u00e0 r\u00e9soudre les conflits.<\/p>\n<p>Plusieurs branches et applications fournissent des solutions MMR car PostgreSQL ne le supporte pas nativement. Ces solutions peuvent \u00eatre <a href=\"https:\/\/kinsta.com\/fr\/blog\/base-de-donnees-open-source\/\">open source<\/a>, gratuites ou payantes. Une de ces <a href=\"https:\/\/kinsta.com\/fr\/blog\/extension-wordpress-base-de-donnees\/\">extensions<\/a> est la r\u00e9plication bidirectionnelle (BDR) qui est asynchrone et qui est bas\u00e9e sur la fonction de d\u00e9codage logique de PostgreSQL.<\/p>\n<p>Puisque l&rsquo;application BDR r\u00e9plique les transactions sur d&rsquo;autres n\u0153uds, l&rsquo;op\u00e9ration de r\u00e9plication peut \u00e9chouer s&rsquo;il y a un conflit entre la transaction appliqu\u00e9e et la transaction commise sur le n\u0153ud r\u00e9cepteur.<\/p>\n<h3>Types de r\u00e9plication PostgreSQL<\/h3>\n<p>Il existe deux types de r\u00e9plication PostgreSQL : la r\u00e9plication logique et la r\u00e9plication physique.<\/p>\n<p>Une simple op\u00e9ration <em>logique<\/em> <code>initdb<\/code>\u00a0effectuerait l&rsquo;op\u00e9ration physique de cr\u00e9ation d&rsquo;un r\u00e9pertoire de base pour un cluster. De m\u00eame, une simple op\u00e9ration <em>logique<\/em> <code>CREATE DATABASE<\/code>\u00a0effectuerait l&rsquo;op\u00e9ration <em>physique<\/em> de cr\u00e9ation d&rsquo;un sous-r\u00e9pertoire dans le r\u00e9pertoire de base.<\/p>\n<p>La r\u00e9plication physique traite g\u00e9n\u00e9ralement des fichiers et des r\u00e9pertoires. Elle ne sait pas ce que ces fichiers et r\u00e9pertoires repr\u00e9sentent. Ces m\u00e9thodes sont utilis\u00e9es pour maintenir une copie compl\u00e8te de l&rsquo;ensemble des donn\u00e9es d&rsquo;un seul cluster, g\u00e9n\u00e9ralement sur une autre machine. Elles sont effectu\u00e9es au niveau du syst\u00e8me de fichiers ou du disque et utilisent des adresses de bloc exactes.<\/p>\n<p>La r\u00e9plication logique est un moyen de reproduire des entit\u00e9s de donn\u00e9es et leurs modifications, sur la base de leur identit\u00e9 de r\u00e9plication (g\u00e9n\u00e9ralement une cl\u00e9 primaire). Contrairement \u00e0 la r\u00e9plication physique, elle traite des bases de donn\u00e9es, des tables et des op\u00e9rations DML et se fait au niveau du cluster de base de donn\u00e9es. Elle utilise un mod\u00e8le de <em>publication<\/em> et <em>d&rsquo;abonnement<\/em> o\u00f9 un ou plusieurs <em>abonn\u00e9s<\/em> sont abonn\u00e9s \u00e0 une ou plusieurs <em>publications<\/em> sur un n\u0153ud <em>\u00e9diteur<\/em>.<\/p>\n<p>Le processus de r\u00e9plication commence par prendre un instantan\u00e9 des donn\u00e9es sur la base de donn\u00e9es de l&rsquo;\u00e9diteur, puis le copie sur l&rsquo;abonn\u00e9. Les abonn\u00e9s tirent les donn\u00e9es des publications auxquelles ils sont abonn\u00e9s et peuvent republier les donn\u00e9es ult\u00e9rieurement pour permettre une r\u00e9plication en cascade ou des configurations plus complexes. L&rsquo;abonn\u00e9 applique les donn\u00e9es dans le m\u00eame ordre que l&rsquo;\u00e9diteur, de sorte que la coh\u00e9rence transactionnelle est garantie pour les publications au sein d&rsquo;un m\u00eame abonnement ; c&rsquo;est ce qu&rsquo;on appelle la r\u00e9plication transactionnelle.<\/p>\n<p>Les cas d&rsquo;utilisation typiques de la r\u00e9plication logique sont les suivants :<\/p>\n<ul>\n<li>Envoi des modifications incr\u00e9mentielles d&rsquo;une seule base de donn\u00e9es (ou d&rsquo;un sous-ensemble d&rsquo;une base de donn\u00e9es) aux abonn\u00e9s au fur et \u00e0 mesure qu&rsquo;elles se produisent.<\/li>\n<li>Partage d&rsquo;un sous-ensemble de la base de donn\u00e9es entre plusieurs bases de donn\u00e9es.<\/li>\n<li>D\u00e9clenchement de l&rsquo;envoi de changements individuels au fur et \u00e0 mesure qu&rsquo;ils arrivent sur l&rsquo;abonn\u00e9.<\/li>\n<li>Consolidation de plusieurs bases de donn\u00e9es en une seule.<\/li>\n<li>Fournir un acc\u00e8s aux donn\u00e9es r\u00e9pliqu\u00e9es \u00e0 diff\u00e9rents groupes d&rsquo;utilisateurs.<\/li>\n<\/ul>\n<p>La base de donn\u00e9es de l&rsquo;abonn\u00e9 se comporte de la m\u00eame mani\u00e8re que toute autre instance PostgreSQL et peut \u00eatre utilis\u00e9e comme \u00e9diteur pour d&rsquo;autres bases de donn\u00e9es en d\u00e9finissant ses publications.<\/p>\n<p>Lorsque l&rsquo;abonn\u00e9 est trait\u00e9 en lecture seule par l&rsquo;application, il n&rsquo;y aura pas de conflits \u00e0 partir d&rsquo;un seul abonnement. Par contre, s&rsquo;il y a d&rsquo;autres \u00e9critures effectu\u00e9es soit par une application, soit par d&rsquo;autres abonn\u00e9s sur le m\u00eame ensemble de tables, des conflits peuvent survenir.<\/p>\n<p>PostgreSQL supporte les deux m\u00e9canismes simultan\u00e9ment. La r\u00e9plication logique permet un contr\u00f4le fin \u00e0 la fois de la r\u00e9plication des donn\u00e9es et de la s\u00e9curit\u00e9.<\/p>\n<h3>Modes de r\u00e9plication<\/h3>\n<p>Il existe principalement deux modes de r\u00e9plication PostgreSQL : synchrone et asynchrone. La r\u00e9plication synchrone permet d&rsquo;\u00e9crire des donn\u00e9es sur le serveur primaire et secondaire en m\u00eame temps, tandis que la r\u00e9plication asynchrone garantit que les donn\u00e9es sont d&rsquo;abord \u00e9crites sur l&rsquo;h\u00f4te, puis copi\u00e9es sur le serveur secondaire.<\/p>\n<p>Dans la r\u00e9plication en mode synchrone, les transactions sur la base de donn\u00e9es primaire sont consid\u00e9r\u00e9es comme termin\u00e9es uniquement lorsque ces modifications ont \u00e9t\u00e9 r\u00e9pliqu\u00e9es sur toutes les r\u00e9pliques. Les serveurs r\u00e9pliques doivent tous \u00eatre disponibles en permanence pour que les transactions soient termin\u00e9es sur le primaire. Le mode synchrone de r\u00e9plication est utilis\u00e9 dans les environnements transactionnels haut de gamme avec des exigences de basculement imm\u00e9diat.<\/p>\n<p>En mode asynchrone, les transactions sur le serveur primaire peuvent \u00eatre d\u00e9clar\u00e9es compl\u00e8tes lorsque les changements ont \u00e9t\u00e9 effectu\u00e9s sur le seul serveur primaire. Ces changements sont ensuite r\u00e9pliqu\u00e9s dans les r\u00e9pliques plus tard dans le temps. Les serveurs r\u00e9pliques peuvent rester d\u00e9synchronis\u00e9s pendant une certaine dur\u00e9e, appel\u00e9e d\u00e9calage de r\u00e9plication. En cas de panne, une perte de donn\u00e9es peut se produire, mais la surcharge fournie par la r\u00e9plication asynchrone est faible, elle est donc acceptable dans la plupart des cas (elle ne surcharge pas l&rsquo;h\u00f4te). Le basculement de la base de donn\u00e9es primaire vers la base de donn\u00e9es secondaire prend plus de temps que la r\u00e9plication synchrone.<\/p>\n<h2>Comment configurer la r\u00e9plication PostgreSQL<\/h2>\n<p>Dans cette section, nous allons montrer comment configurer le processus de r\u00e9plication PostgreSQL sur un syst\u00e8me d&rsquo;exploitation Linux. Pour cette instance, nous utiliserons Ubuntu 18.04 LTS et PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Assurez-vous que vous avez install\u00e9 le serveur Linux Ubuntu. Les \u00e9tapes d&rsquo;installation de PostgreSQL sur un serveur Linux sont mentionn\u00e9es ci-dessous, suivies de la configuration de la r\u00e9plication dans le serveur primaire et le serveur secondaire.<\/p>\n<\/aside>\n\n<p>Commen\u00e7ons !<\/p>\n<h3>Installation<\/h3>\n<p>Vous commencerez par installer PostgreSQL sur Linux en suivant ces \u00e9tapes :<\/p>\n<ol>\n<li>Tout d&rsquo;abord, vous devez importer la cl\u00e9 de signature PostgreSQL en tapant la commande ci-dessous dans le terminal :\n<pre><code class=\"language-bash\"> wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O- | sudo apt-key add -<\/code><\/pre>\n<\/li>\n<li>Ensuite, ajoutez le r\u00e9f\u00e9rentiel PostgreSQL en saisissant la commande ci-dessous dans le terminal :\n<pre><code class=\"language-bash\"> echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ bionic-pgdg main\" | sudo tee \/etc\/apt\/sources.list.d\/postgresql.list <\/code><\/pre>\n<\/li>\n<li>Mettez \u00e0 jour l&rsquo;index du r\u00e9f\u00e9rentiel en tapant la commande suivante dans le terminal :\n<pre><code class=\"language-bash\"> sudo apt-get update <\/code><\/pre>\n<\/li>\n<li>Installez le paquet PostgreSQL en utilisant la commande apt :\n<pre><code class=\"language-bash\"> sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Enfin, d\u00e9finissez le mot de passe de l&rsquo;utilisateur PostgreSQL \u00e0 l&rsquo;aide de la commande suivante :\n<pre><code class=\"language-bash\"> sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>L&rsquo;installation de PostgreSQL est obligatoire pour le serveur primaire et le serveur secondaire avant de lancer le processus de r\u00e9plication PostgreSQL.<\/p>\n<p>Une fois que vous avez configur\u00e9 PostgreSQL pour les deux serveurs, vous pouvez passer \u00e0 la configuration de la r\u00e9plication du serveur primaire et du serveur secondaire.<\/p>\n<h3>Configuration de la r\u00e9plication dans le serveur primaire<\/h3>\n<p>Effectuez ces \u00e9tapes une fois que vous avez install\u00e9 PostgreSQL sur les deux serveurs primaire et secondaire.<\/p>\n<ol>\n<li>Tout d&rsquo;abord, connectez-vous \u00e0 la base de donn\u00e9es PostgreSQL \u00e0 l&rsquo;aide de la commande suivante :\n<pre><code class=\"language-bash\"> su - postgres<\/code><\/pre>\n<\/li>\n<li>Cr\u00e9ez un utilisateur de r\u00e9plication avec la commande suivante :\n<pre><code class=\"language-bash\"> psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';\"<\/code><\/pre>\n<\/li>\n<li>Modifiez <strong>pg_hba.cnf<\/strong> avec n&rsquo;importe quelle application nano dans Ubuntu et ajoutez la configuration suivante :\n<pre><code class=\"language-bash\"> nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Pour configurer le fichier, utilisez la commande suivante :<\/p>\n<pre><code class=\"language-bash\"> host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Ouvrez et modifiez <strong>postgresql.conf<\/strong> et mettez la configuration suivante dans le serveur primaire :\n<pre><code class=\"language-bash\"> nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Utilisez les param\u00e8tres de configuration suivants :<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\nwal_level = replica\nwal_keep_segments = 64\nmax_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Enfin, red\u00e9marrez PostgreSQL dans le serveur principal primaire :<\/li>\n<\/ol>\n<pre><code class=\"language-bash\"> systemctl restart postgresql<\/code><\/pre>\n<p>Vous avez maintenant termin\u00e9 la configuration dans le serveur primaire.<\/p>\n<h3>Configuration de la r\u00e9plication dans le serveur secondaire<\/h3>\n<p>Suivez ces \u00e9tapes pour configurer la r\u00e9plication dans le serveur secondaire :<\/p>\n<ol>\n<li>Connectez-vous au SGBD PostgreSQL avec la commande ci-dessous :\n<pre><code class=\"language-bash\"> su - postgres<\/code><\/pre>\n<\/li>\n<li>Arr\u00eatez le fonctionnement du service PostgreSQL pour nous permettre de travailler dessus avec la commande ci-dessous :\n<pre><code class=\"language-bash\"> systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Modifiez le fichier <strong>pg_hba.conf<\/strong> avec cette commande et ajoutez la configuration suivante :\n<pre><code class=\"language-bash\">\/\/ \"Edit\" command\nnano \/etc\/postgresql\/10\/main\/pg_hba.conf\n\/\/ \"Configuration\" command\nhost replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Ouvrez et modifiez <strong>postgresql.conf<\/strong> dans le serveur secondaire et mettez la configuration suivante ou d\u00e9commentez-la si elle est comment\u00e9e :\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\nlisten_addresses = 'localhost,SecondaryIP'\nwal_keep_segments = 64\nwal_level = replica\nhot_standby = on\nmax_wal_senders = 10<\/code><\/pre>\n<p><code>SecondaryIP<\/code> est l&rsquo;adresse du serveur secondaire<\/li>\n<li>Acc\u00e9dez au r\u00e9pertoire de donn\u00e9es PostgreSQL dans le serveur secondaire et supprimez tout :\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\nrm -rfv *<\/code><\/pre>\n<\/li>\n<li>Copiez les fichiers du r\u00e9pertoire de donn\u00e9es du serveur primaire PostgreSQL dans le r\u00e9pertoire de donn\u00e9es du serveur secondaire PostgreSQL et \u00e9crivez cette commande dans le serveur secondaire :\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\nreplication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Saisissez le mot de passe PostgreSQL du serveur primaire et appuyez sur la touche Entr\u00e9e. Ensuite, ajoutez la commande suivante pour la configuration de r\u00e9cup\u00e9ration :\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\nstandby_mode   = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'\ntrigger_file = '\/tmp\/MasterNow'&lt;\/code<\/code>&gt;<\/pre>\n<p>Ici, <code>YOUR_PASSWORD<\/code> est le mot de passe de l&rsquo;utilisateur de r\u00e9plication dans le serveur primaire cr\u00e9\u00e9 par PostgreSQL<\/li>\n<li>Une fois le mot de passe d\u00e9fini, vous devrez red\u00e9marrer la base de donn\u00e9es PostgreSQL secondaire puisqu&rsquo;elle a \u00e9t\u00e9 arr\u00eat\u00e9e :<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Testez votre installation<\/h3>\n<p>Maintenant que nous avons effectu\u00e9 les \u00e9tapes, testons le processus de r\u00e9plication et observons la base de donn\u00e9es du serveur secondaire. Pour cela, nous cr\u00e9ons une table dans le serveur primaire et observons si la m\u00eame chose se refl\u00e8te sur le serveur secondaire.<\/p>\n<p>Allons-y.<\/p>\n<ol>\n<li>Puisque nous cr\u00e9ons la table dans le serveur primaire, vous devez vous connecter au serveur primaire :\n<pre><code class=\"language-bash\"> su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Maintenant, nous cr\u00e9ons une table simple nomm\u00e9e \u00ab testtable \u00bb et ins\u00e9rons des donn\u00e9es dans la table en ex\u00e9cutant les requ\u00eates PostgreSQL suivantes dans le terminal :\n<pre><code class=\"language-bash\"> CREATE TABLE testtable (websites varchar(100));\nINSERT INTO testtable VALUES ('section.com');\nINSERT INTO testtable VALUES ('google.com');\nINSERT INTO testtable VALUES ('github.com');<\/code><\/pre>\n<\/li>\n<li>Observez la base de donn\u00e9es PostgreSQL du serveur secondaire en vous connectant au serveur secondaire :\n<pre><code class=\"language-bash\"> su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Maintenant, nous v\u00e9rifions si la table \u00ab testtable \u00bb existe, et pouvons retourner les donn\u00e9es en ex\u00e9cutant les requ\u00eates PostgreSQL suivantes dans le terminal. Cette commande affiche essentiellement la table enti\u00e8re.\n<pre><code class=\"language-bash\"> select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Voici la sortie de la table de test :<\/p>\n<pre><code class=\"language-bash\">|  websites  |\n\n-------------------\n\n| section.com |\n\n| google.com |\n\n| github.com  |\n\n--------------------<\/code><\/pre>\n<p>Vous devriez \u00eatre en mesure d&rsquo;observer les m\u00eames donn\u00e9es que celles du serveur primaire.<\/p>\n<p>Si vous voyez ce qui pr\u00e9c\u00e8de, alors vous avez bien effectu\u00e9 le processus de r\u00e9plication !<\/p>\n<h2>Quelles sont les \u00e9tapes du basculement manuel PostgreSQL ?<\/h2>\n<p>Passons en revue les \u00e9tapes d&rsquo;un basculement manuel PostgreSQL :<\/p>\n<ol>\n<li>Crasher le serveur primaire.<\/li>\n<li>Promouvoir le serveur de secours en ex\u00e9cutant la commande suivante sur le serveur de secours :\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Connectez-vous au serveur standby promu et ins\u00e9rez une rang\u00e9e :\n<pre><code class=\"language-bash\"> -bash-4.2$ .\/edb-psql -p 5432 edb\n\nPassword:\n\npsql.bin (10.7)\n\nType \"help\" <strong>for<\/strong> help.\n\nedb=# <strong>insert<\/strong> <strong>into<\/strong> abc <strong>values<\/strong>(4,'Four');\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Si l&rsquo;insertion fonctionne bien, alors le standby, qui \u00e9tait auparavant un serveur en lecture seule, a \u00e9t\u00e9 promu comme nouveau serveur primaire.<\/p>\n<h2>Comment automatiser le basculement dans PostgreSQL<\/h2>\n<p>La configuration du basculement automatique est simple.<\/p>\n<p>Vous aurez besoin du gestionnaire de basculement EDB PostgreSQL (EFM). Apr\u00e8s avoir t\u00e9l\u00e9charg\u00e9 et install\u00e9 EFM sur chaque n\u0153ud primaire et standby, vous pouvez cr\u00e9er un cluster EFM, qui se compose d&rsquo;un n\u0153ud primaire, d&rsquo;un ou plusieurs n\u0153uds standby et d&rsquo;un n\u0153ud t\u00e9moin facultatif qui confirme les assertions en cas de d\u00e9faillance.<\/p>\n<p>EFM surveille en permanence la sant\u00e9 du syst\u00e8me et envoie des alertes par e-mail en fonction des \u00e9v\u00e9nements syst\u00e8me. Lorsqu&rsquo;une d\u00e9faillance se produit, il bascule automatiquement sur le standby le plus r\u00e9cent et reconfigure tous les autres serveurs standby pour reconna\u00eetre le nouveau n\u0153ud primaire.<\/p>\n<p>Il reconfigure \u00e9galement les \u00e9quilibreurs de charge (tels que pgPool) et emp\u00eache le \u00ab split-brain \u00bb (lorsque deux noeuds pensent chacun \u00eatre le noeud primaire) de se produire.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>En raison des grandes quantit\u00e9s de donn\u00e9es, l&rsquo;\u00e9volutivit\u00e9 et la s\u00e9curit\u00e9 sont devenues deux des crit\u00e8res les plus importants dans la <a href=\"https:\/\/kinsta.com\/fr\/hebergement-wordpress\/dedie\/\">gestion des bases de donn\u00e9es<\/a>, surtout dans un environnement transactionnel. Bien que nous puissions am\u00e9liorer l&rsquo;\u00e9volutivit\u00e9 verticalement en ajoutant plus de ressources\/mat\u00e9riel aux n\u0153uds existants, ce n&rsquo;est pas toujours possible, souvent en raison du co\u00fbt ou des limites de l&rsquo;ajout de nouveau mat\u00e9riel.<\/p>\n<p>Par cons\u00e9quent, l&rsquo;\u00e9volutivit\u00e9 horizontale est n\u00e9cessaire, ce qui signifie ajouter plus de n\u0153uds aux n\u0153uds existants du r\u00e9seau plut\u00f4t que d&rsquo;am\u00e9liorer la fonctionnalit\u00e9 des n\u0153uds existants. C&rsquo;est l\u00e0 que la r\u00e9plication PostgreSQL entre en jeu.<br \/>\n<br \/>\nDans cet article, nous avons abord\u00e9 les types de r\u00e9plications PostgreSQL, les avantages, les modes de r\u00e9plication, l&rsquo;installation et le basculement PostgreSQL entre SMR et MMR. Maintenant, \u00e9coutons ce que vous avez \u00e0 dire.<\/p>\n<p>Laquelle impl\u00e9mentez-vous habituellement ? Quelle fonctionnalit\u00e9 de base de donn\u00e9es est la plus importante pour vous et pourquoi ? Nous serions ravis de lire vos r\u00e9flexions ! Partagez-les dans la section des commentaires ci-dessous.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comme tout propri\u00e9taire de site vous le dira, les pertes de donn\u00e9es et les temps d&rsquo;arr\u00eat, m\u00eame \u00e0 doses minimes, peuvent \u00eatre catastrophiques. Elles peuvent frapper &#8230;<\/p>\n","protected":false},"author":117,"featured_media":60550,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[373,596,449,719],"topic":[1002],"class_list":["post-60530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-databases","tag-development","tag-postgresql","topic-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>R\u00e9plication PostgreSQL : Un guide complet<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R\u00e9plication PostgreSQL : Un guide complet\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T12:36:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T12:03:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"R\u00e9plication PostgreSQL : Un guide complet\",\"datePublished\":\"2022-08-11T12:36:50+00:00\",\"dateModified\":\"2023-08-22T12:03:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\"},\"wordCount\":5931,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\",\"keywords\":[\"database\",\"databases\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\",\"name\":\"R\u00e9plication PostgreSQL : Un guide complet\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\",\"datePublished\":\"2022-08-11T12:36:50+00:00\",\"dateModified\":\"2023-08-22T12:03:18+00:00\",\"description\":\"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png\",\"width\":1460,\"height\":730,\"caption\":\"R\u00e9plication PostgreSQL : Un guide complet\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/postgresql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"R\u00e9plication PostgreSQL : Un guide complet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"R\u00e9plication PostgreSQL : Un guide complet","description":"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/","og_locale":"fr_FR","og_type":"article","og_title":"R\u00e9plication PostgreSQL : Un guide complet","og_description":"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.","og_url":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-08-11T12:36:50+00:00","article_modified_time":"2023-08-22T12:03:18+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Salman Ravoof","Dur\u00e9e de lecture estim\u00e9e":"24 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"R\u00e9plication PostgreSQL : Un guide complet","datePublished":"2022-08-11T12:36:50+00:00","dateModified":"2023-08-22T12:03:18+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/"},"wordCount":5931,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","keywords":["database","databases","development","PostgreSQL"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/","url":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/","name":"R\u00e9plication PostgreSQL : Un guide complet","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","datePublished":"2022-08-11T12:36:50+00:00","dateModified":"2023-08-22T12:03:18+00:00","description":"D\u00e9couvrez les principaux aspects de la r\u00e9plication PostgreSQL, notamment ses avantages, ses \u00e9l\u00e9ments, ses types et ses strat\u00e9gies pour des sauvegardes de donn\u00e9es sans faille.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/08\/replication-postgresql.png","width":1460,"height":730,"caption":"R\u00e9plication PostgreSQL : Un guide complet"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/replication-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL","item":"https:\/\/kinsta.com\/fr\/sujets\/postgresql\/"},{"@type":"ListItem","position":3,"name":"R\u00e9plication PostgreSQL : Un guide complet"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=60530"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60530\/revisions"}],"predecessor-version":[{"id":65303,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/60530\/revisions\/65303"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/60530\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/60550"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=60530"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=60530"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=60530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}