【问题标题】:multiple instances of Mongo DB on same server同一台服务器上的多个 Mongodb 实例
【发布时间】:2013-02-27 23:29:03
【问题描述】:

我正在使用 Mongo DB,我是新手。我即将将它安装在专门用于 Mongo 的服务器上。

我想创建 2 个实例 - 1 个用于支持 QA 环境,另一个用于支持暂存环境。

我更熟悉可以创建多个实例的 SQL Server。

是否可以对 Mongo DB 做同样的事情?如果可以,如何做?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    前面提到的answer 不是运行多个实例的推荐方式(尤其是当服务器可能同时运行时),因为它会导致使用相同的配置参数,例如 logpath em> 和 pidfilepath 在大多数情况下不是你想要的。

    请考虑创建专用的 mongod 配置文件,例如 mongod-QA.confmongod-STAGE.conf。在这些文件中,您可能需要提供 dbpathlogpath 文件夹、bind_ipportpidfilepath 特定于每个 mongod 实例,不会相互影响。

    完成这些步骤后,您可以触发两个实例,如下所示

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

    您可以在 mongodb 文档page找到更多详细信息

    【讨论】:

    【解决方案2】:

    您只需为第二个实例创建另一个文件夹(例如:mongodb2)dbpath,并在不同的端口(例如:27018)中运行它

     mongod --dbpath /usr/local/var/mongodb2 --port 27018
    

    【讨论】:

    • 请检查@kasur 的回答并编辑您的问题并发出警告
    • 我明白你的意思,但我的问题有点不同,我的服务器有 2.4 版本的 Mongo,我的系统需要 3 个以上的 MongoDB 版本,那么我该怎么办?
    • 但是我怎么知道要启动哪个 mongo shell?任何特定的命令来识别进程?
    • @AnkurSoni mongo --port 27018
    【解决方案3】:

    这是我如何在同一台电脑上启动 4 个 mongod 以在开发环境中模拟生产环境

    要启动 mongod,您应该为每个 mongod 使用单独的配置。获取 4 个配置并使用它们启动 mongods

    start C:\mongodb\bin\mongod.exe --config C:\net2\dev1-pc\configs\mongod-primary1.cfg 
    start C:\mongodb\bin\mongod.exe --config C:\net2\dev1-pc\configs\mongod-secondary1.cfg --rest
    start C:\mongodb\bin\mongod.exe --config C:\net2\dev1-pc\configs\mongod-secondary2.cfg
    start C:\mongodb\bin\mongod.exe --config C:\net2\dev1-pc\configs\mongod-secondary3.cfg
    

    配置如下所示:

    mongod-primary1.cfg 文件内容

    systemLog:
        destination: file
        path: c:\net2\primary1-pc\data\log\mongod.log
    storage:
        dbPath: c:\net2\primary1-pc\data\db
    net:
        port: 27018
    replication:
        replSetName: repl1
    

    mongod-secondary1.cfg 文件内容

    systemLog:
        destination: file
        path: c:\net2\secondary1-pc\data\log\mongod.log
    storage:
        dbPath: c:\net2\secondary1-pc\data\db
    net:
        port: 27019
    replication:
        replSetName: repl1
    

    mongod-secondary2.cfg 文件内容

    systemLog:
        destination: file
        path: c:\net2\secondary2-pc\data\log\mongod.log
    storage:
        dbPath: c:\net2\secondary2-pc\data\db
    net:
        port: 27020
    replication:
        replSetName: repl1
    

    mongod-secondary3.cfg 文件内容

    systemLog:
        destination: file
        path: c:\net2\secondary3-pc\data\log\mongod.log
    storage:
        dbPath: c:\net2\secondary3-pc\data\db
    net:
        port: 27021
    replication:
        replSetName: repl1
    

    【讨论】:

    • 你真的应该包括pidfilepath
    • 对不起。可能不好。它仅用于分叉,即守护进程不会创建 pidFile 否则。
    • 我已按照这些步骤操作,当我尝试在 27018 实例中保存一些值时,它会抛出写入错误,例如 ` > db.product.save ({ a: 1 }) WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })`
    • @Johnykutty ,上面的配置是复制服务器和复制服务器应该是只读的。您可以在主服务器/主服务器中执行写入操作。仅在 repl 服务器上进行主写入。删除配置中的复制部分,该服务器将作为另一个单独的 mongodb 主实例运行。
    【解决方案4】:

    这是可能的——你可以给每一个单独的端口来监听,并给它自己的 --dbpath 目录来放置它的文件,但我不建议这样做,因为它们都将竞争相同的资源 - RAM , i/o 带宽等。

    如果您在此服务器上有多个磁盘,您可以将它们的数据文件放在不同的设备上,但您的 QA 实例仍有可能降低生产实例的可用性,可能是在最坏的时间。

    在将 QA 实例与我的生产实例放在一起之前,我会将它放在正在做一些不重要的事情的随机机器上。

    【讨论】:

    • Asya,感谢您的反馈 - 这是最有帮助的。共享一台服务器的环境都是测试环境,所以我不担心它们竞争资源。但是,话虽如此,我想要最好的设置。我可以将磁盘分成多个分区。如何使用 mongo、连接字符串等对其进行设置?
    • 您只需将每个 mongo 的 dbpath 目录放在不同的分区上。然后,由于每个都有不同的端口,您连接到 hostname:port - 所以您使用不同的端口,具体取决于您连接到的端口。
    • 好的,明白了。是一次安装 Mongo 还是两次单独安装?
    • 您只需要安装一次 mongodb 发行版。您只需启动 mongod 进程两次。
    • 同一个磁盘上的多个分区不会对性能无用和有害吗?我认为这里最重要的因素是可用的 RAM,这样缓存就不会窒息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2014-11-14
    相关资源
    最近更新 更多