Не удается обновить набор реплик Mongodb с 3.6 -> 4.0 (проводные версии несовместимы)

#mongodb

#mongodb

Вопрос:

у меня есть производительный набор реплик mongodb (3 участника), запущенный в версии 3.6. Как и следует из названия, я хочу обновиться до версии 4.0. Я следовал инструкциям здесь:https://docs.mongodb.com/manual/release-notes/4.0-upgrade-replica-set Поэтому для setFeatureCompatibilityVersion установлено значение «3.6», а для версии протокола набора реплик уже установлено значение pv1. Инструкции содержат инструкции по закрытию участника, обновлению двоичных файлов, перезапуску и повторному подключению к набору реплик. По очереди с каждым элементом набора реплик.

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

Я уже использовал этот метод при обновлении с версии 3.4 до 3.6, и он отлично работает.

Теперь на самом деле проблема:

Я добавляю четвертого участника с версией 4.0 в свой набор реплик 3.6 с помощью rs.add("serverip") и команды sad «ok». Но когда я просматриваю статус набора реплик, новым участником является «(недоступен / исправен)», а последнее сообщение о сердцебиении грустное «Минимальная и максимальная проводные версии сервера несовместимы (7,7) с минимальной проводной версией клиента (6,6)»

Что я здесь делаю не так? Я не нахожу много информации о «проводных версиях» и о том, что на них влияет или настраивается. Итак, как мне «обновить» эти проводные версии в моем существующем наборе реплик до 7 или как я могу заставить нового участника версии 4.0 использовать версию 6?

Ответ №1:

Проводная версия — это, по сути, другой способ представления версии сервера. 6 равно 3.6, 7 равно 4.0.

В сообщении говорится о том, что клиенту (я предполагаю, что внутренний клиент на сервере, который взаимодействует с другими узлами) требуется, чтобы сервер был точно 3.6.

Для меня это немного странное сообщение, поскольку во время двоичной замены у вас должны быть некоторые узлы с проводной версией 6, а некоторые с 7. Возможно, FCV каким-то образом учитывается по-другому.

В любом случае вы не можете добавить узел 4.0, потому что для него установлено значение FCV 4.0, а для всех ваших других узлов — 3.6 FCV. Если вы хотите добавить новый узел, вы должны добавить его с двоичным файлом 3.6, синхронизировать с ним данные, пока ваш RS находится в версии 3.6, затем выполнить обновление, следуя указанным инструкциям, с дополнительным узлом.

Комментарии:

1. С другой стороны, вы можете запустить свой узел 4.0 как автономный (без параметров конфигурации replset), вручную установить его FCV на «3.6», затем завершить работу, перенастроить с использованием информации о наборе реплик и перезапустить. Это позволит узлам 3.6 взаимодействовать с ним.