如何自动配置 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 实例的机器的主机名作为输入(确保它们可以通过您的网络访问)
我想创建一个 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 实例的机器的主机名作为输入(确保它们可以通过您的网络访问)