MongoDB 应对持续断电的最佳实践

MongoDB 应对持续断电的最佳实践

背景:

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

现在,机器的电源是恒定的,长途客车司机可以随时关闭机器。机器有 2 个分区,第一个是 aufs 用于 /,另一个是 ext4 用于 mongodb /data 目录。但在断电的瞬间,没有数据输入到数据库中。

问题:

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

根据官方文档:http://www.mongodb.org/display/DOCS/Durability+and+Repair,我还是有一些情况无法启动。

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

答案1

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根据需要删除目录。

/data/db/通过不使用--repairpath选项“替换”文件也许可以消除所有这些问题。

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

答案2

首先,请受祝福的文献你链接到

mongod.lock
不要删除 mongod.lock 文件。如果 mongod 无法启动,请使用上述方法之一来纠正这种情况。

删除锁定文件将允许数据库在数据可能损坏时启动。一般来说,您不应该强制数据库在数据可能损坏的情况下启动。在紧急情况下,您可能希望删除锁定文件以从服务器中提取任何数据。如果您曾经手动删除锁定文件并重新启动服务器,则不应认为该服务器“健康”。

按照您链接的受祝福的文档断电后恢复。


MongoDB 并非设计为在容易被随意踢出的数据环境中运行——如果您需要这种耐用性,那么您需要一个专门为两阶段提交和刷新写入磁盘而设计的数据库。

相关内容