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

Última actualización: 08/09/2021

Quiero crear una réplica de MySQL de Amazon Relational Database Service (Amazon RDS) en una región de AWS y una cuenta diferentes de la instancia de base de datos fuente. ¿Cómo puedo hacerlo?

Descripción breve

Puede crear una réplica MySQL de Amazon RDS en otra región y cuenta de AWS y contabilizar desde la instancia de base de datos fuente 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 AWS Command Line Interface (AWS CLI). Los pasos descritos en este artículo configuran una replicación externa basada en registros binarios entre dos instancias MySQL de RDS en distintas cuentas o regiones de AWS.

Resolución

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

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

1.    En la cuenta A (la instancia principal MySQL de Amazon RDS), asegúrese de que el registro binario esté habilitado. De forma predeterminada, las copias de seguridad automatizadas y el registro binario están habilitados en MySQL de RDS. El registro binario está habilitado siempre que se habiliten las copias de seguridad automatizadas.

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 STAUS\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 su 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 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 debe compartirse con la cuenta de destino. Para obtener más información, consulte Cómo 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 de entrada del grupo de seguridad para la instancia de base de datos primaria de la cuenta A. Esta configuración permite que el tráfico fluya a través de la Internet pública desde la instancia MySQL de RDS recién creada en la cuenta B (la cuenta de destino). Los grupos de seguridad protegen la instancia MySQL de Amazon RDS.

Para el tráfico de replicación privada, se debe crear y aceptar una interconexión de VPC entre las dos cuentas de AWS.

14.    Configure la replicación externa en su instancia de destino en la cuenta B:

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 enlace de la instancia principal
3306: puerto de la 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 registros binarios de la salida del paso 8
107: posición del registro binario a partir 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.

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?