Несколько мастеров MongoDB в ReplicaSet

У меня есть вопрос относительно нескольких мастеров в наборе реплик с MongoDB. У меня есть следующий макет:

Сервер A --> с MongoDB и несколькими приложениями

Сервер B --> с MongoDB и несколькими приложениями

Оба экземпляра MongoDB организованы в один и тот же набор реплик (сервер A в качестве основного, сервер B в качестве вторичного). Но теперь есть проблема. Обе базы данных должны содержать данные приложений на сервере.

Можно ли развернуть набор реплик с двумя мастерами, чтобы данные с сервера А были доступны в MongoDB на сервере Б и наоборот?

заранее большое спасибо


person DanielH    schedule 10.04.2014    source источник


Ответы (3)


Наборы реплик в MongoDB на данный момент могут иметь только одного мастера. (Он называется первичным в наборе реплик.) Для вашего сценария решение часто заключается в использовании сегментированного кластера. В вашем примере у вас будет два сегмента: один для данных сервера A, а другой для данных сервера B. Оба сегмента реализованы в виде наборов реплик, поэтому каждый из них имеет как минимум три сервера. Затем вы поместите основной сегмент A в тот же центр обработки данных A, а основной сегмент B — в центр обработки данных B. Как минимум одна реплика каждого сегмента (называемая вторичной) будет находиться в другом центре обработки данных.

Это означает, что все данные доступны в каждом центре обработки данных, но запись в сегмент A всегда должна выполняться в центре обработки данных A, а запись в сегмент B — в центре обработки данных B. (Хотя запись также может выполняться удаленно, поэтому вы может писать в шард A из центра обработки данных B, просто в данном случае это удаленная запись.)

person drmirror    schedule 10.04.2014
comment
Привет @drmirror. Большое спасибо за ваш ответ. Я попробую так. - person DanielH; 10.04.2014
comment
Я думаю, что вы ошибаетесь в этом предложении: запись в сегмент A всегда должна происходить в центре обработки данных A, а запись в сегмент B — в центре обработки данных B, потому что кластер сегментов должен использовать специальный ключ сегмента для распределения данные по кластеру. И данные, которые вы вставили в A, можно найти в B. - person Victor Perov; 20.06.2016

MongoDB не является единственным мастером.

Единственный способ создать две отдельные реплики, подобные этой, в настоящее время, сохраняя их синхронизированными, — это сделать это вручную, но это не рекомендуется.

person Sammaye    schedule 10.04.2014
comment
Я отредактировал вопрос, чтобы сделать его немного яснее. Конечно, они организованы в один и тот же набор реплик. Извините за это недоразумение - person DanielH; 10.04.2014
comment
@DanielH Я думаю, если я правильно понимаю, это все еще невозможно, просто в настоящее время можно записать только один член набора реплик. - person Sammaye; 10.04.2014
comment
Хорошо, спасибо за ваш ответ. Жалко, но не изменить в данный момент - person DanielH; 10.04.2014

Оба экземпляра MongoDB организованы в один и тот же набор реплик.

Можно ли развернуть набор реплик с двумя мастерами, чтобы данные с сервера А были доступны в MongoDB на сервере Б и наоборот?

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

Если вы его настроили, вы УЖЕ достигли своей цели. Шардинг имеет мало (если вообще ничего) общего с высокой доступностью.

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

Возможно, вы захотите настроить параметр electionTimeoutMillis, чтобы проверки автоматической отработки отказа происходили чаще.

При записи важных данных в БД вы можете использовать { w: большинство запись, чтобы убедиться, что ваши изменения были отражены на большинстве серверов, несущих данные, и, следовательно, долговечны.

person Anatoly Alekseev    schedule 12.09.2017
comment
Вам не нужна конфигурация с несколькими мастерами, что просто неправильно. Наличие двух главных узлов на самом деле очень важно для аварийного переключения. Для одного без multi-master вы берете больше времени либо MongoDB, либо вашего балансировщика нагрузки. В зависимости от того, что длиннее, количество времени, в течение которого ваши записи терпят неудачу. Не говоря уже о том, что без мультимастера нет реального способа распределить нагрузку на тяжелое приложение для записи, и теперь вам нужно координировать приоритеты балансировщика нагрузки и приоритеты MongoDB. - person Bratchley; 17.08.2018