
Uma migração de produção do DigitalOcean para um servidor dedicado da Hetzner foi realizada com sucesso, gerenciando 248 GB de dados MySQL em 30 bancos de dados, 34 sites Nginx, GitLab EE, Neo4j e tráfego de aplicativos móveis ao vivo, tudo isso sem tempo de inatividade.
**Motivos da Migração**
Nos últimos anos, operar uma empresa de software na Turquia se tornou cada vez mais caro. A inflação disparada e a forte desvalorização da Lira turca em relação ao dólar americano transformaram os custos de infraestrutura em um fardo significativo. Uma fatura que era suportável há dois anos agora se torna insustentável com a multiplicação da taxa de câmbio.
O custo mensal de $1,432 pelo DigitalOcean para um droplet com 192GB de RAM e 32 vCPUs não fazia mais sentido em termos de custo-benefício. A descoberta do servidor AX162-R da Hetzner foi um divisor de águas. O novo servidor oferecia desempenho superior por apenas $233 mensais, resultando em uma economia anual de $14,388.
**O Que Estávamos Executando**
O projeto não era trivial, abrangendo:
- 30 bancos de dados MySQL (248 GB de dados)
- 34 hosts virtuais Nginx em múltiplos domínios
- GitLab EE (backup de 42 GB)
- Banco de dados gráfico Neo4j (30 GB)
- Supervisores gerenciando diversos trabalhadores em segundo plano
- Várias aplicações móveis servindo centenas de milhares de usuários.
A migração também foi uma oportunidade para atualizar o sistema operacional de CentOS 7, que estava fora de suporte, para AlmaLinux 9.7, uma distribuição compatível com RHEL 9.
**Estratégia: Zero Downtime**
O plano de migração foi cuidadosamente elaborado em seis fases, evitando a abordagem ingênua de simplesmente alterar o DNS e reiniciar tudo.
Na Fase 1, instalamos todo o stack no novo servidor, garantindo que as configurações fossem idênticas ao antigo. A transferência dos arquivos web foi realizada usando rsync, enquanto a replicação do MySQL foi feita ao vivo para evitar qualquer interrupção. Reduzimos o TTL do DNS e configuramos o servidor antigo como um proxy reverso durante a transição, garantindo que os usuários não percebessem nenhuma interrupção.
**Migração do MySQL**
A migração do MySQL foi a parte mais complexa. Utilizamos mydumper para exportar os dados de forma paralela, reduzindo o tempo de migração de dias para horas. Após a transferência dos dados, a nova configuração do MySQL 8.0 trouxe melhorias significativas de desempenho, embora tenha apresentado um desafio com a estrutura da tabela mysql.user, que exigiu ajustes.
Uma vez configurada a replicação, verificamos todas as permissões de usuário do MySQL, garantindo que privilégios indesejados não permitissem gravações indevidas no servidor de replicação.
**Preparação do DNS e Proxy Reverso**
O gerenciamento de DNS foi feito através da API do DigitalOcean, ajustando os registros sem afetar os registros de e-mail. Um script em Python facilitou a conversão das configurações do Nginx do servidor antigo para um proxy reverso, permitindo uma transição suave durante a propagação do DNS.
**Resultados Finais**
Após a migração, a economia foi substancial: de $1,432 mensais para $233, além de uma máquina mais poderosa. O tempo total para a migração foi de aproximadamente 24 horas, sem impacto para os usuários.
**Considerações Finais**
A replicação do MySQL foi crucial para a migração sem downtime. Além disso, automatizar processos e verificar permissões de usuários são práticas recomendadas que garantiram o sucesso da migração.
Todos os scripts utilizados estão disponíveis no GitHub, permitindo que outros sigam o mesmo caminho eficiente e econômico.
Confira os últimos vídeos publicados no canal