Todos os dados despejados mongodump
devem ser lidos na memória pelo servidor MongoDB. Também vale a pena notar que mongodump
faz backup de dados e definições de índice; o tempo para restaurar também pode ser significativamente maior em comparação com outras abordagens, pois mongorestore
será necessário recriar quaisquer índices secundários após o carregamento dos dados.
Conforme observado na documentação do MongoDB , mongodump
é útil para fazer backup e restaurar pequenas implantações, mas não é ideal para capturar backups completos de sistemas maiores:
Quando conectado a uma instância do MongoDB, o mongodump pode afetar adversamente o desempenho do mongod. Se seus dados forem maiores que a memória do sistema, as consultas empurrarão o conjunto de trabalho para fora da memória, causando falhas na página.
Um servidor autônomo limita suas opções de backup se você também deseja manter sua implantação disponível enquanto faz um backup.
Aqui estão algumas abordagens sugeridas na ordem do mais ao menos recomendado:
Abordagem 1: use um serviço de backup em nuvem
Para a solução mais fácil de curto prazo, consideraria usar um serviço de backup em nuvem comercial como o MongoDB Cloud Manager . O MongoDB Cloud Manager fornece backup contínuo com instantâneos agendados e uma política de retenção (consulte Preparativos para backup para obter mais informações). Um serviço de nuvem também evita que você precise implantar servidores / infraestrutura extras; portanto, mesmo se você planeja fazê-lo no futuro, essa é uma solução útil a curto prazo.
A abordagem geral seria:
Como um benefício adicional, o Cloud Manager também inclui um agente de monitoramento que pode capturar o histórico de métricas da sua implantação e permitir que você configure alertas.
Abordagem 2: converta sua implantação em um conjunto de réplicas e backup de um secundário oculto
Essa abordagem requer o provisionamento de alguma infraestrutura extra, mas descarrega o impacto do backup do servidor principal. Normalmente, os conjuntos de réplicas são provisionados com pelo menos três membros para alta disponibilidade e failover automático, mas se seu único objetivo for backup, você poderá usar uma configuração menos ideal para dois servidores.
A abordagem geral seria:
- Provisione um segundo servidor que será usado para backup
- Converta seu servidor independente em um conjunto de réplicas .
- Adicione seu servidor de backup como um secundário oculto com uma prioridade de 0 (nunca se tornará primário) e 0 votos.
- Use um dos métodos de backup suportados para fazer backups no seu secundário oculto. Os métodos de backup estão listados em ordem geral de recomendação:
mongod
é preferível capturar instantâneos do sistema de arquivos (se suportado pela sua configuração) ou cópia de arquivo (supondo que você pare ) mongodump
.
- (idealmente) adicione outro secundário com dados, se desejar os benefícios de alta disponibilidade e failover de uma configuração de conjunto de réplicas.
Abordagem nº 3: use instantâneos do sistema de arquivos (se disponíveis e apropriados)
Uma estratégia de backup menos impactante que a atual mongodump
seria usar instantâneos do sistema de arquivos , supondo que você tenha um sistema de arquivos compatível com instantâneos (e todos os seus dados e arquivos de diário estejam em um único volume para que você possa obter um instantâneo consistente de uma execução mongod
). A vantagem dos instantâneos do sistema de arquivos é que todos os dados não precisam ser lidos na memória mongod
, no entanto, os instantâneos ainda podem ter impacto (principalmente ao criar o instantâneo inicial em um sistema ocupado). Os instantâneos sucessivos são mais eficientes e menos impactantes, mas ainda não são uma solução de backup completa, pois os instantâneos são locais no servidor (e você só tem um autônomo no momento).
Ressalvas
As abordagens 1 e 2 envolvem a ativação da replicação para facilitar os backups. A replicação adicionará algumas E / S locais adicionais ao servidor principal, pois todas as operações de gravação são anotadas em uma coleção limitada especial chamada oplog (log de operações) .
Você mencionou uma provável necessidade de sharding no futuro, mas antes disso, eu isolaria sua carga de trabalho do MongoDB dos outros processos que compartilham o mesmo servidor. Se você puder alterar sua estratégia de backup para algo mais eficiente do que mongodump
remover a contenção de recursos e capturar um histórico de métricas de linha de base para revisão ... talvez descubra que o sharding ainda não é necessário.