21

http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.htmlを見て、「デフォルトで確認応答を使用しないレプリカセット接続とセカンダリの readPreference 」セクションまでスクロールすると、

次のようなレプリカ セットへの接続文字列を示します。

MongoClient.connect("mongodb://localhost:30000,localhost:30001/integration_test_?w=0&readPreference=secondary", function(err, db) {

}

を指定する必要がある理由がわかりません2 hosts。MongoDB のドキュメントには、レプリカ セットがクライアントに対して透過的であると既に記載されていると思いました。つまり、クライアントはプライマリ レプリカ セットに接続するだけで、MongoDB がその役割を果たします。したがって、接続にはホストが 1 つだけ含まれている必要があります。MongoDB doc には、少なくとも3 hostsレプリカ セットに存在する必要があり、この接続文字列のみが指定されている必要があると記載されています2 hosts

さらに、接続文字列に「replicaSet」が記載されていないのはなぜですか?

4

2 に答える 2

41

接続文字列内の複数のサーバーは、接続モードを検出するためのシード リストとして機能します。プライマリ サーバーを指定するだけで問題なく動作するという点で、あなたは正しいですつまり、プライマリ サーバーがダウンするか、非常にビジーになるまでです。接続文字列で複数のマシンを指定することにより、レプリカ セットの構成を照会する複数の場所をクライアントに与えることができます。

接続モードがレプリカ セット (以下を参照) に解決されると、シード リスト内のサーバーの少なくとも 1 つが応答する限り (応答は完全なレプリカ セットと現在のプライマリの名前が含まれています)。さらに、最初の接続後であっても、他のセカンダリも自動的に検出され、ミックスに追加 (または削除) されます。これにより、レプリカ セットからサーバーを追加および削除できるようになり、ドライバーが変更を自動的に処理します。

最後の質問に答えるために、複数のサーバーを指定することは、それがレプリカ セットであるか複数の mongos (シャード セットアップで) であるかについてあいまいであるため、ドライバーはサーバーに接続する検出フェーズを経て、その種類を判断します。これには接続時のオーバーヘッドが少しあり、接続文字列で接続モードを指定することで回避できます - したがって、replicaSetキーワードです。そのため、必須ではありませんが、接続文字列でサーバーがレプリカ セットにあることを明示的に示すと、接続時間を短縮できます。

于 2014-05-30T17:01:33.547 に答える