Горячий патч работающей системы без перезагрузки
Обзор
Патч - малое горячее обновление части модулей без перезагрузки. Zip-архив содержит один или несколько модулей и, возможно, какие-то ассеты.
Такой способ применяется для малых изменений тогда, когда необходимо применить свежие исправления без ожидания технологического часа. Патч собирается для конкретной версии системы во избежание потери целостности.
При переустановке версии из дистрибутива и при обновлении все примененные ранее патчи ликвидируются.
Архивы с патчами загружаются в систему и хранятся в ее файловых разделах. Применять прошлые патчи после обновления системы противопоказано.
Процедура применения патча
Шаг 1. Авторизоваться в мастер-домен под учетной записью с ролью "admin". Открыть приложение "Настройки":
Шаг 2. Выбрать раздел "Система/Патч":
Шаг 3. Выбрать zip-архив с патчем:
Шаг 4. Загрузить выбранный архив на сервер, нажав кнопку "Загрузить". По итогу справа отобразится распакованный состав архива:
Шаг 5. Выполнить проверку загруженных файлов, нажав кнопку "Проверить".
В поле "Состояние" будет перечислен состав нод и интегральный результат проверки новых модулей на каждой серверной ноде.
Шаг 6. Инициировать применение, нажав кнопку "Применить".
В результате файлы, находящиеся в архиве, подменят собой содержимое текущего каталога с системой - именно ту его версию, которая активна. После этого все ноды применят изменения без перезагрузки.
В поле "Результат" будет перечислен состав нод и интегральный результат применения новых модулей на каждой ноде. Из результатов всех нод будет собран итоговый интегральный статус: при объединении нескольких статусов итоговым становится статус с меньшим кодом:
-
error = 1 - произошла ошибка при горячей загрузке модуля;
-
not_beam = 2 - файл, не является модулем эрланга;
-
wrong_path = 3 - путь к модулям в архиве не соответствует ожидаемому;
-
not_updated = 4 - неудачная загрузка. В этом случае для нод, в которых возникло это состояние показана перезагрузка вручную в разделе "Система/Ноды";
-
not_changed = 5 - версия модуля совпадает с уже загруженной;
-
ok = 6 - модуль загружен успешно;
-
not_loaded = 7 - модуль не загружен. Такое случается, если нода не исполняет процессы, обслуживаемые модулем. Если патч содержит модули различных конкретных микросервисов, такой статус возникает везде, и это нормально.
Шаг 7. Удалить загруженный архив с патчем, чтобы исключить его случайное применение в дальнейшем:
После этого все процессы системы либо сразу продолжат работать в новых версиях, либо на следующей итерации цикла обработки сообщений.
Ограничения
-
Патч на новую версию целиком невозможен.
-
Патч системных библиотек невозможен.
-
При заливке медиа-библиотек необходима перезагрузка части нод вручную в разделе "Система/Ноды".
-
Максимальный размер загружаемого zip-архива - 10МБ.
Патч способен нарушить целостность процессов и состояний. В этом случае потребуется откат назад (в некоторых случаях достаточно анти-патча, в других случаях это может быть сложной ручной операцией, требующей подготовки). Крайний способ - переустановка системы из docker-образа с подключением к тем же хранилищам (базам данных, брокерам, разделам и каталогам файловой системы).