¿Cómo puedo cifrar una instancia de base de datos sin cifrar de Amazon RDS para MySQL o MariaDB con un tiempo de inactividad mínimo?

6 minutos de lectura
0

He intentado crear una réplica de lectura cifrada de mi instancia sin cifrar de Amazon Relational Database Service (Amazon RDS) para MySQL o MariaDB. Sin embargo, he recibido un error. ¿Cómo puedo solucionar este problema?

Descripción breve

Amazon RDS tiene las siguientes limitaciones para instancias de base de datos cifradas:

  • No puede modificar una instancia de base de datos sin cifrar de Amazon RDS existente para cifrarla.
  • No puede crear una réplica de lectura cifrada a partir de una instancia sin cifrar.

Como no puede cifrar una instancia de Amazon RDS existente, debe crear una nueva instancia cifrada. De lo contrario, al crear una réplica de lectura cifrada de una instancia sin cifrar de Amazon RDS para MySQL, recibirá el siguiente error:

"You cannot create an encrypted Read Replica from an unencrypted DB
            instance. (Service: AmazonRDS; Status Code: 400; Error Code:
            InvalidParameterCombination; Request ID:)"

Para cifrar una instancia de base de datos sin cifrar con un tiempo de inactividad mínimo, siga estos pasos:

1.    Cifre una instantánea sin cifrar que haya tomado de una réplica de lectura sin cifrar de la instancia de base de datos.

2.    Restaure una nueva instancia de base de datos a partir de la instantánea cifrada para desplegar una nueva instancia de base de datos cifrada.

3.    Utilice la replicación de MySQL para sincronizar los cambios del origen con la nueva instancia de base de datos cifrada.

4.    Compruebe que la nueva instancia de base de datos cifrada esté sincronizada con la instancia de base de datos de origen.

5.    Cambie sus conexiones y redirija el tráfico a la nueva instancia de base de datos.

Resolución

Configuración de la replicación con un tiempo de inactividad mínimo

1.    Cree una réplica de lectura temporal para la instancia de base de datos de origen sin cifrar de Amazon RDS. En este ejemplo, la instancia de base de datos sin cifrar de origen se denomina SOURCE-EU y la réplica de lectura temporal se denomina TEMP-RR.

2.    Conéctese a TEMP-RR y supervise el retraso de la réplica hasta que Seconds_Behind_Master esté estable en el valor 0. Esto indica que TEMP-RR está sincronizado con SOURCE-EU:

mysql> SHOW SLAVE STATUS \G
Seconds_Behind_Master: 0

3.    Detenga el proceso de replicación en TEMP-RR.

MySQL > call mysql.rds_stop_replication;
+---------------------------+
| Message                   |
+---------------------------+
| Slave is down or disabled |
+---------------------------+

4.    Tenga en cuenta los valores de Relay_Master_Log_File y Exec_Master_Log_Pos de TEMP-RR:

mysql> SHOW SLAVE STATUS \G
Relay_Master_Log_File: mysql-bin-changelog.000012
Exec_Master_Log_Pos: 123

5.    En SOURCE-EU, defina el parámetro de horas de retención de binlog para conservar los registros binarios durante el tiempo necesario para completar la operación. En el siguiente ejemplo, las horas de retención de binlog están establecidas en 24 horas:

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

6.    Tome una instantánea de TEMP-RR. Si lo desea, puede eliminar TEMP-RR después de tomar la instantánea.

7.    Copie la instantánea de TEMP-RR y establezca Habilitar cifrado en .

8.    Restaure una nueva instancia de base de datos a partir de la instantánea copiada que tenga habilitado el cifrado. En este ejemplo, la nueva instancia de base de datos cifrada se denomina NEW-RR-EN.

9.    Modifique las reglas de entrada en el grupo de seguridad SOURCE-EU para permitir el tráfico desde NEW-RR-EN. Si usa el mismo grupo de seguridad en ambas instancias de base de datos, puede usar la misma referencia de ID de grupo de seguridad que SOURCE-EU.

