0

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 つのチェックの間隔を増やすことができるようですね。

4

1 に答える 1

0

これらの変更を行うことで、最終的に問題を解決しました。

  • mongo.is_master_intervalとのmongo.ping_interval設定をより高い値に変更する
  • 読み取り操作と書き込み操作の接続設定を変更します。読み取りにはスタンドアロン接続構成 (replicaSet パラメータなし) を使用し、書き込みには replicaSet 構成を使用します。このように、読み取り操作はサーバー間の接続を生成しません。
于 2015-05-21T07:04:57.567 に答える