背景:
我有一些 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
:
服务启动,日志消息通知您锁问题,退出。
mongod --dbpath=/data/db
运行类似这样的修复命令:
mongod --dbpath=/data/db --repair --repairpath=/data/db2
并等待其完成。
完成后,从修复的文件路径启动 mongod:
mongod --dbpath=/data/db2
一旦确认工作正常,您可以
/data/db
根据需要删除目录。
/data/db/
通过不使用--repairpath选项“替换”文件也许可以消除所有这些问题。
关于恢复,请查看日记- 这将创建一个操作日志,每 100 毫秒刷新到持久磁盘,当 mongod 启动并检测到未应用的日志文件并应用它们时,删除锁文件,并启动服务器。
答案2
首先,请读受祝福的文献你链接到:
mongod.lock
不要删除 mongod.lock 文件。如果 mongod 无法启动,请使用上述方法之一来纠正这种情况。删除锁定文件将允许数据库在数据可能损坏时启动。一般来说,您不应该强制数据库在数据可能损坏的情况下启动。在紧急情况下,您可能希望删除锁定文件以从服务器中提取任何数据。如果您曾经手动删除锁定文件并重新启动服务器,则不应认为该服务器“健康”。
按照您链接的受祝福的文档断电后恢复。
MongoDB 并非设计为在容易被随意踢出的数据环境中运行——如果您需要这种耐用性,那么您需要一个专门为两阶段提交和刷新写入磁盘而设计的数据库。