同时mongo实例不再可能?

时间:2013-09-05 12:57:59

标签: mongodb centos6

我有一个生产和开发服务器。生产服务器正在运行mongod,我的开发服务器正在运行2个实例: 1 - 作为生产的“奴隶”(使用replicaSet)。这会复制我的数据并允许更轻松的备份。 2 - “主人”。我的开发集合(无法使用slave实例,关于slaveOkay等)。

他们都有自己的pid文件,数据文件夹,一切。这项工作一年多来一直没有太多问题。

不幸的是,自上一版本以来,无论何时我启动一个实例,它都会终止另一个实例(prod slave<> dev master)。无论哪一个先开始,另一个总是停止。

任何人都知道为什么mongo会突然出现这种情况并解决问题? 由于各种原因,使用主实例来容纳开发集合并不是我的选择。

希望这会让事情变得更加明确:

production writes --> production [master] --[replicaSet]--> development instance 1 [slave]
development writes --> development instance 2 [master]

谢谢!

1 个答案:

答案 0 :(得分:0)

为后代回答我自己的问题:

似乎mongo版本2.4.6的init脚本具有独特性。它使用以下表达式确定PID文件:

PIDFILE=`awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE"`

这将在等号前后查找带有空格的dbpath。 由于默认配置文件包含“dbpath = / var / lib / mongo”,因此该表达式的结果为空。 我想象init脚本 - 没有给出任何特定的.pid文件 - 只使用默认的.pid文件位置。通常(有一个实例)这没有任何后果。在我的情况下,它会导致另一个mongo实例被终止。

到目前为止,我一直使用“pidfilepath”配置指令(不记得我第一次安装它时是否已经存在)。所以基本上我已经将我的init脚本更新为(并注意缺少的“\ s”'es)

PIDFILE=`awk -F= '/^pidfilepath=/{print $2}' "$CONFIGFILE"`

然后我确保配置语句没有空格:

 pidfilepath=/var/run/mongo/mongod-name.pid  

这解决了我的问题。我希望在同样情况下对其他任何人都这样做。

为什么还要使用dbpath作为pid文件?