MongoDB fsyncUnlock não irá desbloquear ocasionalmente no Windows

1

Temos um conjunto de réplicas do MongoDB instalado em servidores Windows, com uma tarefa de backup agendada. O MongoDB está configurado para usar o registro no diário.

O trabalho executa db.fsyncLock() via script no MongoDB (servidor principal), executa um instantâneo do sistema de arquivos Kaminario e executa db.syncUnlock() via script.

O bloqueio / desbloqueio são separados, portanto, não usam a mesma conexão.

O problema é que o db.fsyncUnlock() nem sempre funciona, deixando o banco de dados bloqueado para gravações até que seja manualmente desbloqueado via shell.

Tentamos realizar snapshots sem usar fsyncLock() , no entanto, nossos testes mostraram que:

  1. Restaurando um único banco de dados, resultando em dados com "buracos" (alguns dos tópicos de gravação tiveram alterações não confirmadas seguidas por alterações confirmadas)

  2. Restaurando toda a instância do banco de dados, a restauração falhou devido a um bloqueio e um diário ausente, apesar de o diário estar ativado e presente

Considerando que, com fsyncLock() , os testes foram aprovados. Os testes foram realizados com writeConcern = 2 , pois queremos garantir a persistência em caso de falha no MongoDB.


Minhas perguntas são:

a. Como garantir o sucesso do fsyncUnlock() após realizar o snapshot?

b. Existe alguma maneira de garantir um backup consistente sem usar fsyncLock() ?


Cruzou em DBA.SE .


Editar:
Após uma investigação mais aprofundada, parece que o problema foi com o snapshot pendurado, não o desbloqueio. No entanto, isso ainda não explica o fsync que requer o bloqueio.

    
por Danny 01.07.2015 / 17:08

0 respostas