Es ist auch MÖGLICH, während des Upgrades Ausfallzeiten zu vermeiden.
Sie können dies tun, indem Sie einen neuen RDS über einen Snapshot eines gelesenen Replikats kurz starten und ihn als Active / Active-Master-zu-Master-Replikation konfigurieren. Sobald es konfiguriert ist, können Sie den Anwendungsdatenverkehr ohne Ausfallzeit auf jeweils einen APP-Server umschalten. Wir wenden diesen Ansatz jedes Mal an, wenn AWS RDS-Wartungen ankündigt, um Ausfallzeiten sowie planmäßige Wartungen zu vermeiden.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2
Hier sind die Details:
M1 - Ursprünglicher Meister
R1 - Replikat der M1 lesen
SNAP1 - Schnappschuss des R1
M2 - Neuer Meister
M2 Erstellungsreihenfolge:
M1 → R1 → SNAP1 → M2
Da wir das SUPER-Privileg nicht für RDS verwenden können, verwenden wir mysqldump with — master_data2
option auf dem M1 nicht. Stattdessen starten wir R1, um die Binlog-Position des M1 zu ermitteln . Erstellen Sie dann einen Snapshot (SNAP1) vom R1 und starten Sie M2 vom SNAP1.
Erstellen Sie zwei separate RDS-Parametergruppen mit den folgenden Offsets, um PK-Konflikte zu vermeiden:
M1: auto_increment_ increment = 4 and auto_increment_offset = 1
M2: auto_increment_ increment = 4 and auto_increment_offset = 2
Erstellen Sie einen Replikationsbenutzer auf M1
GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;
1. Erstelle R1 aus 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. Erstellen Sie SNAP1 aus R1
Erstellen Sie M2 aus dem SNAP1 mit den von M1 erhaltenen Attributen
Weisen Sie M2 eine Parametergruppe mit einem anderen auto_increment_offset als M1 zu, um Konflikte mit M / M-Replikationsschlüsseln zu vermeiden
4. Richten Sie die M / M-Replikation ein
-- 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. Löschen Sie R1 und SNAP1, da sie nicht mehr benötigt werden
6. Aktualisieren Sie M2 über die AWS Console
Verwenden Sie die Standardprozedur, um die Instanz gemäß Ihren Anforderungen zu ändern.
7. Führen Sie eine ordnungsgemäße Umschaltung auf M2 durch
Da die M / M-Replikation erfolgreich eingerichtet wurde, können wir die DB-Wartung ohne Ausfallzeiten fortsetzen, indem wir jeweils einen App-Server ordnungsgemäß wechseln.
Hier erfahren Sie mehr darüber, wie es funktioniert.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2