Il est également POSSIBLE d'éviter tout temps d'arrêt pendant la mise à niveau.
Pour ce faire, lancez brièvement un nouveau RDS à partir d'un instantané de réplica en lecture et configurez-le en tant que réplication active / active de maître à maître. Une fois qu'il est configuré, vous pouvez basculer le trafic des applications sur un serveur APP à la fois sans interruption. Nous utilisons cette approche chaque fois qu'AWS annonce des maintenances RDS pour éviter les temps d'immobilisation, ainsi que pendant nos maintenances planifiées.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2
Voici les détails:
M1 - Maître d'Orignal
R1 - Réplique de lecture du M1
SNAP1 - Instantané de la R1
M2 - Nouveau Master
Séquence de création M2:
M1 → R1 → SNAP1 → M2
Comme nous ne pouvons pas utiliser le privilège SUPER sur RDS, nous n'utilisons pas mysqldump avec l' — master_data2
option sur le M1. Au lieu de cela, nous lançons R1 pour obtenir la position binlog du M1 à partir de celui-ci. Créez ensuite un instantané (SNAP1) à partir du R1, puis lancez M2 à partir du SNAP1.
Créez deux groupes de paramètres RDS distincts avec les décalages suivants pour éviter les conflits PK:
M1: auto_increment_ increment = 4 and auto_increment_offset = 1
M2: auto_increment_ increment = 4 and auto_increment_offset = 2
Créer un utilisateur de réplication sur M1
GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;
1. Créer R1 à partir de 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. Créer SNAP1 à partir de R1
Créer M2 à partir du SNAP1 avec les attributs obtenus à partir de M1
Affecter un groupe de paramètres à M2 avec un décalage auto_increment_ différent de M1 pour éviter les conflits de clé de réplication M / M
4. Configurer la réplication 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. Supprimez R1 et SNAP1 car ils ne sont plus nécessaires
6. Mise à niveau de M2 via AWS Console
Utilisez la procédure standard pour modifier l'instance selon vos besoins.
7. Effectuer une commutation en douceur sur M2
Une fois la réplication M / M configurée avec succès, nous sommes prêts à procéder à la maintenance de la base de données sans interruption de service en commutant gracieusement les serveurs d'applications un à la fois.
Voici plus de détails sur son fonctionnement.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2