Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

Fazer backup de um cluster fragmentado autogerenciado com um despejo de banco de dados

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Passos
  • Próximos passos

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.

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:

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.

Este procedimento requer uma versão do MongoDB que ofereça suporte ao bloqueio de fsync de mongos.

Começando no MongoDB 6.0.11 (também disponível a partir de 5.0.22) os comandos fsync e fsyncUnlock podem ser executados em mongos para bloquear e desbloquear um cluster fragmentado.

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.

Para fazer um backup autogerenciado de um cluster fragmentado, conclua as seguintes etapas:

1

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.

2

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 );
}
3

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 } ]
4

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
5

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 } ]
6

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.

Você pode restaurar um banco de dados a partir de um backup de mongodump utilizando mongorestore.

  • Para restaurar um cluster fragmentado, execute mongorestore em mongos.

  • Para migrar para um conjunto de réplicas ou servidor autônomo, execute mongorestore em mongod.

Importante

Se você deseja restaurar o banco de dados de dados em um cluster fragmentado, você deverá --nsExclude configurar o para excluir o config banco de banco de dados do:

mongorestore --nsExclude='config.*' /data/backup

Para obter mais informações, consulte Fazer backup e restaurar uma implantação autogerenciada com as ferramentas do MongoDB .

Voltar

Usar snapshots