Configuration de la réplication active-active pour des instances de base de données RDS for PostgreSQL - Amazon Relational Database Service

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 for PostgreSQL

La procédure suivante explique comment démarrer une réplication active-active entre deux , le cas échéant. pgactive Pour suivre l'exemple de haute disponibilité multirégionale, vous devez déployer des instances Amazon RDS for PostgreSQL dans deux régions différentes et configurer l'appairage de VPC. Pour en savoir plus, consultez Appairage de VPC.

Note

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

Ces étapes supposent que l'instance de base de données RDS pour PostgreSQL a été activée avec l'extension. pgactive Pour de plus amples informations, veuillez consulter Initialisation de la capacité d'extension pgactive.

Pour configurer la première instance de base de données RDS for 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 for PostgreSQL.

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

    psql --host=firstinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
  2. Créez une base de données sur l'instance RDS for PostgreSQL à l'aide de la commande suivante :

    postgres=> CREATE DATABASE app;
  3. Faites basculer la connexion sur la nouvelle base de données à l'aide de la commande suivante :

    \c app
  4. 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);
    2. 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');
    3. 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
  5. Créez l'extension pgactive sur la base de données existante.

    app=> CREATE EXTENSION pgactive;
  6. 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.

  7. 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 for PostgreSQL et la joindre au groupe pgactive

L'exemple suivant illustre la façon dont une instance de base de données RDS for 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 for PostgreSQL ont été configurées avec l'extension pgactive. Pour de plus amples informations, veuillez consulter Initialisation de la capacité d'extension pgactive.

  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
  2. Créez une base de données sur la deuxième instance de base de données RDS for PostgreSQL à l'aide de la commande suivante :

    postgres=> CREATE DATABASE app;
  3. Faites basculer la connexion sur la nouvelle base de données à l'aide de la commande suivante :

    \c app
  4. Créez l'extension pgactive sur la base de données existante.

    app=> CREATE EXTENSION pgactive;
  5. Joignez la deuxième instance de base de données du cluster de bases de RDS pour PostgreSQL au groupe de manière plus sécurisée à pgactive l'aide des 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' );

    Utilisez les commandes suivantes comme méthode alternative, mais moins sécurisée, pour joindre la deuxième instance de base de données du (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.

  6. 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 for 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.

  7. 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
  8. Exécutez la commande suivante pour insérer de nouvelles valeurs :

    app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
  9. 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']);
  2. 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);
  3. Supprimez l'extension à l'aide de la commande suivante :

    app=> DROP EXTENSION pgactive;