Fazer backup de um cluster fragmentado autogerenciado com um despejo de banco de dados
A partir de MongoDB 7.1 (também disponível a partir de 7.0.2, 6.0.11 e 5.0.22), você pode fazer backup de dados em clusters fragmentados usando mongodump
.
Sobre esta tarefa
mongodump
é um utilitário que cria uma exportação binária do conteúdo do banco de dados. Você pode usar o utilitário mongodump
para fazer backups autogerenciados de um cluster fragmentado.
Para fazer backup de um cluster fragmentado com mongodump
, você deve parar o balanceador, parar gravações e interromper quaisquer operações de transformação de esquema no cluster. Isso ajuda a reduzir a probabilidade de inconsistências no backup.
O MongoDB fornece operações de backup e restauração que podem ser executadas com o balanceador e as transações em execução por meio dos seguintes serviços:
Antes de começar
Essa tarefa usa mongodump
para fazer backup de um cluster fragmentado. Certifique-se de ter um cluster em execução que contenha dados em coleções fragmentadas.
Compatibilidade de versão
Este procedimento requer uma versão do MongoDB que ofereça suporte ao bloqueio de fsync de mongos
.
A partir de MongoDB 7.1 (também disponível a partir de 7.0.2, 6.0.11 e 5.0.22) os comandos fsync
e fsyncUnlock
podem ser executados no mongos
para bloquear e desbloquear um cluster fragmentado.
Privilégios de administrador
Para usar esse procedimento, o usuário do MongoDB deve ter a autorização fsync
, que pode estar disponível por meio de uma função personalizada ou usando a função hostManager
integrada.
Com essa autorização, você pode executar os comandos fsync
e fsyncUnlock
.
Passos
Para fazer um backup autogerenciado de um cluster fragmentado, conclua as seguintes etapas:
Encontre uma janela de backup
Para encontrar um bom momento para executar um backup, monitore o uso do aplicativo e do banco de dados para encontrar um horário em que seja improvável que migrações de partes, refragmentação e operações de transformação de esquema ocorram, pois podem causar um backup inconsistente.
Observação
Essas etapas só podem produzir um backup consistente se forem seguidas exatamente e se nenhuma operação estiver em andamento quando você começar.
Para obter mais informações, consulte Janela de agendamento de backup para um cluster fragmentado autogerenciado.
Pare o balanceador
Para evitar que migrações de partes atrapalhem o backup, conecte-se a mongos
e use o método sh.stopBalancer()
para interromper o balanceador:
sh.stopBalancer()
Se uma rodada de balanceamento estiver em andamento, a operação aguarda a conclusão do balanceamento.
Para verificar se o balanceador está parado, use o método sh.getBalancerState()
:
use config while( sh.isBalancerRunning().mode != "off" ) { print( "Waiting for Balancer to stop..." ); sleep( 1000 ); }
Bloquear o cluster
O cluster fragmentado deve permanecer bloqueado durante o processo de backup para proteger o banco de dados de gravações, o que pode causar inconsistências no backup.
Para bloquear um cluster fragmentado, conecte mongos
e utilize o método db.fsyncLock()
:
db.getSiblingDB("admin").fsyncLock()
Para confirmar o bloqueio, no mongos
e no mongod
primário dos servidores de configuração, execute o seguinte pipeline de agregação e certifique-se de que todos os fragmentos estejam bloqueados:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
Fazer backup
Para fazer backup do cluster fragmentado, use mongodump
para se conectar a mongos
e executar o backup:
mongodump \ --host mongos.example.net \ --port 27017 \ --username user \ --password "passwd" \ --out /opt/backups/example-cluster-1
Desbloquear o cluster
Após a conclusão do backup, você poderá desbloquear o cluster para permitir que as gravações sejam retomadas.
Para desbloquear o cluster, use o método db.fsyncUnlock()
:
db.getSibling("admin").fsyncUnlock()
Para confirmar o desbloqueio, no mongos
e no mongod
primário dos servidores de configuração, execute o seguinte pipeline de agregação e certifique-se de que todos os fragmentos estejam desbloqueados:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: false }, { fsyncUnlocked: true } ]
Reinicie o balanceador
Para reiniciar o balanceador, use o método sh.startBalancer()
:
sh.startBalancer()
Para confirmar que o balanceador está em execução, use o método sh.getBalancerState()
:
sh.getBalancerState()
true
O comando retorna true
quando o balanceador está em execução.
Próximos passos
Você pode restaurar um banco de dados a partir de um backup de mongodump
utilizando mongorestore
.
Para restaurar um cluster fragmentado, execute
mongorestore
emmongos
.Para migrar para um conjunto de réplicas ou servidor autônomo, execute
mongorestore
emmongod
.
Importante
Se você deseja restaurar o banco de dados de dados em um cluster fragmentado, você deverá configurar o --nsExclude
para excluir o banco de banco de dados do config
:
mongorestore --nsExclude='config.*' /data/backup
Para obter mais informações, consulte Fazer backup e restaurar uma implantação autogerenciada com as ferramentas do MongoDB .