Mongodb 同步mongo实例不再可能?

Mongodb 同步mongo实例不再可能?,mongodb,centos6,Mongodb,Centos6,我有一个生产服务器和一个开发服务器。生产服务器正在运行mongod,而我的开发服务器正在运行2个实例: 1-作为生产的“从机”(使用复制集)。这将复制我的数据并允许更轻松的备份。 2-一个“大师”。我的开发集合(无法使用从属实例,关于slaveOkay等) 他们都有自己的pid文件,数据文件夹,一切。一年多来,这项工作一直没有出现太多问题 不幸的是,自从上一个版本以来,似乎每当我启动一个实例时,它就会终止另一个实例(prod slave dev master)。不管哪一个先开始,另一个总是停止

我有一个生产服务器和一个开发服务器。生产服务器正在运行mongod,而我的开发服务器正在运行2个实例: 1-作为生产的“从机”(使用复制集)。这将复制我的数据并允许更轻松的备份。 2-一个“大师”。我的开发集合(无法使用从属实例,关于slaveOkay等)

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

不幸的是,自从上一个版本以来,似乎每当我启动一个实例时,它就会终止另一个实例(prod slave dev master)。不管哪一个先开始,另一个总是停止

有人知道为什么mongo会突然这样做,以及问题的解决方案吗? 出于各种原因,对我来说,使用主实例来存放开发集合并不是一个真正的选择

希望这能让事情变得更清楚一点:

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

谢谢

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

mongo 2.4.6版的初始化脚本似乎有一个独特之处。它使用以下表达式确定PID文件:

PIDFILE=`awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE"`
这将查找在等号前后带有空格的dbpath。 由于默认配置文件包含“dbpath=/var/lib/mongo”,因此该表达式的结果为空。 我想象init脚本——没有给出任何特定的.pid文件——只使用默认的.pid文件位置。通常(有一个例子)这不会产生任何后果。在我的例子中,它会导致另一个mongo实例终止

到目前为止,我一直使用“pidfilepath”config指令(不记得我第一次安装它时是否已经在那里了)。因此,基本上我已经将init脚本更新为(并注意缺少的“\s”)

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

 pidfilepath=/var/run/mongo/mongod-name.pid  
这解决了我的问题。我希望在同样的情况下,其他人也能如此


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

此设置有效,您可以将开发数据写入开发从机?这听起来…不正确,不管怎样,日志上说什么?不,它写在开发母版上,我已经更新了这个问题,希望它更清楚一点。实例关闭的日志只提到接收到信号15,然后“正常”终止。我不知道会影响此设置的任何内容,这是什么MongoDB版本?你最近升级了吗?如果是,从哪个版本开始?你的设置最近有什么变化?是的,我也没有。。。我只升级到了2.4.6,没有其他变化。它可能是2.4.5之前,我保持我的机器尽可能最新。唯一奇怪的是,我的mongod init脚本中有PIDFILE=
awk-F='/^dbpath\s=\s/{print$2}'“$CONFIGFILE”
。这对我来说真的很尴尬。在我(以前复制的)mongod dev文件中,这是pidfilepath而不是dbpath。我想知道我是不是无意中改变了这个?那我们就奇怪了…等你用初始化文件启动这些?您是从同一个init文件启动这两个文件的吗?MongoDB问题跟踪程序中有一个未解决的问题,该问题与RPM包有关:。如果您想要upvote/watch/comment,看起来有一个关联的pull请求,其修复程序与您的类似。
 pidfilepath=/var/run/mongo/mongod-name.pid