Upgrade RDS MySQL com Blue/Green Deployment

Veja como criar um ambiente de Blue/Green para um banco de dados RDS MySQL em produção e utilizar essa funcionalidade para upgrade do MySQL, reduzindo o downtime durante processo de upgrade de versão, possibilidade de rollback mais rápido entre outras possibilidades que irei comentar nesse post.

O Blue/Green deployment são dois ambientes, onde o ambiente Green (Ambiente de Teste) permanece sincronizado com o ambiente Blue (Ambiente de Produção) através de replicação lógica, possibilitando alterações e testes mais assertivos no ambiente Green sem afetar o banco em produção (Blue).


Vamos lá…

Para esse post, foi criado um banco de dados com a versão 8.0.28 (imagem abaixo) que será o Banco de Dados Blue e no momento da criação do Blue/Green Deployment iremos especificar a versão 8.0.32 para o Banco de dados Green com isso será possível simular um upgrade utilizando o recurso.

Com o banco de dados criado, vamos configurar o ambiente para funcionar como Blue/Green Deployment, acessando a console do RDS iremos selecionar o banco da dados e através do menu Action / Create Blue/Green Deployment iremos fazer as configurações:

Na próxima janela será configurado o Blue/Green deployment, inserindo o nome do ambiente, engine version (versão do banco de dados) e parameter group do banco de dados Green. Nesse ponto selecionamos a versão mais atual disponível.

Após selecionar as opções acima e finalizado o processo de criação do ambiente, que nessa demonstração demorou em torno de 16 minutos, será possível ver a seguinte estrutura abaixo na console do RDS:

Um ponto importante é que após a criação do Blue/Green Deployment, o endpoint de conexão continuará o mesmo, criando apenas um novo endpoint para acesso ao Banco de Dados Green. Como isso não seria necessário alterar os parametros de conexão da sua aplicação.
O banco de dados Green será um clone do banco de dados Blue, portanto, se o banco de dados Blue for MultiAZ e tiver replicas de leitura, o Green também terá essa mesma estrutura.

Com o ambiente Blue/Green criado, irei realizar o teste fazendo o “Switch over” do banco de dados Blue para o Green e com isso irei monitorar o tempo que irá demorar para fazer essa “virada”.
Para realizar o “Switch over” é muito muito simples, basta seguir os passos abaixo:

Clicando no opção Switch over irá carregar a janela abaixo com um sumário dos bancos de dados Blue e Green e também o Timeout setting onde você especificará o tempo limite para o switch over ocorrer. Caso o Switch over demore mais que o tempo especificado em Timeout setting, o procedimento não será concluido e nenhuma alteração será aplicada no ambiente.

Após clicar no botão Switch over, o processo será iniciado e a coluna status dos bancos de dados ficará conforme a image abaixo:

Após o Switch over o DB identifier dos bancos será alterado, o banco de dados que estava como Green assumirá como db-mysql1 e o banco de dados que era o Blue foi renomeado com db-mysql1-old1 como pode ser visto abaixo:

O procedimento demorou em torno de 2 minutos, nesse período toda a gravação (write) foi interrompida no banco, mas a leitura (read) continuou normalmente. Essa funcionalidade ficou sensacional! Não acham?

Aplicação em um cenário real

Imaginando um cenário em um ambiente de produção de uma empresa, onde é necessário fazer um upgrade de um banco de dados, mas com o menor tempo de indisponibilidade possível e a menor carga operacional. 
Essa funcionalidade seria uma ótima opção, pois o upgrade, testes e validações seriam realizados no banco de dados Green, finalizando essas etapas, seria necessário somente programar uma janela de manutenção para fazer o Switch over para colocar a nova versão em produção.

Observações

1 – Realizamos esses procedimentos em um banco de teste, mas em um banco de produção com maior volume gravação, o tempo para o Switch over poderá ser maior.

2 – No momento em que escrevo esse post, o Blue/Green deployment é compatível apenas com o Amazon Aurora com MySQL, RDS MariaDB e RDS MySQL…

Agora só nos resta aguardar essa funcionalidade ficar disponível para outras bancos de dados :).

Até breve!