3

以下のコマンドのように、3 つの mongod サーバーを異なるポートでローカルに実行しています。

mongod.exe --port 27017 --replSet rs0 --dbpath C:\data\db1 --smallfiles --oplogSize 128

mongod.exe --port 27018 --replSet rs0 --dbpath C:\data\db2 --smallfiles --oplogSize 128

mongod.exe --port 27019 --replSet rs0 --dbpath C:\data\db3 --smallfiles --oplogSize 128

これにより、3 つの mongoDB サーバーがローカルで起動されます。

次に、レプリケーション セットを構成するために、次のコマンドを使用しました

rsconf = { _id : rs0,
           members: [
                      {_id:1, host:"localhost:27017"}
                    ]
         }

それから始める

rs.initiate(rsconfig)

今すぐ他のメンバーを追加する

rs.add({_id:2, host: "localhost:27018"})

ただし、次の場合は正常に動作します

rs.add({_id:2, host: "10.212.71.116"})

例外をスローします -

   {
        "errmsg" : "exception: can't use localhost in repl set member names exce
pt when using it for all members",
        "code" : 13393,
        "ok" : 0
}

私はmongoDBの初心者なので、ローカルホストよりもIPアドレス(ローカルホスト用)を使用する方が適切だと思われます。なぜこれがmongoDBでそうなのですか?

4

2 に答える 2

3

mongodb シャーディングのドキュメントを調べているときに、次のステートメントを見つけました

シャード クラスタのすべてのコンポーネントはネットワークを介して相互に通信する必要があるため、localhost アドレスの使用に関して特別な制限があります。

ホスト識別子として「localhost」または「127.0.0.1」を使用する場合、クラスター内のすべての MongoDB インスタンスのすべてのホスト設定に「localhost」または「127.0.0.1」を使用する必要があります。これは、addShard のホスト引数と、mongos --configdb ランタイム オプションの値の両方に適用されます。localhost アドレスとリモート ホスト アドレスを混在させると、MongoDB でエラーが発生します。

ページ「http://docs.mongodb.org/manual/core/sharded-cluster-architectures/#sharding-requirements-infrastructure

これは、テスト環境にいて、localhost 以外のホストを追加したくない場合は、localhost を使用するアプローチを使用でき、それ以外の場合は IP アドレスを使用することを好むことを意味します。

于 2013-06-15T13:11:58.997 に答える
2

私も同じ問題を抱えていました。rs.initiate()このコマンドの出力結果の me フィールドを見てください。お使いのコンピュータの名前です。私にとってはそうでしたApollo-17:27001。この情報により、他の 2 つのサーバーが追加されます: >rs.add("Apollo-17:27002")など。すべてが正常であることを確認します。コンソールに が表示されます{ "ok" : 1 }。それで全部です。

于 2014-06-04T19:06:29.983 に答える