Java-драйвер Mongo: предпочитать вторичную реплику экземпляра mongo

У меня есть реплика mongo из 3 членов, установленная в 2 разных местах (подключенных через VPN). Вот конфигурация:

  • мастер, дата-центр А
  • slave1, приоритет 1, центр обработки данных A
  • slave2, приоритет 0, центр обработки данных B

С этой конфигурацией главный экземпляр mongo всегда будет находиться в центре обработки данных A (поскольку подчиненный mongo 2 имеет приоритет 0).

У меня есть веб-приложение java, которое работает в центре обработки данных B. Когда я подключаюсь, я даю драйверу mongo IP-адреса 3 экземпляров mongo (чтобы обязательно подключиться к одному экземпляру, если какой-либо из них не работает).

Я хочу убедиться, что java-приложение, работающее внутри центра обработки данных B, использует для несогласованных операций чтения приоритет экземпляра slave2 (поскольку они находятся в одном центре обработки данных), а не любого из двух других (пока slave2 работает и бег).

Если приложение (в центре обработки данных B) использует master или slave1 для несогласованных операций чтения, в то время как slave2 запущен и работает, это пустая трата ресурсов, полосы пропускания и, кстати, денег.

Как я могу гарантировать, что Java-приложение центра обработки данных B предпочтет slave2?


person Salomon BRYS    schedule 30.09.2013    source источник


Ответы (1)


У вас есть два варианта использования Read Preference:

Используя nearest . Это заставит ваш сервер приложений связаться с машиной в ближайшей группе (расстояние пинга 15 мс члена шкафов). Однако, если машины в центре обработки данных A находятся в ближайшей группе, их также можно использовать для чтения. Водитель время от времени пересчитывает ближайшую группу.

Добавление набора тегов в сочетании с ближайшим / второстепенным / второстепенным предпочтительным предпочтением. Для лучшего понимания ознакомьтесь с этим кратким руководством. Вы можете установить тег «dc» для вашего члена центра обработки данных B и настроить драйвер вашего приложения (java) для использования этого тега для чтения соответственно.

Комментарий: если сервер приложений/приложение является основным клиентом вашего набора реплик, лучше, конечно, иметь двух участников в центре обработки данных B.

person Ori Dar    schedule 30.09.2013
comment
Если я определяю набор тегов, что, если slave2 выйдет из строя? Произойдет ли ошибка чтения или будут использоваться экземпляры DC A, игнорирующие теги? - person Salomon BRYS; 30.09.2013
comment
В случае, если вы определяете два набора тегов {dc:A} и {dc:B}, а ваш драйвер сконфигурирован со вторым набором тегов, вы не сможете считывать данные, когда узел B (подчиненный 2) не работает. nearest без набора тегов будет иметь для вас больше смысла в этом случае (набор включает только одного члена) - person Ori Dar; 30.09.2013