Definição
db.fsyncLock()Limpa todas as escritas pendentes da camada de armazenamento para o disco e bloqueia o servidor para evitar escritas adicionais até que a trava seja liberada.
Começando no MongoDB 7.0.2 (também disponível a partir de 6.0.11 e 5.0.22) os métodos
db.fsyncLock()edb.fsyncUnlock()podem ser executados emmongospara bloquear e desbloquear um cluster fragmentado.Importante
Método mongosh
Esta página documenta um método.
mongoshEsta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.Para o comando do banco de dados, consulte o comando
fsync.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Os servidores mantêm uma contagem de bloqueio do fsync . O
fsyncLock()método aumenta a contagem de bloqueio , e o método a diminui. Para destravar escritasfsyncUnlock()fsyncUnlock()em um servidor ou cluster, chame o método até que a contagem de bloqueio chegue a zero.db.fsyncLock()tem a sintaxe:db.fsyncLock() A operação retorna um documento com os seguintes campos:
CampoDescriçãoinfoInformações sobre o status da operação.
lockCountNúmero de travas atualmente na instância.
seeAlsoLink para a documentação do comando
fsync.okO código de status.
db.fsyncLock()é um comando administrativo. Use esse método para bloqueio um servidor ou cluster antes das operações de backup.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
Importante
Este comando não é aceito em clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
db.fsyncLock() garante que os arquivos de dados sejam seguros para copiar com utilitários de cópia de segurança de baixo nível,cp como, scp tarou. Um iniciado usando os arquivos copiados contém dados escritos pelo usuário que são indistinguíveis dos dados escritos pelo usuário mongod no mongod bloqueado.
Os arquivos de dados de um mongod bloqueado podem mudar devido a operações como sincronizações do registro no diário ou snapshots do WiredTiger. Embora isso não tenha efeito sobre os dados lógicos (por exemplo dados acessados pelos clientes), alguns utilidades de backup podem detectar essas alterações e emitir avisos ou não funcionar com os erros. Para obter mais informações sobre MongoDB- utilidades e procedimentos de backup recomendados, consulte Métodos de backup para um sistema autogerenciado.
O Fsync bloqueia após falhas
Os bloqueios do Fsync são executados na primária em um conjunto de réplicas ou cluster fragmentado.
Se o primário ficar inativo ou ficar inacessível devido a problemas de rede, o cluster elege um novo primário dentre os secundários disponíveis. Se um primário com um bloqueio fsync ficar inativo, o novo primário não reterá o bloqueio fsync e poderá lidar com operações de gravação. Quando as eleições ocorrem durante as operações de backup, o backup resultante pode ser inconsistente ou inutilizável.
Para se recuperar da queda primária:
Execute o método
db.fsyncUnlock()até que a contagem de bloqueio atinja zero para liberar a trava em todos os nós.Execute o comando para restabelecer o bloqueio do fsync no
db.fsyncLock()cluster.Reinicie o backup.
Além disso, as travas de sincronização são persistentes. Quando o primário antigo ficar online de novo, você precisará executar o comando db.fsyncUnlock() para liberar a trava no nó.
Exemplo
A seguinte operação db.fsyncLock() executa:
db.fsyncLock()
A operação retorna o seguinte documento de status que inclui lockCount:
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(1), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
Se você executar novamente, a operação db.fsyncLock() incrementará:lockCount
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(2), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
Para desbloquear a instância para escritas, execute db.fsyncUnlock() duas vezes para reduzir lockCount para 0.