2 つのノードを持つ Mongodb レプリカセットがあり、それぞれが異なる国の異なる CPD に配置されています。
両方のノード間のレイテンシーは測定可能です。データの書き込みはオフライン プロセスを使用して 1 日 1 回行われるため、これは問題ではありません。
しかし、読み取り時には、各リクエストでノードがそれらの間の接続を確立します。これにはかなりの時間がかかり、リクエストが遅くなり、ネットワーク上で問題が発生します。
プライマリ ノードとセカンダリ ノードの間で最大 700 の接続が開いていることがわかりました。
いくつかの接続、接続文字列、および readPreference 設定を試しましたが、これは常に発生します。
各リクエストでノード間で接続が行われないようにする方法はありますか? ノード間がそれほど近くない場合、人々はこの問題にどのように対処しますか?
編集:
テスト スクリプトを繰り返し実行すると、非常に高速になることがあります。MongoLog の詳細にこれが表示されます。
180 [+0.004990] IO FINE getting cursor body
181 [+0.005032] CON FINE No timeout changes for xxxx:27017;rs1;.;101877
182 [+0.005080] CON FINE Initializing cursor timeout to 30000 (from connection options)
183 [+0.005095] CON INFO command supports Read Preferences
184 [+0.005109] CON INFO mongo_get_read_write_connection: finding a REPLSET connection (read)
185 [+0.005128] CON FINE found connection xxxxx:27017;rs1;.;101877 (looking for xxxx:27017;rs1;.;101877)
186 [+0.005140] CON FINE is_ping: skipping: last ran at 1432113918, now: 1432113922, time left: 1
187 [+0.005153] CON FINE found connection yyyy:27017;rs1;.;101877 (looking for yyyyy:27017;rs1;.;101877)
188 [+0.005163] CON FINE is_ping: skipping: last ran at 1432113919, now: 1432113922, time left: 2
189 [+0.005175] CON FINE discover_topology: checking ismaster for xxxxx:27017;rs1;.;101877
190 [+0.005186] CON FINE found connection xxxx:27017;rs1;.;101877 (looking for xxxxx:27017;rs1;.;101877)
191 [+0.005196] CON FINE ismaster: skipping: last ran at 1432113919, now: 1432113922, time left: 12
192 [+0.005206] CON FINE discover_topology: ismaster got skipped
193 [+0.005218] CON FINE discover_topology: checking ismaster for yyyyy:27017;rs1;.;101877
194 [+0.005228] CON FINE found connection yyyyy:27017;rs1;.;101877 (looking for yyyyy:27017;rs1;.;101877)
195 [+0.005237] CON FINE ismaster: skipping: last ran at 1432113919, now: 1432113922, time left: 12
196 [+0.005246] CON FINE discover_topology: ismaster got skipped
3 つのタイマーのいずれかが 0 に達すると、接続が確立されます。3 つのチェックの間隔を増やすことができるようですね。