我们有一个安装在Windows服务器上的MongoDB副本集,具有计划的备份工作。 MongoDB被configuration为使用日记function。
作业通过MongoDB(主服务器db.fsyncLock()
上的脚本运行db.fsyncLock()
,然后执行Kaminario文件系统快照,然后通过脚本运行db.syncUnlock()
。
locking/解锁是分开的,因此不使用相同的连接。
问题是db.fsyncUnlock()
不总是工作,把数据库locking写入,直到通过shell手动解锁。
我们试图在不使用fsyncLock()
情况下执行快照,但是,我们的testing显示:
只恢复单个数据库 – 仅导致数据中有“漏洞”(某些写入线程有未提交的更改,然后是已提交的更改)
恢复整个数据库实例,由于locking和缺失日志,恢复失败,尽pipe日志已启用并存在
而通过fsyncLock()
testing通过。 使用writeConcern
= 2
执行testing,因为我们要确保在MongoDB崩溃的情况下保持持久性。
我的问题是:
一个。 如何在执行快照后保证fsyncUnlock()
成功?
湾 有没有办法保证一致的备份,而不使用fsyncLock()
?
交叉提交DBA.SE。
编辑:
经过进一步的调查,看起来问题是快照挂,而不是解锁。 但是,这仍然不能解释需要locking的fsync。