Обновление MongoDB-standalone с версии 3.6 до 4.0
1. Добавление gpg-ключа для репозитария с Mongodb 4.0
1 |
# wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - |
2.Проверка, что выставлена опция совместимости с версией 3.6
Для обновления до версии 4.0 предварительно mongo должна быть версии 3.6(или обновлена до версии 3.6).
Кроме того, необходимо выставить совместимость с версией 3.6
Проверка установленной версии совместимости:
1 2 3 |
# mongo > db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) { "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 } |
Если не установлена такая версия совместимости, то устаналиваем ее командой
1 2 |
# mongo > db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) |
3.Добавление репозитария mongo с поддержкой 4.0
для Ubuntu16.04
1 |
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
для Ubuntu18.04
1 |
# echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
4.Отключение репозитария mongo с поддержкой 3.6
1 |
# nano /etc/apt/sources.list.d/mongodb-org-3.6.list |
1 |
#deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse |
5.Обновление локального кеша пакетов
1 |
# apt-get update |
6.Остановка mongodb, ее обновление с версии 3.6 до версии 4.0 и запуск
1 |
# systemctl stop mongod && apt-get upgrade -y && systemctl start mongod |
7.Проверка логов обновленной mongod
1 |
# tail -n 100 -f /var/log/mongodb/mongod.log |
После чего необходимо протестировать работоспособность приложения и если все работает корректно , установить версию совместимости до 4.0
Установка такой версии совместимости усложняет процесс отката с версии 4.0 до версии 3.6
Поэтому имеет смыл поработать на новой версии 4.0 некоторое время с опцией обратной совместимости с 3.6, после чего установить совместимость с 4.0
1 2 |
mongo> db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } ) |
Проверяем текущую установленную версию совместимости
1 2 3 |
mongo> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) { "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 } |
Источник:
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu
Обновление MongodbReplica Set с 3.6 на 4.0
Обновлять MongoDB будем на Replica Set в составе которого есть два сервера с данными mongodb(один Primary и один Secondary) и один арбитр, который не хранит в себе данных, а используется для кворума
Проверка, что выставлена опция совместимости с версией 3.6
Для обновления до версии 4.0 предварительно mongo должна быть версии 3.6(или обновлена до версии 3.6).
Кроме того, необходимо выставить совместимость с версией 3.6
Проверка установленной версии совместимости:
1 2 3 |
# mongo > db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) { "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 } |
Если не установлена такая версия совместимости, то устаналиваем ее командой
1 2 |
# mongo> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) |
Такую совместимость проверяем/выставляем на всех репликах кластера,за исключением арбитра
Сначало обновляем все SECONDARY-реплики (в данном случае он только один т.к. используется схема Primary-Secondary-Arbitre)
Обновление текущей реплики/SECONDARY
1.Перевод всех реплик на работу с протокола pv0 на протокол pv1
( в данном случае у нас только одна реплика)
1 2 3 4 |
# mongo> rs0:SECONDARY> cfg = rs.conf(); cfg.protocolVersion=1; |
т.к. это не MASTER а SECONDARY, то для записи/применения настроек необходимо использовать опцию force
1 |
rs.reconfig(cfg, {force: true}); |
2.Установка ключа, которым подписаны пакеты mongo v.4.X
1 |
# wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - |
3.Добавление репозитария с mongo v.4.0
для Ubuntu 16.04
1 |
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
для Ubuntu 18.04
1 |
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
4. Отключаение существующего репозитария с mongo v.3.6
1 |
# sed -i 's/^/#/' /etc/apt/sources.list.d/mongodb-org-3.6.list |
1 |
# cat /etc/apt/sources.list.d/mongodb-org-3.6.list |
1 |
#deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse |
5.Обновление локального кеша пакетов
1 |
# apt-get update |
6.Обновление mongodb с версии 3.6 до версии 4.0
1 |
# apt-get upgrade |
7.Перезапуск mongod, чтобы загрузился новая версия mongod-сервера
(без перезапуска только новая версия mongod-клиента применяется)
1 |
# systemctl restart mongod && systemctl status mongod |
8.Проверка логов обновленной mongod реплики
1 |
# tail -n 100 -f /var/log/mongodb/mongod.log |
Полезные команды:
Проверка конфигурации репликации
1 |
rs.conf() |
Проверка состояния репликации
1 |
rs.status() |
Проверка отставания репликации
1 |
rs.printSlaveReplicationInfo() |
Проверка текущего мастера
1 |
db.isMaster() |
Обновление текущего PRIMARY
1.Переводим его принудительно в состояние SECONDARY
1 2 |
# mongo rs.stepDown() |
2.На SECONDARY проверяем,что она стала PRIMARY
1 2 3 |
# mongo rs0:PRIMARY> db.isMaster() rs0:PRIMARY> rs.status() |
Проверяем, что была выбрана новая Primary-нода и все Secondary-ноды сейчас реплицируются с новой Primary-нодой.
Дождаться окончания процесса синхронизации всех Secondary-нод с новой Primary-нодой
После того, как проверили и убедились, что в кластере есть активный master на бывшем master, он уже стал Secondary выполняем команды:
3.Перевод mongo на работу с протокола pv0 на протокол pv1
1 2 3 4 |
# mongo rs0:SECONDARY> cfg = rs.conf(); cfg.protocolVersion=1; |
т.к. это не MASTER а SECONDARY, то для записи/применения настроек необходимо использовать опцию force
1 |
rs.reconfig(cfg, {force: true}); |
4.Добавление ключа, репозитария версии 4.0, отключение репозитария версии 3.6, обновление локального кеша пакетов, обновление mongodb
1 |
# wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - |
1 |
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
1 |
# sed -i 's/^/#/' /etc/apt/sources.list.d/mongodb-org-3.6.list |
1 |
# apt-get update && apt-get upgrade |
1 |
# systemctl restart mongod && systemctl status mongod |
1 |
# tail -f /var/log/mongodb/mongod.log |
Обновление Арбитра
1 |
# wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - |
1 |
# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
1 |
# sed -i 's/^/#/' /etc/apt/sources.list.d/mongodb-org-3.6.list |
1 |
# apt-get update && apt-get upgrade |
1 |
# systemctl restart mongod && systemctl status mongod |
1 |
# tail -f /var/log/mongodb/mongod.log |
Для принудительной перевода роли PRIMARY с текущего мастера на текущий SECONDARY на текущем PRIMARY выполняем команду
1 2 |
# mongo rs.stepDown() |
Источник:
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-replica-set
https://docs.mongodb.com/v4.0/tutorial/install-mongodb-on-ubuntu