Configuración de la replicación activa-activa para las instancias de base de datos de RDS para PostgreSQL - Amazon Relational Database Service

Configuración de la replicación activa-activa para las instancias de base de datos de RDS para PostgreSQL

En el siguiente procedimiento, se muestra cómo iniciar la replicación activo-activo entre dos instancias de base de datos de RDS para PostgreSQL donde pgactive esté disponible. Para ejecutar el ejemplo de alta disponibilidad multirregión, debe implementar instancias de Amazon RDS para PostgreSQL en dos regiones diferentes y configurar la interconexión de VPC. Para obtener más información, consulte Interconexión de VPC.

nota

El envío de tráfico entre varias regiones puede conllevar costes adicionales.

En estos pasos, se asume que la instancia de base de datos de RDS para PostgreSQL se ha habilitado con la extensión pgactive. Para obtener más información, consulte Inicialización de la capacidad de la extensión pgactive.

Para configurar la primera instancia de base de datos de RDS para PostgreSQL con la extensión pgactive

En el siguiente ejemplo, se ilustra cómo se crea el grupo pgactive, junto con otros pasos necesarios para crear la extensión pgactive en la instancia de base de datos de RDS para PostgreSQL.

  1. Utilice psql u otra herramienta de cliente para conectarse a su primera instancia de base de datos de RDS para PostgreSQL.

    psql --host=firstinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
  2. Cree una base de datos en la instancia de RDS para PostgreSQL mediante el siguiente comando:

    postgres=> CREATE DATABASE app;
  3. Cambie la conexión a la nueva base de datos mediante el siguiente comando:

    \c app
  4. Cree y rellene una tabla de ejemplo utilizando las siguientes instrucciones SQL:

    1. Cree una tabla de ejemplo con la siguiente instrucción SQL.

      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. Rellene la tabla con algunos datos de ejemplo mediante la siguiente instrucción SQL.

      app=> INSERT INTO inventory.products (id, product_name) VALUES (1, 'soap'), (2, 'shampoo'), (3, 'conditioner');
    3. Compruebe que los datos existen en la tabla mediante la siguiente instrucción SQL.

      app=>SELECT count(*) FROM inventory.products; count ------- 3
  5. Cree la extensión pgactive en la base de datos existente.

    app=> CREATE EXTENSION pgactive;
  6. Para crear e inicializar el grupo pgactive use los siguientes comandos:

    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>');

    Ahora puede inicializar el grupo de replicación y agregar esta primera instancia:

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

    Utilice los siguientes comandos como método alternativo, aunque menos seguro, para crear e inicializar el grupo 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 es el nombre que se asigna para identificar de forma exclusiva un nodo del grupo pgactive.

    nota

    Para realizar este paso correctamente en una instancia de base de datos de acceso público, debe activar el parámetro rds.custom_dns_resolution configurándolo en 1.

  7. Para comprobar si la instancia de base de datos está lista, utilice el siguiente comando:

    app=> SELECT pgactive.pgactive_wait_for_node_ready();

    Si el comando se ejecuta correctamente, verá el siguiente resultado:

    pgactive_wait_for_node_ready ------------------------------ (1 row)
Para configurar la segunda instancia de RDS para PostgreSQL y unirla al grupo pgactive

En el siguiente ejemplo, se ilustra cómo puede unir una instancia de base de datos de RDS para PostgreSQL al grupo pgactive, junto con otros pasos necesarios para crear la extensión pgactive en la instancia de base de datos.

En estos pasos se asume que otras instancias de base de datos de RDS para PostgreSQL se han configurado con la extensión pgactive. Para obtener más información, consulte Inicialización de la capacidad de la extensión pgactive.

  1. Utilice psql para conectarse a la instancia en la que desea recibir actualizaciones del publicador.

    psql --host=secondinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
  2. Cree una base de datos en la segunda instancia de base de datos de RDS para PostgreSQL mediante el siguiente comando:

    postgres=> CREATE DATABASE app;
  3. Cambie la conexión a la nueva base de datos mediante el siguiente comando:

    \c app
  4. Cree la extensión pgactive en la base de datos existente.

    app=> CREATE EXTENSION pgactive;
  5. Una la segunda instancia de base de datos de RDS para PostgreSQL al grupo pgactive de una forma más segura mediante los siguientes comandos:

    -- 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' );

    Utilice los siguientes comandos como método alternativo, aunque menos seguro, para unir la segunda instancia de base de datos de RDS para PostgreSQL al grupo 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 es el nombre que se asigna para identificar de forma exclusiva un nodo del grupo pgactive.

  6. Para comprobar si la instancia de base de datos está lista, utilice el siguiente comando:

    app=> SELECT pgactive.pgactive_wait_for_node_ready();

    Si el comando se ejecuta correctamente, verá el siguiente resultado:

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

    Si la primera base de datos de RDS para PostgreSQL es relativamente grande, puede ver que pgactive.pgactive_wait_for_node_ready()emite el informe de progreso de la operación de restauración. El resultado tiene un aspecto similar al siguiente:

    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)

    A partir de este momento, pgactive sincroniza los datos entre las dos instancias de base de datos.

  7. Puede utilizar el siguiente comando para comprobar si la base de datos de la segunda instancia de base de datos contiene los datos:

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

    Si los datos se sincronizan correctamente, verá el siguiente resultado:

    count ------- 3
  8. Ejecute el siguiente comando para insertar nuevos valores:

    app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
  9. Conéctese a la base de datos de la primera instancia de base de datos y ejecute la siguiente consulta:

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

    Si se inicializa la replicación activa-activa, el resultado es similar al siguiente:

    count ------- 4
Para separar y eliminar una instancia de base de datos del grupo pgactive

Para separar y eliminar una instancia de base de datos del grupo pgactive, siga estos pasos:

  1. Puede separar la segunda instancia de base de datos de la primera instancia de base de datos mediante el siguiente comando:

    app=> SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app']);
  2. Elimine la extensión pgactive de la segunda instancia de base de datos mediante el siguiente comando:

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

    Para eliminar la extensión a la fuerza:

    app=> SELECT * FROM pgactive.pgactive_remove(true);
  3. Suelte la extensión con el siguiente comando:

    app=> DROP EXTENSION pgactive;