Реплика Mongoose / MongoDB с использованием вторичной реплики для чтения

Недавно я изменил настройку своего сервера, включив в него набор реплик. Вторичные БД расположены в нескольких регионах по всему миру, чтобы уменьшить задержку. Проблема в том, что я думаю, что все операции чтения выполняются с главного, а не со вторичных серверов. Я вижу задержку 500 мс + в newrelic на серверах, удаленных от основной БД, но промежуточный сервер, который находится в том же регионе, что и мастер, составляет ~ 20 мс. Как я могу проверить, работает ли вторичное чтение или ближайшее, или у меня нет настроек или нет? (Я пробовал как SECONDARY_PREFERRED, так и NEAREST)

URL:

mongodb://1.1.1.1:27017,1.1.1.2:27017,1.1.1.3:27017,1.1.1.4:27017,1.1.1.5:27017/mydatabase

Мои варианты выглядят так:

"replSet": {
   "rs_name": "myRepSet"
   "readPreference": "ReadPreference.SECONDARY_PREFERRED",
   "read_preference": "ReadPreference.SECONDARY_PREFERRED",
   "slaveOk": true
}

Версия мангуста: 3.8.x


person codephobia    schedule 11.07.2015    source источник


Ответы (3)


В соответствии с проблемами проекта на gitHub возникла проблема, из-за которой предпочтение чтения не работает при обновлении до последней версии ([email protected] & [email protected]), поскольку все чтения выполняются с главного, а не с вторичного серверы.

Согласно комментариям, эта проблема не возникает, когда вы откатываетесь к более старой версии ([email protected] & [email protected]), чтения начнут переходить на второстепенные (уровень сбора). Эта проблема должна быть исправлена ​​в version 3.8.7.

Пожалуйста, укажите следующие вопросы для того же:

https://github.com/Automattic/mongoose/issues/1833 https://github.com/Automattic/mongoose/issues/1895

person sahil gupta    schedule 16.07.2015
comment
На самом деле мы обновились до Mongoose 4.x, чтобы частично устранить проблему, а затем сами внесли некоторые изменения в код, благодаря которым задержка уменьшилась до ~ 20-60 мс. Я отдаю должное этому ответу, поскольку он соответствует тому, что мы сделали. - person codephobia; 17.07.2015

Как я могу проверить, работает ли вторичное чтение или ближайшее,

Если у вас есть доступ к вашим машинам, простой способ проверить, какие из них запрашиваются, - это mongostat. Просто войдите на один из своих серверов и запустите

mongostat --discover

Это даст вам базовый вывод по вставкам / запросам / обновлениям / удалению, которые выполняются на каждой машине в вашем наборе реплик. Если у вас тихая система, будет легко увидеть, куда перенаправляются запросы, чтобы вы могли, по крайней мере, знать, попадают ли ваши вторичные запросы.

Если это не так, вам нужно будет изучить настройки вашего драйвера.

person womp    schedule 14.07.2015
comment
Это просто похоже на синхронизацию между узлами. При 40 тысячах посещений веб-сайта в день, там отображается слишком много данных, чтобы что-то понять. - person codephobia; 15.07.2015
comment
Жаль, но все понятно. Вы можете войти только в один из своих вторичных серверов и запустить mongostat локально и посмотреть, отображается ли что-нибудь в столбце запросов. - person womp; 15.07.2015

Вместо вторичного вы можете проверить ближайший вариант. Я думаю, это должно сработать. Проверьте эту ссылку. http://docs.mongodb.org/manual/reference/read-preference/#nearest

person malay biswal    schedule 14.07.2015
comment
Как я уже сказал в вопросе, я пробовал оба варианта с одинаковыми результатами. - person codephobia; 15.07.2015
comment
Виноват. Конец дня, и мои глаза стали хуже. Во всяком случае, вы проверяли эту ссылку. Мне кажется, стоит попробовать. emptysqua.re/blog/ - person malay biswal; 15.07.2015