¿Cómo se crea una réplica entre regiones de Amazon RDS para MySQL en otra cuenta de AWS?

8 minutos de lectura
0

Deseo crear una réplica de Amazon Relational Database Service (Amazon RDS)para MySQL en una región de AWS y una cuenta diferentes de la instancia de base de datos de origen. ¿Cómo se puede hacer?

Descripción breve

Puede crear una réplica de Amazon RDS para MySQL en una región y una cuenta de AWS distintas de la instancia de base de datos de origen para los siguientes casos de uso:

  • Mejora de la recuperación de desastres
  • Escalado horizontal en todo el mundo
  • Migración entre regiones y cuentas de AWS

Nota: No hay forma directa de crear una réplica entre regiones en otra cuenta de AWS mediante la consola de Amazon RDS o la Interfaz de la línea de comandos de AWS (AWS CLI). Los pasos que se describen en este artículo configuran una replicación externa basada en binlogs entre dos instancias RDS para MySQL en diferentes cuentas o regiones de AWS.

Resolución

Para crear una réplica de Amazon RDS para MySQL entre regiones en otra cuenta de AWS, siga estos pasos.

Nota: La cuenta A contiene la instancia primaria de RDS para MySQL en la región de origen. La cuenta B contiene la réplica RDS para MySQL en la región de destino.

1.    En la cuenta A (la instancia principal de Amazon RDS para MySQL), asegúrese de que el registro binario se encuentra activo. De forma predeterminada, las copias de seguridad automáticas y el registro binario están activados en RDS para MySQL. El registro binario se activa siempre que las copias de seguridad automatizadas se encuentran activas.

Nota: Se produce una interrupción si cambia el periodo de retención de copia de seguridad de “0” a un valor distinto de cero, o viceversa.

2.    Actualice el periodo de retención del registro binario mediante el siguiente comando:

mysql>  CALL mysql.rds_set_configuration(name,value);

Consejo: Elija un periodo de tiempo que retenga los archivos de registros binarios en la fuente de replicación durante el tiempo suficiente para que los cambios se apliquen antes de eliminarlos. Amazon RDS retiene los archivos del registro binario en una instancia MySQL durante un máximo de 168 horas (7 días). Para obtener más información, consulte mysql.rds_set_configuration.

Por ejemplo, la sintaxis siguiente establece el periodo de retención de registros binarios en 24 horas:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

3.    Cree un usuario de replicación en la instancia principal de la cuenta A y, a continuación, otorgue los privilegios necesarios:

mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

4.    Otorgue los privilegios (necesarios) REPLICATION CLIENT (CLIENTE DE REPLICACIÓN) y REPLICATION SLAVE (SUBORDINADO DE REPLICACIÓN) al usuario creado en el paso 3:

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO  'repl_user'@'<domain_name>';

5.    Cree una réplica de lectura entre regiones en la cuenta principal (cuenta A) con la región de destino seleccionada.

6.    Inicie sesión en la instancia de réplica creada en la cuenta A. A continuación, confirme que la réplica esté al día con la instancia de base de datos primaria:

mysql> SHOW SLAVE STATUS\G

Nota: Verifique que el valor de Seconds_Behind_Master sea “0”. Cuando el valor es “0”, la réplica se captura en la instancia de base de datos primaria. Para obtener más información, consulte Monitoreo de la replicación de lectura.

7.    Después de capturar la réplica de lectura en la instancia de base de datos primaria, detenga la replicación en la instancia de réplica creada en el paso 5. Para detener la replicación, utilice la siguiente sintaxis:

mysql> call mysql.rds_stop_replication();

8.    Ejecute el comando SHOW SLAVE STATUS (MOSTRAR ESTADO DE SUBORDINADO) en la réplica y, a continuación, registre los valores de salida de Relay_Master_Log_File y Exec_Master_Log_Pos. Los valores Relay_Master_Log_File y Exec_Master_Log_Pos son las coordenadas del registro binario, que se utilizan para configurar la replicación externa en pasos posteriores.

9.    Cree una instantánea de base de datos de la instancia de réplica en la cuenta A.

