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

Что происходит с операциями чтения / записи во время автоматического переключения клиента на отказ в репликации MongoDB

Мы настроили конфигурацию набора репликации с 3 узлами для MongoDB. Я хочу знать, что происходит с операциями чтения / записи во время первичного переключения. Чтобы быть более точным, несколько операций чтения / записи были выполнены для основного узла от клиентов. Также было инициировано переключение первичной обмотки.

  1. Что будет с этими операциями чтения / записи?
  2. Обеспечивает ли MongoDB обслуживание этих запросов до того, как будут отключены основные функции и начнется процесс выборов?
  3. Что произойдет с новыми запросами на чтение / запись от клиентов во время процесса выборов?
  4. Заботится ли собственный драйвер nodejs для MongoDB об автоматическом переключении клиента на отказ? А также, как он обрабатывает новые запросы чтения / записи во время процесса переключения?

а) Они явно не работают. Вы несете ответственность за это. Я стараюсь повторить операцию после короткого периода отсрочки, если исключение / ошибка указывает, что операция не удалась из-за сбоя связи.

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

c) Драйверы знают, что они подключены к набору реплик. Если основной уйдет вниз, водитель заметит. Нет первичного = нет операций записи. Любая операция записи, выполненная без основного, завершится ошибкой с соответствующим сообщением. Согласно чтению это зависит от вашего читать предпочтения. Читает с предпочтением primary очевидно, произойдет сбой, пока нет основного, все остальные предпочтения чтения будут успешными. Обычно я отправляю свой запрос с предпочтением чтения по умолчанию primary и когда он падает из-за отсутствия первичного элемента, я повторно отправляю запрос с предпочтением чтения secondaryPreferred (для того редкого случая, когда первичный вышел из строя, а первый вторичный вышел из строя во время обработки исходной ошибки).

г) Я не эксперт по узлам, но драйвер узла поддерживается корпорацией Inc, поэтому можно с уверенностью предположить, что он поддерживает набор реплик и соответствует стандартам, описанным выше.