使用docker和fig设置一个mongodb副本集的正确方法是什么?
使用docker和fig设置一个mongodb副本集的正确方法是什么?
我试图按照正式的mongodb教程创build一个带有一些副本集的fig.yml
文件,但是总是被如何正确调用rs.initiate()
和rs.add("<hostname><:port>")
阻止。
我发现这个答案解释了为什么我不能从shell
启动所有的东西,没有调用rs.initiate()
,所以我怎么能做到这一点?
哦,我使用mongo:latest
(v2.6.5)作为基本映像,没有任何修改。
我有类似的问题,这是我做的。 我正在用docker-compose代替fig。
在我的docker – 撰写。
mongors: image: mongo ports: - "27017:27017" volumes: - ./mongo:mongo entrypoint: mongo/entrypoint.sh
在我的entrypoint.sh中:
#!/bin/bash mongod --port 27018 --replSet rs0 --fork --syslog --smallfiles mongo --port 27018 --eval "rs.initiate({_id : 'rs0', members : [{_id : 0, host : 'localhost:27018'}]})" mongo --port 27018 --eval "while(true) {if (rs.status().ok) break;sleep(1000)};"
确保它是可执行的:
chmod +x mongo/entrypoint.sh
这是一个有点哈克,但它的作品:)
首先在设置副本集之前停止mongod服务
service mongodb stop
mongod –port“PORT”–dbpath“YOUR_DB_DATA_PATH”–replSet“REPLICA_SET_INSTANCE_NAME”
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0 --fork
它将在端口27017上启动名称为rs0的mongod实例。现在启动命令提示符并连接到这个mongod实例。
在mongo客户端发出命令rs.initiate()来启动一个新的副本集。
rs.initiate()
要检查副本集configuration问题的命令rs.conf() 。
rs.conf()应该具有以下内容
{ "_id" : "rs0" "version" : 1, "members" : [ { "_id" : 0, "host" "localhost:27017" }, { "_id" : 1, "host" "localhost:27018" }, { "_id" : 2, "host" "localhost:27019" } ] }
现在,您可以通过引用您提供的主机名来将其他节点添加到复制集。
rs.add("localhost:27019") { "ok" : 1 }
为每个剩余的复制成员执行此操作。 您的复制集现在应该启动并运行。
要检查副本集的状态,请发出rs.status()命令。
rs.status()
希望这可以帮助。