También es POSIBLE evitar cualquier tiempo de inactividad durante la actualización.
La forma de hacerlo es iniciar brevemente un nuevo RDS desde una instantánea de réplica de lectura y configurarlo como replicación de maestro a maestro activo / activo. Una vez configurado, puede cambiar el tráfico de aplicaciones de un servidor de aplicaciones a la vez sin ningún tiempo de inactividad. Utilizamos el enfoque cada vez que AWS anuncia mantenimientos RDS para evitar el tiempo de inactividad, así como durante nuestros mantenimientos programados.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2
Aquí están los detalles:
M1 - Maestro original
R1 - Leer réplica del M1
SNAP1 - Instantánea del R1
M2 - Nuevo maestro
Secuencia de creación de M2:
M1 → R1 → SNAP1 → M2
Como no podemos usar el privilegio SUPER en RDS, no usamos mysqldump con la — master_data2
opción en el M1. En su lugar, lanzamos R1 para obtener la posición binlog del M1 a partir de él. Luego cree una instantánea (SNAP1) desde el R1 y luego inicie M2 desde el SNAP1.
Cree dos grupos de parámetros RDS separados con los siguientes desplazamientos para evitar conflictos PK:
M1: auto_increment_ increment = 4 and auto_increment_offset = 1
M2: auto_increment_ increment = 4 and auto_increment_offset = 2
Crear usuario de replicación en M1
GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;
1. Crear R1 desde M1
-- Connect to the R1 and stop replication
CALL mysql.rds_stop_replication;
-- Obtain M1’s (!!) current binlog file and position
`mysql> show slave status\G
Master_Log_File: mysql-bin.000622
Exec_Master_Log_Pos: 9135555
2. Crear SNAP1 desde R1
Cree M2 a partir de SNAP1 con los atributos obtenidos de M1
Asigne un grupo de parámetros a M2 con un desplazamiento de aumento automático diferente de M1 para evitar conflictos de clave de replicación M / M
4. Configurar la replicación M / M
-- Configure M2 as a slave of M1
CALL mysql.rds_set_external_master (‘m1.xyxy24.us-east-1.rds.amazonaws.com’, 3306, ‘repl’, ‘mypassword’, ‘mysql-bin.000622, 9135555, 0);
CALL mysql.rds_start_replication;
-- Connect to M2 and obtain its current binlog file and position
mysql> show master status\G
File: mysql-bin.004444
Position: 6666622
-- Connect to M1 and configure it to be a slave of the M2
CALL mysql.rds_set_external_master (‘m2.xyxy24.us-east-1.rds.amazonaws.com’, 3306 , ‘repl’, ‘mypassword’, ‘mysql-bin.004444, 6666622, 0);
CALL mysql.rds_start_replication;
5. Eliminar R1 y SNAP1 ya que ya no son necesarios
6. Actualice M2 a través de la consola de AWS
Utilice el procedimiento estándar para modificar la instancia según sus necesidades.
7. Realice la conmutación elegante a M2
A medida que la replicación M / M se configura con éxito, estamos listos para continuar con el mantenimiento de la base de datos sin tiempo de inactividad al cambiar con gracia los servidores de aplicaciones uno a la vez.
Aquí hay más detalles sobre cómo funciona.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2