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 dados de um mongodump
backup mongorestore
usando.
Para migrar para um conjunto de réplicas ou servidor autônomo, execute
mongorestore
emmongod
.Para restaurar para um cluster fragmentado, execute
mongorestore
emmongos
com definido para excluir--nsExclude
oconfig
banco de dados:mongorestore --nsExclude='config.*' /data/backup
Importante
mongorestore
não fragmenta coleções restauradas no cluster de destino.
Para garantir que uma coleção restaurada seja fragmentada no cluster de destino, crie uma coleção com o mesmo namespace no cluster de destino e, em seguida, fragmente a coleção antes de executar mongorestore
o. O balanceador eventualmente distribuirá os documentos restaurados entre os shards do cluster de destino.
Para obter mais informações, consulte Fazer backup e restaurar uma implantação autogerenciada com as ferramentas do MongoDB .