通过js文件配置MongoDB副本集

pra*_*tas 6 mongodb

我已经手动为 MongoDB 配置了一个副本集。

一旦我在 3 个节点上启动了守护进程并在它们启动并运行后,从我标识为“主要”的节点运行以下命令:

  1. mongo

    • 这将使我进入 mongo shell
  2. use admin

  3. 创建副本集配置:

    cfg = {
        _id: 'csReplicaSet',
        members: [
            { _id: 0, host: 'node1IpAddress:27017'},
            { _id: 1, host: 'node2IpAddress:27017'},
            { _id: 2, host: 'node3IpAddress:27017', arbiterOnly: true}
        ]
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. rs.initiate(cfg)

我想知道如何在 mongo 识别的 JavaScript 文件中执行这些步骤。我想自动化这些步骤。

Ste*_*nie 4

将初始化脚本传递给mongoshell

从编程上来说,你就快到了。您可以将指令保存到 JavaScript 文件并在mongo命令行上运行。您还应该捕获并打印结果,rs.initiate()以防出现错误:

例如。内容initreplica.js

var cfg = { _id: 'csReplicaSet',
    members: [
        { _id: 0, host: 'node1IpAddress:27017'},
        { _id: 1, host: 'node2IpAddress:27017'},
        { _id: 2, host: 'node3IpAddress:27017', arbiterOnly: true}
    ]
};

var error = rs.initiate(cfg);
printjson(error);
Run Code Online (Sandbox Code Playgroud)

使用以下命令从命令行运行此命令:

 mongo node1IpAddress:27017/admin initreplica.js
Run Code Online (Sandbox Code Playgroud)

请注意,这假设您的三个mongod节点已在相同的 IP 地址(包括--replSet csReplicaSet参数)上启动。您也只需要执行一次此初始化序列,除非您从头开始重建副本集(并且没有现有的副本集配置)。

我还建议阅读手册中有关为shell编写脚本mongo的部分。它包含一些有用的提示,例如如何打开与其他 MongoDB 服务器的新连接以及一些 shell 帮助程序use <db>(如.

自动化生产部署

如果您正在寻找自动构建生产 MongoDB 集群的方法,您应该研究一下 Chef 或 Puppet 等配置管理工具的配方。作为 MMS(MongoDB 管理服务)的一部分,还有一个自动化功能即将推出;自动化功能目前正在进行 Beta 测试。