![MongoDB fsyncUnlock 在 Windows 上偶尔无法解锁](https://linux22.com/image/661566/MongoDB%20fsyncUnlock%20%E5%9C%A8%20Windows%20%E4%B8%8A%E5%81%B6%E5%B0%94%E6%97%A0%E6%B3%95%E8%A7%A3%E9%94%81.png)
我们在 Windows 服务器上安装了 MongoDB 副本集,并安排了备份作业。MongoDB 配置为使用日志记录。
该作业db.fsyncLock()
通过 MongoDB(主服务器)上的脚本运行,然后执行 Kaminario 文件系统快照,然后db.syncUnlock()
通过脚本运行。
锁定/解锁是分开的,因此不使用相同的连接。
问题是它db.fsyncUnlock()
并不总是有效,数据库会一直处于锁定状态,直到通过 shell 手动解锁。
我们尝试在不使用的情况下执行快照fsyncLock()
,但我们的测试表明:
仅恢复单个数据库会导致数据出现“漏洞”(一些写入线程有未提交的更改,随后又有已提交的更改)
恢复整个数据库实例时,由于锁定和缺少日志,尽管日志已启用且存在,但恢复仍失败
然而,fsyncLock()
测试通过了。测试是用writeConcern
=执行的2
,因为我们希望确保在 MongoDB 崩溃的情况下能够持久。
我的问题是:
fsyncUnlock()
a.执行快照后如何保证成功?
b. 有没有办法可以在不使用的情况下保证一致的备份fsyncLock()
?
交叉提交在DBA.SE上。
编辑:
经过进一步调查,问题似乎出在快照挂起上,而不是解锁上。但是,这仍然无法解释 fsync 需要锁定的原因。