7

docker と fig を使用して mongodb レプリカ セットを設定する適切な方法は何ですか?

公式のmongodbチュートリアルfig.ymlに従って、いくつかのレプリカセットを含むファイルを作成しようとしていましたがrs.initiate()rs.add("<hostname><:port>")適切に呼び出す方法によって常にブロックされました。

を呼び出さずに からすべてを開始できない理由を説明するこのSOの回答を見つけたので、どうすればそれを達成できますか?shellrs.initiate()

ああ、私はmongo:latestベース イメージとして (v2.6.5) を変更せずに使用しています。

4

2 に答える 2

3

私は同様の問題を抱えていました。これが私がしたことです。fig の代わりに docker-compose を使用しています。

私のdocker-composeで。

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

少しハックですが、動作します:)

于 2015-06-29T14:05:39.247 に答える
-4

レプリカセットを設定する前に、最初に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()

レプリカ セットの構成を確認するには、コマンド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()

お役に立てれば。

于 2014-12-18T08:04:51.783 に答える