Назад | Перейти на главную страницу

Как изменить мастер в кластере MongoDB без перезапуска процесса?

Чтение документации MongoDB о том, как настроить конфигурацию ведущего-ведомого кластера (в нашем кластере будет более 12 узлов, поэтому, к сожалению, у нас не может быть конфигурации с набором реплик), как я могу повысить ведомое устройство до ведущего без нужно остановить любой процесс?

Есть ли какая-нибудь команда, которую мы можем использовать, например, команда slaveof в Redis, которая позволяет нам повышать подчиненное устройство до главного без необходимости перезапускать процесс?

Это то, что мы нашли в документации MongoDB (http://docs.mongodb.org/manual/core/master-slave/):

Для постоянного переключения с недоступного или поврежденного ведущего устройства (A в следующем примере) на ведомое устройство (B):

Выключите A. Остановите mongod на B. Создайте резервную копию и переместите все файлы данных, которые начинаются с local на B, из dbpath. Предупреждение Удаление локального. * Является безотзывным и не может быть отменено. Выполняйте этот шаг с особой осторожностью. Перезапустите mongod на B с параметром --master. Примечание. Это однократная операция, которую нельзя отменить. A не может стать подчиненным для B, пока не завершит полную повторную синхронизацию.

Неужели это единственный способ?

Да, это действительно способ смены роли. Есть причина, по которой Master / Slave устарел в пользу наборов реплик. в Мастер / Раб В документации они предоставляют метод имитации поведения ведущего / ведомого устройства с использованием наборов реплик и двух узлов. Если вы настроите это таким образом, вы можете получить горячую замену режима с помощью простой команды из консоли Mongo.

{ _id : 'replSet', members : [ { _id : 0, host : "mongomaster", priority : 0},
                               { _id : 1, host : "mongoslave", priority : 1 } ]
}

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

Дополнение к ответу системных администраторов, чтобы прояснить ваш вопрос в комментариях:

Нет, в настоящее время (начиная с версии 2.4) нет возможности выйти за пределы 12 узлов в наборе реплик. Вы можете изучить использование Соединитель Mongo иметь несколько наборов, хотя как возможное решение. Соединитель позволяет вам воспроизводить операции из одного набора в другом наборе, по сути, путем отслеживания журнала операций (как в целом работает репликация). Однако это будет означать, что решение любых проблем синхронизации между кластерами не будет автоматическим и, по сути, будет зависеть от вас.

Для справки: соответствующий вопрос для голосования / наблюдения за увеличением предела в 12 узлов: СЕРВЕР-3110 - в настоящее время он запланирован для 2.5.x (текущая нестабильная ветвь разработки), но, как и все подобные вещи, пока он не будет зафиксирован и в стабильном выпуске, вы не можете точно сказать, когда это будет сделано.