Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Faça backup de um cluster fragmentado com dumps de banco de dado

Para fazer um backup consistente de um cluster fragmentado com mongodump, você deve primeiro parar o balancer, parar gravações e parar quaisquer operações de transformação de esquema no cluster. Isso garante que o cluster permaneça em um estado consistente durante o backup.

O MongoDB fornece operações de backup e restauração que podem ser executadas com o balancer e as transações em execução por meio dos seguintes serviços:

  • MongoDB Atlas

  • MongoDB Cloud Manager

  • MongoDB Ops Manager

Esta tarefa utiliza 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 suporte o bloqueio de sincronização do mongos.

A partir do MongoDB 5.0.22 os comandos fsync e fsyncUnlock podem ser executados em mongos para realizar o bloqueio e desbloquear um cluster fragmentado.

Para executar estas tarefas, o usuário deve ter a autorização do fsync , que permite ao usuário executar os comandos fsync e fsyncUnlock .

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

1

Para encontrar um bom horário para executar um backup, monitore o uso do aplicativo e do banco de dados para encontrar um horário em que é improvável que as operações de migração de blocos, refragmentação e transformação de esquema ocorram, pois podem causar um backup inconsistente.

Para obter mais informações, consulte Janela de agendamento de backup para clusters fragmentados.

2

Para evitar que as migrações de chunks afetem o backup, conecte-se a mongos e use o método sh.stopBalancer() para interromper o balancer:

sh.stopBalancer()

Se uma rodada de balanceamento estiver em andamento, a operação aguardará a conclusão do balanceamento.

Para confirmar que o balanceador está parado, use o método sh.getBalancerState() :

sh.getBalancerState()
false

O comando retorna false quando o balanceador está parado.

3

O cluster fragmentado deve permanecer bloqueado durante o processo de backup para proteger o banco de dados contra gravações, o que pode causar inconsistências no backup.

Para bloquear um cluster fragmentado, conecte-se a mongos e use 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 garanta que todos os shards estejam bloqueados:

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } },
{ fsyncLock: true }
] } }],
"unlocked": [
{ $match: { fsyncLock: { $exists: false } } }
]
} },
{ $project: {
"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
} }
] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
4

Para fazer o backup do cluster fragmentado, use mongodump para se conectar ao 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 primary dos servidores de configuração, execute o seguinte pipeline de agregação e garanta que todos os shards estejam desbloqueados:

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } },
{ fsyncLock: 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 balancer, 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 mongodump usando mongorestore.

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

  • Para migrar para um conjunto de réplica ou servidor independente, execute mongorestore contra mongod.

Para mais informações, consulte Fazer Backup e Restaurar com as Ferramentas do MongoDB.

← Faça backup de um cluster fragmentado com snapshots do sistema de arquivos