

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration de la réplication active-active pour des instances de base de données RDS pour PostgreSQL
<a name="Appendix.PostgreSQL.CommonDBATasks.pgactive.setup-replication"></a>

La procédure suivante vous montre comment démarrer la réplication active-active entre deux instances de base de données RDS pour PostgreSQL où `pgactive` est disponible. Pour suivre l’exemple de haute disponibilité multirégionale, vous devez déployer des instances Amazon RDS pour PostgreSQL dans deux régions différentes et configurer l’appairage de VPC. Pour en savoir plus, consultez [Appairage de VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html).

**Note**  
L'envoi de trafic entre plusieurs régions peut induire des coûts supplémentaires.

Ces étapes partent du principe que l’instance de base de données RDS pour PostgreSQL a été configurée avec l’extension `pgactive`. Pour de plus amples informations, veuillez consulter [Initialisation de la capacité d'extension pgactive](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

**Pour configurer la première instance de base de données RDS pour PostgreSQL avec l’extension `pgactive`**

L’exemple suivant illustre la façon dont le groupe `pgactive` est créé et présente les autres étapes nécessaires à la création de l’extension `pgactive` sur l’instance de base de données RDS pour PostgreSQL.

1. Utilisez `psql` ou un autre outil client pour vous connecter à votre première instance de base de données RDS pour PostgreSQL.

   ```
   psql --host=firstinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
   ```

1. Créez une base de données sur l’instance RDS pour PostgreSQL à l’aide de la commande suivante :

   ```
   postgres=> CREATE DATABASE app;
   ```

1. Faites basculer la connexion sur la nouvelle base de données à l'aide de la commande suivante :

   ```
   \c app
   ```

1. Créez et remplissez une table d'exemple à l'aide des instructions SQL suivantes :

   1. Créez un exemple de table en utilisant l’instruction SQL suivante.

      ```
      app=> CREATE SCHEMA inventory;
      CREATE TABLE inventory.products (
      id int PRIMARY KEY, product_name text NOT NULL,
      created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP);
      ```

   1. Remplissez la table avec des données d'exemple à l'aide de l'instruction SQL suivante.

      ```
      app=> INSERT INTO inventory.products (id, product_name)
      VALUES (1, 'soap'), (2, 'shampoo'), (3, 'conditioner');
      ```

   1. Vérifiez que les données existent dans la table à l’aide de l’instruction SQL suivante.

      ```
       app=>SELECT count(*) FROM inventory.products;
      
       count
      -------
       3
      ```

1. Créez l'extension `pgactive` sur la base de données existante.

   ```
   app=> CREATE EXTENSION pgactive;
   ```

1. Pour créer et initialiser le groupe pgactive en toute sécurité, utilisez les commandes suivantes :

   ```
   app=>
   -- connection info for endpoint1
   CREATE SERVER pgactive_server_endpoint1
       FOREIGN DATA WRAPPER pgactive_fdw
       OPTIONS (host '<endpoint1>', dbname 'app');
   CREATE USER MAPPING FOR postgres
       SERVER pgactive_server_endpoint1
       OPTIONS (user 'postgres', password '<password>');
         -- connection info for endpoint2
   CREATE SERVER pgactive_server_endpoint2
       FOREIGN DATA WRAPPER pgactive_fdw
       OPTIONS (host '<endpoint2>', dbname 'app');
   CREATE USER MAPPING FOR postgres
       SERVER pgactive_server_endpoint2
       OPTIONS (user 'postgres', password '<password>');
   ```

   Vous pouvez maintenant initialiser le groupe de réplication et ajouter cette première instance :

   ```
   SELECT pgactive.pgactive_create_group(
       node_name := 'endpoint1-app',
       node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1'
   
   );
   ```

   Utilisez les commandes suivantes comme méthode alternative mais moins sécurisée pour créer et initialiser le groupe pgactive :

   ```
   app=> SELECT pgactive.pgactive_create_group(
       node_name := 'node1-app',
       node_dsn := 'dbname=app host=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD');
   ```

   node1-app est le nom que vous attribuez pour identifier de manière unique un nœud dans le groupe `pgactive`.
**Note**  
Pour pouvoir effectuer cette étape sur une instance de base de données accessible au public, vous devez activer le paramètre `rds.custom_dns_resolution` en le définissant sur `1`.

1. Pour vérifier si l'instance de base de données est prête, utilisez la commande suivante :

   ```
   app=> SELECT pgactive.pgactive_wait_for_node_ready();
   ```

   Si la commande aboutit, vous obtenez la sortie suivante :

   ```
   pgactive_wait_for_node_ready 
   ------------------------------ 
   (1 row)
   ```

**Pour configurer la deuxième instance RDS pour PostgreSQL et la joindre au groupe `pgactive`**

L’exemple suivant illustre la façon dont une instance de base de données RDS pour PostgreSQL est jointe au groupe `pgactive` et présente les autres étapes nécessaires à la création de l’extension `pgactive` sur l’instance de base de données.

Ces étapes partent du principe que d’autres instances de base de données RDS pour PostgreSQL ont été configurées avec l’extension `pgactive`. Pour de plus amples informations, veuillez consulter [Initialisation de la capacité d'extension pgactive](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

1. Utilisez `psql` pour vous connecter à l’instance qui doit recevoir les mises à jour du serveur de publication.

   ```
   psql --host=secondinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
   ```

1. Créez une base de données sur la deuxième instance de base de données RDS pour PostgreSQL à l’aide de la commande suivante :

   ```
   postgres=> CREATE DATABASE app;
   ```

1. Faites basculer la connexion sur la nouvelle base de données à l'aide de la commande suivante :

   ```
   \c app
   ```

1. Créez l'extension `pgactive` sur la base de données existante.

   ```
   app=> CREATE EXTENSION pgactive;
   ```

1. Joignez la deuxième instance de base de données RDS pour PostgreSQL au groupe `pgactive` dans une méthode pus sécurisée utilisant les commandes suivantes :

   ```
   -- connection info for endpoint1
   CREATE SERVER pgactive_server_endpoint1
       FOREIGN DATA WRAPPER pgactive_fdw
       OPTIONS (host '<endpoint1>', dbname 'app');
   CREATE USER MAPPING FOR postgres
       SERVER pgactive_server_endpoint1
       OPTIONS (user 'postgres', password '<password>');
   
   -- connection info for endpoint2
   CREATE SERVER pgactive_server_endpoint2
       FOREIGN DATA WRAPPER pgactive_fdw
       OPTIONS (host '<endpoint2>', dbname 'app');
   CREATE USER MAPPING FOR postgres
       SERVER pgactive_server_endpoint2
       OPTIONS (user 'postgres', password '<password>');
   ```

   ```
   SELECT pgactive.pgactive_join_group(
       node_name := 'endpoint2-app',
       node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint2',
       join_using_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1'
   );
   ```

   Utilisation des commandes suivantes comme méthode alternative mais moins sécurisée pour joindre la deuxième instance de base de données RDS pour PostgreSQL au groupe `pgactive`

   ```
   app=> SELECT pgactive.pgactive_join_group(
   node_name := 'node2-app',
   node_dsn := 'dbname=app host=secondinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD',
   join_using_dsn := 'dbname=app host=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD');
   ```

   node2-app est le nom que vous attribuez pour identifier de manière unique un nœud dans le groupe `pgactive`.

1. Pour vérifier si l'instance de base de données est prête, utilisez la commande suivante :

   ```
   app=> SELECT pgactive.pgactive_wait_for_node_ready(); 
   ```

   Si la commande aboutit, vous obtenez la sortie suivante :

   ```
   pgactive_wait_for_node_ready 
   ------------------------------ 
   (1 row)
   ```

   Si la première base de données RDS pour PostgreSQL est relativement volumineuse, `pgactive.pgactive_wait_for_node_ready()` émet le rapport de progression de l’opération de restauration. La sortie ressemble à ce qui suit:

   ```
   NOTICE:  restoring database 'app', 6% of 7483 MB complete
   NOTICE:  restoring database 'app', 42% of 7483 MB complete
   NOTICE:  restoring database 'app', 77% of 7483 MB complete
   NOTICE:  restoring database 'app', 98% of 7483 MB complete
   NOTICE:  successfully restored database 'app' from node node1-app in 00:04:12.274956
    pgactive_wait_for_node_ready 
   ------------------------------ 
   (1 row)
   ```

   À partir de cet instant, `pgactive` synchronise les données entre les deux instances de base de données.

1. Vous pouvez utiliser la commande suivante pour vérifier si la base de données de la deuxième instance de base de données contient les données :

   ```
   app=> SELECT count(*) FROM inventory.products;
   ```

   Si les données ont bien été synchronisées, vous obtenez la sortie suivante :

   ```
    count
   -------
    3
   ```

1. Exécutez la commande suivante pour insérer de nouvelles valeurs :

   ```
   app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
   ```

1. Connectez-vous à la base de données de la première instance de base de données et exécutez la requête suivante :

   ```
   app=> SELECT count(*) FROM inventory.products;
   ```

   Si la réplication active-active est initialisée, vous obtenez une sortie de ce type :

   ```
   count
   -------
    4
   ```

**Pour détacher et supprimer une instance de base de données du groupe `pgactive`**

Vous pouvez détacher et supprimer une instance de base de données du groupe `pgactive` en suivant ces étapes :

1. Vous pouvez détacher la deuxième instance de base de données de la première à l'aide de la commande suivante :

   ```
   app=> SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app']);
   ```

1. Supprimez l'extension `pgactive` de la deuxième instance de base de données à l'aide de la commande suivante :

   ```
   app=> SELECT * FROM pgactive.pgactive_remove();
   ```

   Pour supprimer l'extension de force :

   ```
   app=> SELECT * FROM pgactive.pgactive_remove(true);
   ```

1. Supprimez l'extension à l'aide de la commande suivante :

   ```
   app=> DROP EXTENSION pgactive;
   ```