Também é possível evitar tempo de inatividade durante a atualização.
A maneira de fazer isso é iniciando brevemente um novo RDS a partir de um instantâneo de réplica de leitura e configurando-o como replicação de mestre para mestre ativo / ativo. Depois de configurado, você pode alternar o tráfego de aplicativos em um servidor APP por vez, sem tempo de inatividade. Usamos a abordagem toda vez que a AWS anuncia manutenções do RDS para evitar tempo de inatividade e durante as manutenções programadas.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2
Aqui estão os detalhes:
M1 - Mestre Orignal
R1 - Leia a réplica do M1
SNAP1 - Instantâneo do R1
M2 - Novo Mestre
Sequência de criação M2:
M1 → R1 → SNAP1 → M2
Como não podemos usar o privilégio SUPER no RDS, não usamos o mysqldump com a — master_data2
opção no M1. Em vez disso, lançamos o R1 para obter dele a posição no binlog do M1 . Em seguida, crie um instantâneo (SNAP1) a partir do R1 e inicie o M2 a partir do SNAP1.
Crie dois grupos de parâmetros RDS separados com os seguintes deslocamentos para evitar conflitos de PK:
M1: auto_increment_ increment = 4 and auto_increment_offset = 1
M2: auto_increment_ increment = 4 and auto_increment_offset = 2
Criar usuário de replicação no M1
GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;
1. Crie R1 a 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. Crie SNAP1 a partir de R1
4. Configure a replicação 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. Exclua R1 e SNAP1, pois eles não são mais necessários
6. Atualize o M2 via AWS Console
Use o procedimento padrão para modificar a instância conforme suas necessidades.
7. Execute a transição graciosa para o M2
Como a replicação M / M é configurada com sucesso, estamos prontos para continuar com a manutenção do banco de dados sem tempo de inatividade, alternando normalmente os servidores de aplicativos um por vez.
Aqui estão mais detalhes sobre como ele funciona.
https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2