MongoDB针对持续电源故障的最佳实践

Modified on: Wed, 16 Oct 2019 21:20:02 +0800

背景:

我在移动教练的一台机器上有一些AIO应用程序机器(运行带有rails + mongodb + chromium的ubuntu)来显示信息,偶尔用户可能会将某些数据中的chuck更改为mongodb。

现在,机器的电源是恒定的,教练司机可以随时关闭机器。机器有2个分区,首先是aufs for /,另一个是ext4 for mongodb / data目录。但是在停电的瞬间,没有数据输入到数据库中。

问题:

每次机器因断电而重启(每隔几个小时),mongodb会在其目录中留下一个mongod.lock文件。在/etc/rd.local中我曾尝试在每次启动时删除锁定文件,但有时仍然拒绝启动。这导致我的应用程序无法启动。

根据官方文档:http://www.mongodb.org/显示/ DOCS /耐久性+和+修复,我仍有一些机会无法启动。

在上述常规电源故障情况下运行mongodb的最佳做法是什么?没有投入额外的硬件。

作者:c2h2

最佳答案

所有mongod.lock文件都告诉你,数据库有一个不干净的关闭,即管理员没有停止等等。

当自己运行--repair操作时,mongod将尝试读取现有文件,写入新文件然后交换它们。完成后,它应该删除mongod.lock文件,并启用数据库。

如果与--repairpath参数一起使用,则修复的字段将被放置在指定的修复路径中,并且可能不会删除锁定文件,因为原始数据文件尚未被删除已修复,而是使用修复的数据和指定的路径写入新文件。

使用--repairpath

的可能流程

  1. 服务启动,日志消息通知您锁定问题,退出。

    mongod --dbpath=/data/db
    
  2. 您运行与此类似的修复命令:

    mongod --dbpath=/data/db --repair --repairpath=/data/db2
    

    等待它完成。

  3. 完成后,从修复的文件路径启动mongod:

    mongod --dbpath=/data/db2
    
  4. 确认工作后,如果需要,可以删除/data/db目录。

  5. 醇>

    所有这一切都可以通过不使用--repairpath选项“替换”/data/db/中的文件来消除。

    关于恢复,请查看日记 - 这会创建一个操作每100毫秒刷新一次持久磁盘的日志,当mongod启动并检测到未应用的日志文件并应用它们时,删除锁定文件,然后启动服务器。

作者:,Mike Fiedler

相关问答

添加新评论