Recentemente produzi a Jornada Dev Pro e foi um evento que teve uma aplicação de suporte. Embora funcionalmente não tenha atendido minhas expectativas, o projeto atendeu bem à seu propósito. Agora é hora de migrar essa infra para outro servidor, e aí? Como lidar com backup/restore do mongodb?
Audiência
- Esse post serve a todos que possuem instancias MongoDB em containers ou não, que precisam realizar operações de backup/restore.
- O emprego de Docker narrado nesse post, se dá para executar os utilitários mongodump e mongorestore.
- O que está descrito aqui serve para qualquer tipo de instancia mongodb, em qualquer provider, em qualquer cenário de deployment.
- É imprescindível para que funcione no teu cenário, ter um desktop ou servidor que simultaneamente tenha docker instalado, consiga fazer pull da imagem mongo e tenha acesso às instancias de Origem e Destiono.
Contexto
Eu hoje tenho 2 servidores na hetzner, o principal, oragon01 e o secundário que é vezes melhor que o primeiro chamado oragon02.
O Oragon01 me atende super bem, mas eu preciso de um segundo ambiente para testes, para poder quebrar, recriar, revisitar assuntos, testar novidades e serviu a esse propósito com o Envoy, por exemplo. Que é conteúdo que está chegando agora para a turma do Docker Definitivo.
Ele também hospedou a Jornada que é uma aplicação ASP.NET Core, conteinerizada, que usa Keycloak, MongoDB, Redis entre outras coisas.
Usar banco em containers não é algo que talvez você possa fazer. Mas não se grile com isso. Meu papel é recomendar para que você não faça. Se os dados fossem perdidos, ou houvesse alguma catástrofe, os demais serviços, que estão fora dessa infra, me suportariam para cuidar de todo o fluxo chamando a galera para um outro site, talvez hospedado até em um wordpress ou estático mesmo em HTML + CSS.
A questão é que sou o owner e o responsável, técnico, financeiro e jurídico desse ambiente portanto eu consigo lidar com esses riscos, entendo quando aceitar e quando não.
Agora eu preciso migrar esse projeto do servidor Oragon02 para o Oragon01 para liberar a máquina para meus estudos de Kubernetes e Dapr. E como fazer isso?
Como no Oragon01, eu já tenho uma instancia mongo disponível e com pouco consumo, seria mais inteligente, importar esses menos de 11MB de dados para o mongo antigo em vez de criar uma nova instancia dedicada para o projeto. Dessa forma, copiar os dados mapeados no disco deixou de ser uma opção.
O fluxo
Então, eu precisava rodar um dump a partir do Oragon02 para então realizar o restore em Oragon01.
E é aí que entra o mongodump. Um utilitário de linha de comando que acompanha a instalação do mongodb. Como o nome sugere, ele tem o papel de realizar um dump.
Do outro lado, para o restore temos o utilitário com nome também nada criativo: mongorestore.
Docker
Mais uma vez Docker e o Docker Hub salvam o dia. Foi com ele que fizemos todo o trabalho.
Dump / Backup
O dump foi realizado com mongodump, executado no comando abaixo:
docker run -it -v /mnt/c/path-backup:/backup mongo mongodump --uri="mongodb://usuario:[email protected]:porta/jornada?authSource=admin" --out=/backup/backup-2021-02-23
Entendendo o comando:
- O docker run começa com o -it, para capturar o console e o output do container.
- O volume está usando o mapeamento default do WSL para apontar o resultado para meu disco, no windows. Dentro do container esse path de backup está mapeado como /backup.
- A imagem docker que usamos é a imagem MONGO.
- O resto (mongodump….) na sentença do docker run representa o CMD. Ou seja “mongodump –uri=”mongodb://usuario:[email protected]:porta/jornada?authSource=admin” –out=/backup/backup-2021-02-23” é o CMD do comando docker run.
Usar o WSL direto me ajuda com os escapes dos paths. Isso continua sendo chatinho de tratar mesmo no bash no windows. Em uma experiência com o bash do WSL isso fica mais fácil e mais fluido.
Restore
Já aqui no restore, segui o mesmo desenho, agora usando o utilitário mongorestore.
docker run -it -v /mnt/c/path-backup:/backup mongo mongorestore --uri="mongodb://usuario:[email protected]:porta/jornada?authSource=admin" --db=jornada /backup/backup-2021-02-23/jornada
Considerações
O backup produziu uma pasta com o mesmo nome do database. Eu cheguei a tentar fazer um restore a partir do path de backups, mas o mongorestore reclamou. Então eu usei a pasta com o nome do database, e funcionou perfeitamente.
Conclusões
Eu não precisei instalar nada na minha máquina. E funcionou de forma super fácil. Aproveitei para documentar isso pois pode ajudar a alguém.
A natureza de poucos dados me possibilitou usar meu desktop como ponte. Cenários com grande volume de dados precisam de cuidados, inclusive, sobre latência.
Entender como esse universo funciona fez com que não fosse necessário nenhum tutorial. Apenas a doc foi suficiente para isso.
Enfim: Simples, rápido e fácil.
0 comentários