(Opcional) O bien, puede utilizar una herramienta nativa que genere copias de seguridad lógicas (como mysqldump) para exportar datos de la instancia de réplica de la cuenta A. La herramienta nativa se puede utilizar entonces para importar los datos a una instancia MySQL de RDS recién creada de la misma versión en la cuenta B. Con este enfoque, no tiene que copiar ni compartir instantáneas ni claves de AWS KMS entre las dos cuentas. Si decide utilizar este enfoque, vaya al paso 12 para configurar el acceso a la red y la replicación entre ambas instancias. Antes de adoptar este enfoque, debe importar datos a la instancia de Amazon RDS for MySQL de la cuenta B.

10.    Comparta la instantánea de base de datos con la cuenta B.

Nota: Si la instantánea de base de datos está cifrada, la clave de AWS KMS utilizada para cifrar la instantánea se debe compartir con la cuenta de destino. Para obtener más información, consulte Compartir instantáneas cifradas.

11.    Restaure la instantánea de base de datos en la cuenta B.

Nota: Una instancia de base de datos no se puede restaurar a partir de una instantánea cifrada compartida. En su lugar, copie la instantánea de base de datos y restaure la instancia de base de datos desde ella.

12.    Configure el acceso a la red entre la cuenta A (la cuenta fuente) y la cuenta B (cuenta de destino). El acceso a la red permite que el tráfico fluya entre las cuentas fuente y de destino.

13.    Configure las reglas del grupo de seguridad de entrada para la instancia principal de BD de la Cuenta A. Esta configuración permite que el tráfico fluya a través de la Internet pública desde la instancia RDS para MySQL recién creada en la Cuenta B (la cuenta de destino). Los grupos de seguridad protegen la instancia de Amazon RDS para MySQL.

En el caso del tráfico de replicación privado, se debe crear y aceptar una conexión de emparejamiento de VPC entre las dos cuentas de AWS.

14.    Configure la replicación externa en la instancia de destino en la Cuenta B. Utilice repl_user dentro del comando como parámetro. Nota: El comando CALL mysql.rds_set_external_master se debe ejecutar por un usuario de la BD con privilegios de ejecución de comandos.

mysql> CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  );

Por ejemplo:

mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

mytestinnstance.us-east-1.rds.amazonaws.com: punto de conexión de instancia principal 3306: puerto de instancia principal repl_user: nombre de usuario de replicación creado en el paso 3 contraseña: contraseña de usuario creada en el paso 3 mysql-bin-changelog.000031: nombre del archivo de registro binario de la salida del paso 8 107: posición de registro binario de la salida del paso 8

15.    Comience la replicación en la instancia restaurada de la cuenta B:

CALL mysql.rds_start_replication;

A continuación, se muestra un resultado de ejemplo:

+-------------------------+
| Message                 |
+-------------------------+
| Slave running normally. |
+-------------------------+

16.    Ejecute el siguiente comando en la instancia de la cuenta B para verificar el estado de la replicación:

mysql> show replica status \G

Nota: Para la versión 8.0.22 de MySQL y posteriores, SHOW SLAVE STATUS (MOSTRAR ESTADO DE SUBORDINADO) está obsoleto y en su lugar se puede utilizar SHOW REPLICA STATUS (MOSTRAR ESTADO DE RÉPLICA). Para obtener más información, consulte Checking replication status en el sitio web de MySQL.

17.    Elimine la réplica (que actuaba como instancia intermedia) creada en el paso 5. Esta réplica se utilizó para extraer coordenadas de registro binario sin tener que suspender las escrituras en la instancia principal de la cuenta A.

Consideraciones sobre la replicación entre regiones

Tenga en cuenta los siguientes enfoques para la replicación entre regiones:

  • Una instancia de base de datos fuente puede tener réplicas de lectura entre regiones en varias regiones de AWS. Para obtener más información, consulte Creación de una réplica de lectura en una región de AWS distinta.
  • Puede esperar que se produzca un retraso mayor en cualquier réplica de lectura que se encuentre en una región de AWS distinta a la de la instancia fuente. Este retraso proviene de los canales de red más largos entre los centros de datos regionales. Para obtener información sobre el tiempo de retraso de replicación, consulte Monitoreo de la replicación de lectura.
  • Los datos transferidos para la replicación entre regiones incurren en cargos por transferencia de datos de Amazon RDS. Para obtener más información sobre estos cargos por transferencia de datos, consulte Costos de la replicación entre regiones.

Información relacionada

Cross-Region read replicas for Amazon RDS for MySQL

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años