如何自动配置 mongodb 副本集

How to auto config mongodb replica set

我想创建一个 MongoDB 副本集,根据文档,我需要在我的第一个 mongo 实例中像这样 运行 以配置副本集这很好用。但是,我想知道是否有一种方法可以使这个过程自动化,而不是每次都通过 ssh 连接到服务器和 运行 这段代码。我试着把它放在一个配置文件中,但它没有用

rs.initiate( {
 _id : "rs0",
 members: [
    { _id: 0, host: "mongodb0.example.net:27017" },
    { _id: 1, host: "mongodb1.example.net:27017" },
    { _id: 2, host: "mongodb2.example.net:27017" }
  ]
})

您是在谈论使用 docker、terraform 等工具创建副本集的情况吗?

您始终可以包含具有 rs.initiate(...) 命令的本地初始化脚本。

副本集始终需要初始启动命令。没有它,它就不存在。

虽然这个问题有点老了,但我认为向未来的读者展示一个可能的解决方案很重要!

这个 repo https://github.com/deRemo/dockerized-mongodb 提供了一个 python 脚本来在“dockerized”场景中自动配置副本集。看看 configure_rs.py

这里我推断出重要的部分:

#!/usr/bin/python3

import os,sys

if len(sys.argv) < 2:
    print("USAGE: ./script ip1 ip2 ... (hostname are also valid, if recognised)")
    exit()

print("Configuring replica set...")

members = []

for i in range(1, len(sys.argv)):
    prio = 1 if i == 1 else 0 #prioritize first member for the primary election
    members.append("{_id: "+str(i-1)+", host: \'"+str(sys.argv[i])+"\', priority: "+str(prio)+"}")

#stringify members and prepare rs config
members = ', '.join(d for d in members)
cfg = "{_id: 'rs0', members: ["+members+"]}"


os.system("./mongo --host "+sys.argv[1]+" --eval \"JSON.stringify(db.adminCommand({'replSetInitiate' : "+cfg+"}))\"")

该脚本将部署 mongod 实例的机器的主机名作为输入(确保它们可以通过您的网络访问)