È inoltre POSSIBILE evitare eventuali tempi di fermo durante l'aggiornamento.
Il modo per farlo è quello di avviare brevemente un nuovo RDS da un'istantanea della replica di lettura e configurarlo come replica master / master attiva / attiva. Una volta configurato, è possibile cambiare il traffico dell'applicazione un server APP alla volta senza tempi di inattività. Utilizziamo l'approccio ogni volta che AWS annuncia manutenzioni RDS per evitare tempi di inattività nonché durante le nostre manutenzioni programmate.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2
Ecco i dettagli:
M1 - Maestro originale
R1 - Leggi la replica della M1
SNAP1 - Istantanea di R1
M2 - Nuovo maestro
Sequenza di creazione M2:
M1 → R1 → SNAP1 → M2
Dato che non possiamo usare il privilegio SUPER su RDS, non usiamo mysqldump con l' — master_data2
opzione sull'M1. Invece, lanciamo R1 per ottenere la posizione binlog di M1 da esso. Quindi creare uno snapshot (SNAP1) da R1 e quindi avviare M2 da SNAP1.
Creare due gruppi di parametri RDS separati con i seguenti offset per evitare conflitti PK:
M1: auto_increment_ increment = 4 and auto_increment_offset = 1
M2: auto_increment_ increment = 4 and auto_increment_offset = 2
Crea un utente di replica su M1
GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;
1. Creare R1 da 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. Creare SNAP1 da R1
4. Configurare la replica 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. Eliminare R1 e SNAP1 poiché non sono più necessari
6. Aggiorna M2 tramite AWS Console
Utilizzare la procedura standard per modificare l'istanza in base alle proprie esigenze.
7. Esegui il passaggio grazioso a M2
Una volta che la replica M / M è stata impostata correttamente, siamo pronti per procedere con la manutenzione del DB senza tempi di inattività, cambiando graziosamente i server delle app uno alla volta.
Ecco ulteriori dettagli su come funziona.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2