【问题标题】:Simultaneous mongo instances no longer possible?不再可能同时出现 mongo 实例?
【发布时间】:2013-09-05 22:01:28
【问题描述】:

我有一个生产服务器和一个开发服务器。生产服务器正在运行 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]

谢谢!

【问题讨论】:

  • 此设置有效,您可以将开发数据写入开发从站吗?这听起来......不正确,无论如何日志说什么
  • 不,它写在一个开发大师上,我已经更新了这个问题,希望它更清楚一点。实例关闭的日志仅提及收到的信号 15,然后“正常”终止。
  • 我不知道会影响此设置,这是什么 MongoDB 版本?你最近升级了吗?如果是从哪个版本?您的设置最近发生了什么变化?
  • 是的,我也没有...我只升级到 2.4.6,没有其他任何变化。之前可能是 2.4.5,我尽可能让我的机器保持最新。唯一奇怪的是我的 mongod 初始化脚本里面有 PIDFILE=awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE" 。这对我来说似乎真的很尴尬。在我的(以前复制的)mongod-dev 文件中,这是 pidfilepath 而不是 dbpath。我想知道我是不是不小心改了这个?那我们会不会很奇怪...
  • 等待您使用初始化文件来启动这些?而且你是从同一个初始化文件启动的?

标签: mongodb centos6


【解决方案1】:

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

mongo 2.4.6 版的初始化脚本似乎有其特殊性。它使用以下表达式确定 PID 文件:

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

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

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

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

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

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

这解决了我的问题。我希望它对处于相同情况的其他人也有同样的效果。

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

【讨论】:

  • MongoDB 问题跟踪器中存在一个未解决的问题,用于解决 RPM 包的此问题:SERVER-9275。如果您想投票/观看/评论,看起来有一个相关的拉取请求,其修复与您的类似。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多