Menu Docs

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

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

Nesta página

  • Visão geral
  • Considerações
  • Passos

Este documento descreve um procedimento para fazer backup de todos os componentes de um cluster fragmentado. Este procedimento usa snapshots do sistema de arquivos para capturar uma cópia da instância mongod .

Importante

Para fazer backup de um cluster fragmentado, você deve interromper todas as gravações no cluster.

Para obter mais informações sobre backups no MongoDB e backups de clusters fragmentados em particular, consulte Métodos de backup do MongoDB e Backup e restauração de clusters fragmentados.

Para fazer um backup com um snapshot do sistema de arquivos, primeiro você deve parar o balancer, parar as gravações e parar quaisquer operações de transformação de esquema no cluster.

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

Para mecanismos de armazenamento criptografado que usam o modo de criptografia AES256-GCM, AES256-GCM exige que cada processo use um valor de bloco de contador exclusivo com a chave.

Para mecanismo de armazenamento criptografado configurado com cifra AES256-GCM:

  • Restauração a partir de um hot backup
    A partir da versão 4.2, se você restaurar a partir de arquivos obtidos via backup "quente" (ou seja, o mongod está em execução), o MongoDB pode detectar chaves "sujas" na inicialização e rolar automaticamente a chave do banco de dados para evitar a reutilização IV (Initialization Vector).
  • Restaurando a partir do Cold Backup

    No entanto, se você restaurar a partir de arquivos obtidos via backup "frio" (ou seja, o mongod não está em execução), o MongoDB não poderá detectar chaves "sujas" na inicialização, e a reutilização do IV anulará as garantias de confidencialidade e integridade.

    A partir do 4,2, para evitar a reutilização das chaves após restaurar de um snapshot de sistema de arquivos frio, o MongoDB adiciona uma nova opção de linha de comando --eseDatabaseKeyRollover. Quando iniciada com a opção --eseDatabaseKeyRollover, a instância mongod rola as chaves de banco de dados configuradas com AES256-GCM cifra e sai.

Dica

  • Em geral, se estiver usando backups baseados em sistema de arquivos para o MongoDB Enterprise 4.2+, use o recurso de backup "hot", se possível.

  • Para as versões 4.0 e anteriores do MongoDB Enterprise, se você usar AES256-GCM modo de criptografia, não faça cópias de seus arquivos de dados ou restaure a partir de snapshots do sistema de arquivos ("quente" ou "frio").

É essencial que você interrompa o balancer antes de capturar um backup.

Se o balanceador estiver ativo enquanto você captura backups, os artefatos de backup poderão estar incompletos ou ter dados duplicados, pois os blocos podem migrar durante a gravação de backups.

Neste procedimento, você interromperá o balancer de cluster e fará um backup do banco de dados de configuração e, em seguida, fará backups de cada shard no cluster usando uma ferramenta de snapshot do sistema de arquivos. Se você precisar de um snapshot exato do sistema de arquivos, precisará interromper todas as gravações antes de tirar os snapshots do sistema de arquivos; caso contrário, o snapshot apenas aproximará um momento no tempo.

Para fazer backup de um cluster fragmentado, você deve usar o comando fsync ou o método db.fsyncLock() para interromper as gravações no cluster. Isso garante que os arquivos de dados não sejam alterados durante o backup.

Se a sua implementação depender do Elastic Block Storage (EBS) da Amazon com RAID configurado em sua instância, será impossível obter um estado consistente em todos os discos usando a ferramenta de instantâneo da plataforma. Como alternativa, você pode fazer um dos seguintes procedimentos:

Este procedimento requer uma versão do MongoDB que suporte o bloqueio de sincronização do mongos.

A partir do MongoDB 7.1 (também disponível a partir de 7.0.2, 6.0.11 e 5.0.22) o fsync e Os comandos do fsyncUnlock podem ser executados no mongos para realizar o bloqueio e desbloquear um cluster fragmentado.

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

1

Migrações de chunk, refragmentação e operações de migração de esquema podem causar inconsistências nos backups. Para encontrar um bom horário para executar um backup, monitore o uso do aplicativo e do banco de dados e encontre um horário em que é improvável que essas operações ocorram.

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

2

Para evitar que migrações de chunks interrompam o backup, use o método sh.stopBalancer() para parar 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

As gravações no banco de dados podem causar inconsistências de backup. Bloqueie seu cluster fragmentado para proteger o banco de dados contra gravações.

Para bloquear um cluster fragmentado, use o método db.fsyncLock() :

db.getSiblingDB("admin").fsyncLock()

Execute o seguinte pipeline de agregação no mongos e no mongod primário dos servidores de configuração. Para confirmar a trava, certifique-se de que o campo fysncLocked retorne true e o campo fsyncUnlocked retorne false.

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

Observação

O backup de um servidor de configuração faz backup dos metadados do cluster fragmentado. Você só precisa fazer backup de um servidor de configuração, pois todos eles contêm os mesmos dados. Execute esta etapa no membro principal do CSRS.

Para criar um snapshot do sistema de arquivos do servidor de configuração, siga o procedimento em Criar um snapshot.

5

Execute um snapshot do sistema de arquivos no membro principal de cada shard, usando o procedimento encontrado em Backup e restauração com snapshots do sistema de arquivos.

6

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()

Execute o seguinte pipeline de agregação no mongos e no mongod primário dos servidores de configuração. Para confirmar o desbloqueio, certifique-se de que o campo fysncLocked retorne false e o campo fsyncUnlocked retorne true.

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

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.

← Backup e restauração de clusters fragmentados