Eu faço essas migrações regularmente. Nenhum tempo de inatividade é difícil, mas o tempo de inatividade baixo ou quase imperceptível é possível. A ideia geral é:
- Faça um backup quente do servidor de origem para o novo; essa é uma cópia de trabalho completa enquanto sua origem ainda está funcionando (em um servidor LAMP: execute mysqldump na origem e então transfira todo o sistema de arquivos via rsync para o destino)
- 1 / coloque a origem no modo somente leitura (
shell> mount -remount o,ro /path/to/fs
+mysql> flush tables with read lock
) se o aplicativo manuseá-lo bem ou 2 / exiba uma página de manutenção - Faça um backup incremental a frio , ou seja. re-despeje seu SQL e transfira somente o que foi modificado desde o backup ativo. Com o rsync, o custo depende apenas do número de inodes (arquivos) no seu destino, pois todos eles devem ser testados para modificação; raramente é um problema de largura de banda. Em sites de 1 a 10 GB com inodes de 100 a 500 k, esse backup incremental leva de 1 segundo a 1 minuto em minha experiência.
- Configure um proxy reverso na origem que redirecione todo o tráfego para o novo alvo. Você está pronto e poderá retroceder em alguns segundos se houver um problema (elimine a parte do proxy reverso no servidor de origem). Obviamente você preparou a configuração para que uma simples chamada para
apachectl graceful
seja suficiente para aplicá-la. - Se tudo correr bem, você pode finalizar a migração e atualizar seu DNS (normalmente faço isso 24 horas depois). Em seguida, aguarde o tráfego parar de fluir do seu servidor de origem (geralmente outro 24-48h).
Os detalhes são mais complicados, mas quando é o seu trabalho e você está acostumado, é realmente fácil. Além de saber como executar 'rsync', 'mysqldump' e configurar um proxy reverso com algumas linhas no Apache, está feito.
Muitas vezes você precisa ajustar algumas coisas que são diferentes do servidor de origem e de destino (como o nome do host). Neste caso eu escrevo um pequeno script que automatiza a parte de backup e as 'correções' (usando sed, perl, etc.). Com rsync -a --delete
você pode usar o mesmo script para backups quentes e frios.