Preparação para o upgrade do Postgres
- Avaliação de riscos: listar os riscos que podem surgir durante o processo de upgrade e ordená-los por importância.
- Busca de soluções para os riscos: considerar soluções que eliminem completamente os riscos ou que permitam distribuí-los ao longo do tempo.
- Atualização da lista de riscos: atualizar a lista quando novos riscos forem descobertos durante o andamento do projeto.
Sobre monitoramento e métricas
- Monitoramento do sistema: usar ferramentas robustas para acompanhar a saúde do banco de dados e do sistema.
- Observação das métricas principais: monitorar métricas importantes como transaction ID, uso de CPU, sessões em espera, latência de queries e latência de resposta da API.
Opções de upgrade do Postgres
Upgrade in-place (inadequado para upgrade com zero downtime)
- Limitações do upgrade in-place: ao executar no AWS RDS, é necessário reiniciar o banco de dados, e o tempo necessário varia conforme o volume de dados.
Upgrade baseado em replicação
- Escolha do upgrade baseado em replicação: etapas de migração graduais, teste do novo banco com carga de trabalho e dados reais, e maior controle sobre o upgrade.
- Configuração dos bancos de origem e destino: configurar replication slots e definir
wal_level como logical.
Escolha do método de replicação de tabelas
Replicação de tabelas "pequenas"
- Replicação de tabelas pequenas: é possível replicá-las com uma simples adição e atualização da assinatura.
Tabelas grandes, somente de inserção
- Replicação de tabelas somente de inserção: definir a opção
copy_data como false para replicar apenas mudanças futuras e depois preencher os dados antigos a partir de um backup.
Tabelas grandes com muitas atualizações
- Replicação de tabelas grandes com muitas atualizações: reduzir o tamanho da tabela, executar
VACUUM e considerar particionamento.
Verificação do estado da replicação
- Monitoramento do estado da replicação: verificar o estado da replicação por meio da tabela de sistema
pg_subscription_rel; recomenda-se replicar uma tabela por vez.
Interrupção da replicação
- Como interromper a replicação: se necessário, é possível interromper a replicação de tabelas e reverter com uma atualização da assinatura.
Cuidados com a migração de replication slots
- Problema na migração de replication slots: o LSN de um replication slot é exclusivo do banco de dados principal, portanto não pode ser copiado diretamente para o novo banco.
Finalizando a migração
- Validação da consistência das tabelas: confirmar que a contagem de linhas das tabelas coincide entre os dois bancos e, se necessário, validar a consistência dos dados com amostragem aleatória.
Mudanças no nível da aplicação
- Alteração da conexão com o banco: mudar a aplicação para se conectar ao novo banco de dados e definir uma estratégia de transição de tráfego.
Observações adicionais sobre sequences
- Sincronização de sequences: como os valores de sequence não são sincronizados durante a replicação, é preciso ajustá-los manualmente.
Checklist final
- Verificação final: consistência das tabelas, estado da assinatura, consistência do schema, tamanho do banco de dados, adição de réplicas, reconstrução de índices, testes de performance, avaliação de riscos e ensaio em ambiente de staging.
Troca final
- Execução da troca final: replicar as tabelas no período da noite, praticar várias vezes em ambiente de staging e então fazer a verificação final e a troca do flag.
Opinião do GN⁺
- Importância: a Knock concluiu com sucesso o processo complexo de upgrade do Postgres 11.9 para 15.3 com zero downtime. Isso representa um marco importante para gestão de bancos de dados e disponibilidade de serviço.
- Interessante: a abordagem de upgrade baseada em replicação permite uma transição suave para o novo banco de dados, algo que pode atrair grande interesse entre administradores de banco e a comunidade técnica.
- Curiosidade: o processo de upgrade da Knock mostra um excelente exemplo de como superar desafios técnicos complexos com gestão sistemática de riscos e resolução de problemas.
1 comentários
Comentários do Hacker News
Existe uma abordagem melhor do que copiar tabelas grandes.
A abordagem apresentada aqui é interessante e bem documentada, mas não concorda com a frase "clientes modernos esperam 100% de disponibilidade".
A AWS agora oferece suporte a implantações blue-green.
Foi criada uma ferramenta que automatiza a maior parte dos problemas.
Na hava.io, está em andamento uma migração do AWS RDS PostgreSQL 11.13 para 15.5.
pglogical.Há ceticismo quanto à afirmação de que qualquer downtime seria inaceitável para o serviço da Knock.
Há surpresa pelo fato de não ser possível inicializar a replicação a partir de um backup.
Pergunta-se se haveria interesse em uma ferramenta all-in-one que faz atualização de Postgres com zero downtime apenas informando as credenciais do banco de dados.
A parte sobre uso de sequences é interessante.
Em tom de brincadeira, diz-se que problemas em sistemas distribuídos podem ser resolvidos com um apropriado
sleep(1000).