MongoDB fsyncUnlock不会偶尔在Windows上解锁

我们有一个安装在Windows服务器上的MongoDB副本集,具有计划的备份工作。 MongoDB被configuration为使用日记function。

作业通过MongoDB(主服务器db.fsyncLock()上的脚本运行db.fsyncLock() ,然后执行Kaminario文件系统快照,然后通过脚本运行db.syncUnlock()

locking/解锁是分开的,因此不使用相同的连接。

问题是db.fsyncUnlock()不总是工作,把数据库locking写入,直到通过shell手动解锁。

我们试图在不使用fsyncLock()情况下执行快照,但是,我们的testing显示:

  1. 只恢复单个数据库 – 仅导致数据中有“漏洞”(某些写入线程有未提交的更改,然后是已提交的更改)

  2. 恢复整个数据库实例,由于locking和缺失日志,恢复失败,尽pipe日志已启用并存在

而通过fsyncLock()testing通过。 使用writeConcern = 2执行testing,因为我们要确保在MongoDB崩溃的情况下保持持久性。

我的问题是:

一个。 如何在执行快照后保证fsyncUnlock()成功?

湾 有没有办法保证一致的备份,而不使用fsyncLock()

交叉提交DBA.SE。

编辑:
经过进一步的调查,看起来问题是快照挂,而不是解锁。 但是,这仍然不能解释需要locking的fsync。