Репликация Mongodb с PHP-клиентом, избегайте соединений между узлами

У нас есть реплика 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 проверок, верно?

0

Решение

В конце концов я решил проблему, выполнив следующие изменения:

  • Изменение mongo.is_master_interval а также mongo.ping_interval установка на более высокое значение
  • Изменение настроек соединения для чтения и записи. Для чтения я использую автономную конфигурацию соединения (без параметров replicaSet), а для записи — конфигурацию replicaSet. Таким образом, операции чтения не создают соединений между серверами.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]