Esta manhã, participei da atualização de um banco de dados PostgreSQL no AWS RDS. Queríamos passar da versão 9.3.3 para a versão 9.4.4. "Testamos" a atualização em um banco de dados intermediário, mas o banco de dados intermediário é muito menor e não usa o Multi-AZ. Acabou que este teste foi bastante inadequado.
Nosso banco de dados de produção usa o Multi-AZ. No passado, fizemos pequenas atualizações de versão e, nesses casos, o RDS atualiza o modo de espera primeiro e depois o promove como mestre. Portanto, o único tempo de inatividade ocorrido é de aproximadamente 60s durante o failover.
Assumimos que o mesmo aconteceria com a atualização da versão principal, mas como estávamos errados.
Alguns detalhes sobre nossa configuração:
- db.m3.large
- IOPS provisionado (SSD)
- 300 GB de armazenamento, dos quais 139 GB são usados
- Tivemos excelentes atualizações do sistema operacional RDS, queríamos fazer um lote com essa atualização para minimizar o tempo de inatividade
Aqui estão os eventos do RDS registrados enquanto realizamos a atualização:
A CPU do banco de dados foi atingida no máximo entre 08:44 e 10:27. Muito desse tempo pareceu ser ocupado pelo RDS tirando um instantâneo de pré e pós-atualização.
Os documentos da AWS não alertam para essas repercussões, embora, ao lê-las, fique claro que uma falha óbvia em nossa abordagem é que não criamos uma cópia do banco de dados de produção na configuração do Multi-AZ e tentamos atualizá-lo como um teste
Em geral, foi muito frustrante porque o RDS nos deu muito pouca informação sobre o que estava fazendo e quanto tempo provavelmente levaria. (Mais uma vez, fazer um teste teria ajudado ...)
Além disso, queremos aprender com esse incidente, então aqui estão nossas perguntas:
- Esse tipo de coisa é normal ao fazer uma atualização de versão principal no RDS?
- Se quiséssemos fazer uma grande atualização de versão no futuro com um tempo de inatividade mínimo, como procederíamos? Existe algum tipo de maneira inteligente de usar a replicação para torná-la mais transparente?
ANALYZE
para atualizar as estatísticas resolveu. Se alguém tiver alguma idéia sobre isso, também seria ótimo.