是否可以在一台物理服务器上运行多个mongodb进程/服务器/端口?

时间:2013-10-14 14:16:09

标签: ruby-on-rails mongodb production staging

我在一台计算机上有productionstaging个环境。一个rails应用程序全天候工作。一个(实际上是相同的)rails应用程序仅用于测试/实现新功能。

所以我使用mongodb:

mongod --dbpath /path/to/my/production/rails/app/db

我还想用:

运行一个mongod
mongod --dbpath /path/to/my/staging/rails/app/db

但是我无法想象如何做到这一点,因为如果我按照所描述的那样做,我显然会得到:

Mon Oct 14 16:12:59 [initandlisten] ERROR: listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
Mon Oct 14 16:12:59 [initandlisten] ERROR:   addr already in use

那么在一台计算机上使用两个不同的mongodb实例以便能够分别使用生产和暂存应用程序的最佳做法是什么?

更新

当然最好在rails应用程序中定义不同的环境(例如mongodb.yml)并使用相同的mongod进程和端口,但如果有可能这样的事情(完全独立的环境)会很有趣:< / p>

port 27017 <--> --dbpath /path/to/my/production/rails/app/db
port 27018 <--> --dbpath /path/to/my/staging/rails/app/db

2 个答案:

答案 0 :(得分:2)

是。

mongod --dbpath /path/to/my/production/rails/app/db --port 12345
mongod --dbpath /path/to/my/staging/rails/app/db --port 12346

查看此前面的答案,了解更多信息/陷阱:multiple instances of Mongo DB on same server

答案 1 :(得分:0)

我在相关问题中的答案略有修改版本:

上述answer不是推荐的运行多个实例的方法(特别是当服务器可能同时运行时),因为它会导致使用相同的配置参数,例如 logpath pidfilepath 在大多数情况下不是你想要的。

请考虑创建专用的mongod配置文件,如 mongod-PROD.conf mongod-STAGE.conf 。在这些文件中,您可能需要提供 dbpath logpath 文件夹, bind_ip 端口 pidfilepath < / em>特定于每个mongod实例,并且不会相互影响。

完成这些步骤后,您可以按如下方式触发两个实例

mongod --config <path-to>/mongod-PROD.conf
mongod --config <path-to>/mongod-STAGE.conf

您可以在mongodb docs page

中找到更多详细信息