У нас есть реплика Mongodb с 2 узлами, каждый из которых расположен в отдельном CPD, в разных странах.
Задержка между обоими узлами измерима. Это не проблема при записи данных, так как это делается один раз в день с использованием автономного процесса.
Но при чтении узлы в каждом запросе устанавливают соединения между ними, что занимает довольно много времени и делает запрос медленным и создает проблемы в сети.
Мы обнаружили ~ 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 проверок, верно?
В конце концов я решил проблему, выполнив следующие изменения:
mongo.is_master_interval
а также mongo.ping_interval
установка на более высокое значениеДругих решений пока нет …