2016-02-15 6 views
0

Мы используем набор реплик mongo из 4 членов и один арбитр. Есть 3 физические сайты, все серверы Mongo могут разговаривать друг с другом:Mongo replica set - нужен ли клиент, чтобы узнать обо всех них?

Site 1 (западное побережье) site1-mg01 site1-mg02

Site 2 (восточное побережье) site2-mg03 site2-mg04

сайт 3 (облако, арбитр только) site3-mgarbiter

у нас есть клиент Java. Я бы предпочел, чтобы клиент никогда не подключался к серверам Mongo на другом сайте, даже если один из их серверов станет основным (отставание убьет приложение). Или по-другому:

Сайт 1 Приложение Java подключается к site1-mg01 и site1-mg02

сайта 2 JavaApp подключается к site2-mg03 и site2-mg04

Является ли это приемлемо для клиента, чтобы только знать о части набора реплик? Так что, если веб-клиент может физически достичь только сайт 1, и я настраивал мой реплики устанавливается следующим образом:

"site1-mg01: 270xx, site1-mg02: 270xx"

Будет

мой клиент негативно повлиять? То, как я предполагаю, что это работает, долгое время, когда один из этих серверов является первичным, он будет нормально подключаться? И если сайт 2 Mongo становится основным, я просто не могу подключиться?

ответ

1

В Mongo все записи сделаны в основном. Если ваши клиенты «только для чтения», вы можете использовать «ближайшие» предпочтения чтения в своих запросах. Другой вариант - подключиться к не первичному узлу и установить rs.slaveOk, чтобы клиент мог читать. https://docs.mongodb.org/v3.0/reference/method/rs.slaveOk/

надеюсь, что это поможет.

1

Монго реплики набор - это клиент должен знать о них все? не

Нет - TBD

Является ли это приемлемо для клиента, чтобы только знать о части набора реплик?

В самом деле, для клиентского приложения - через драйвер Java - это достаточно, чтобы «знать» только об одном элементе набора. Остальные элементы набора доступны через эту конфигурацию с одним членом.

Будет ли отрицательно сказываться на моем клиенте?

Да, в этом случае установки только один членов центра обработки данных части набора, вы не защитить себя от тех случаев, когда, что центр обработки данных снижается, и ваш клиент не может сначала подключиться к задавать. Вам лучше настроить массив адресов сервера, содержащий сначала члена западного побережья, а затем члена восточного побережья. Заказ, который должен быть инвертирован клиентским приложением восточного побережья.

Чтобы быть в безопасности, вы должны настроить адреса серверов с тремя членами, чтобы гарантировать, что если набор работает, вы можете подключиться, по крайней мере, к одному из трех выживших узлов. В этом случае добавьте арбитр, как в нейтральном центре обработки данных. Скорее всего, если два члена уйдут, они оба из одного и того же DC.

так, как я предполагаю, что это работает, это пока один из этих серверов является первичным, оно будет подключаться нормально?

Как уже говорилось, вы не обязательно должны подключаться к первичной, только член, который знает, где первична.

А если сайт 2 Монго становится первичным, я просто не могу подключиться?

Да, вы можете.

Я предпочел бы клиент никогда не подключаться к серверам Mongo в другом месте, даже если один из своих серверов становится основным

Клиент конечно всегда писать на Первичный, не имеет значения, на каком DC. Если вы хотите, чтобы приложение всегда читалось из указанного центра обработки данных, лучший способ его достижения - через read preference tag sets.

+0

Спасибо за отзыв. Звуки предпочтений звучат многообещающе, но могут ли они сказать, НЕ разговаривать с сайтом 2? Я опробовал свою настройку, и, как вы сказали, обнаруживает site2-mg03 и site2-mg04, а затем бросает вызов com.mongb.MongoSocketOpenException, когда он не может с ними разговаривать. Чтение вашей ссылки, это не похоже на то, что теги будут останавливать соединения? – javatestcase

+0

@javatestcase трудно сказать, что пошло не так, как показано на рисунке. Если вы настроите элемент западного побережья надлежащим тегом и правильно настроили 'ReadPreference', он должен работать. Я не знаю, что вы подразумеваете под * Discover *. Удаленный сайт всегда доступен для приложения, но, используя подходящий «TagSet» для операции чтения, он должен читать данные от «локальных» членов сайта. –