Nota: Asegúrese de permitir el tráfico saliente a SOURCE-EU desde NEW-RR-EN.

10.    Inicie sesión en SOURCE-EU, configure un usuario de replicación y, a continuación, otorgue los permisos necesarios al usuario:

mysql> create user 'repl_user'@'%' identified by 'password123';
mysql> grant replication slave, replication client on *.* to 'repl_user'@'%';
mysql> show grants for 'repl_user'@'%';

Nota: Sustituya repl_user por su propio nombre de usuario de replicación y password123 por su propia contraseña.

11.    Conéctese a NEW-RR-EN y establezca una conexión de replicación con SOURCE-EU:

mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );

El rds-endpoint es el punto de conexión de la instancia de base de datos para SOURCE-EU.

El nombre de usuario (repl_user) y la contraseña (password123) son el nombre de usuario y la contraseña que creó en el paso 10. Utilice los valores capturados de Relay_Master_Log_File y Exec_Master_Log_Pos del paso 4 para configurar la replicación con el procedimiento mysql.rds_set_external_master.

Nota: Si SOURCE-EU es de acceso público y NEW-RR-EN (nueva instancia de base de datos cifrada) está configurada como «privada», utilice la dirección IP privada (de SOURCE-EU) en lugar de rds-endpoint.

12.    Desde NEW-RR-EN, inicie la replicación:

mysql > CALL mysql.rds_start_replication;

13.    Desde NEW-RR-EN, confirme que la replicación se llevó a cabo correctamente y que está sincronizada entre SOURCE-EU y NEW-RR-EN.

mysql> SHOW SLAVE STATUS \G

Si la conexión entre la instancia de base de datos de origen y la réplica de lectura es correcta, el resultado tendrá este aspecto:

Slave_IO_State: Waiting for master to send event
Seconds Behind master: 0

14.    En cuanto Seconds_Behind_Master esté estable en el valor 0, detenga el tráfico y cierre las conexiones en SOURCE-EU. A continuación, comienza el tiempo de inactividad.

Nota: Detenga todos los servidores de aplicaciones y los clientes que se conectan a SOURCE-EU para asegurarse de que no se hagan nuevos cambios en SOURCE-EU. Si lo desea, puede bloquear temporalmente el grupo de seguridad que utiliza SOURCE-EU. Esto evita el tráfico entrante desde cualquier aplicación o cliente, excepto desde NEW-RR-EN y el host desde el que el usuario lleva a cabo estas acciones.

15.    Como usuario maestro de la base de datos, conéctese a NEW-RR-EN y, luego, detenga la replicación:

MySQL > call mysql.rds_stop_replication;

Importante: Tras ejecutar este comando, NEW-RR-EN ya no replica los datos de SOURCE-EU.

16.    Para promocionar NEW-RR-EN a un servidor independiente, detenga la relación de replicación entre SOURCE-EU y NEW-RR-EN:

MySQL > call mysql.rds_reset_external_master;

17.    Para dirigir todas las conexiones de aplicaciones, clientes y bases de datos a NEW-RR-EN, especifique el punto de conexión de DNS NEW-RR-EN en todas las cadenas de conexión. O bien, cambie el nombre de SOURCE-EU y, a continuación, modifique NEW-RR-EN para usar el mismo nombre que usa SOURCE-EU.

18.    Confirme que las reglas del grupo de seguridad de NEW-RR-EN permiten el tráfico entrante desde las aplicaciones y los clientes adecuados.

19.    Tras dirigir las aplicaciones y los clientes a NEW-RR-EN y probar el entorno, elimine SOURCE-EU.

Consejo: Se recomienda probar esta operación en una instancia de prueba antes de aplicarla en un entorno de producción.


Información relacionada

Trabajar con réplicas de lectura

¿Cómo puedo cifrar las instantáneas de Amazon RDS?

Solución de problemas de replicación en la documentación de MySQL

Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externo

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años