使用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() 

希望这可以帮助。