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.

A partir do MongoDB 7.0.2, (também disponível a partir de 6.0.11 e 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