Горячий патч работающей системы без перезагрузки

Обзор

Патч - малое горячее обновление части модулей без перезагрузки. Zip-архив содержит один или несколько модулей и, возможно, какие-то ассеты.

Такой способ применяется для малых изменений тогда, когда необходимо применить свежие исправления без ожидания технологического часа. Патч собирается для конкретной версии системы во избежание потери целостности.

При переустановке версии из дистрибутива и при обновлении все примененные ранее патчи ликвидируются.

Архивы с патчами загружаются в систему и хранятся в ее файловых разделах. Применять прошлые патчи после обновления системы противопоказано.

Процедура применения патча

Шаг 1. Авторизоваться в мастер-домен под учетной записью с ролью "admin". Открыть приложение "Настройки":

root

Шаг 2. Выбрать раздел "Система/Патч":

patch 01

Шаг 3. Выбрать zip-архив с патчем:

patch 02

Шаг 4. Загрузить выбранный архив на сервер, нажав кнопку "Загрузить". По итогу справа отобразится распакованный состав архива:

patch 03

Шаг 5. Выполнить проверку загруженных файлов, нажав кнопку "Проверить".

В поле "Состояние" будет перечислен состав нод и интегральный результат проверки новых модулей на каждой серверной ноде.

patch 04

Шаг 6. Инициировать применение, нажав кнопку "Применить".

В результате файлы, находящиеся в архиве, подменят собой содержимое текущего каталога с системой - именно ту его версию, которая активна. После этого все ноды применят изменения без перезагрузки.

В поле "Результат" будет перечислен состав нод и интегральный результат применения новых модулей на каждой ноде. Из результатов всех нод будет собран итоговый интегральный статус: при объединении нескольких статусов итоговым становится статус с меньшим кодом:

  • error = 1 - произошла ошибка при горячей загрузке модуля;

  • not_beam = 2 - файл, не является модулем эрланга;

  • wrong_path = 3 - путь к модулям в архиве не соответствует ожидаемому;

  • not_updated = 4 - неудачная загрузка. В этом случае для нод, в которых возникло это состояние показана перезагрузка вручную в разделе "Система/Ноды";

  • not_changed = 5 - версия модуля совпадает с уже загруженной;

  • ok = 6 - модуль загружен успешно;

  • not_loaded = 7 - модуль не загружен. Такое случается, если нода не исполняет процессы, обслуживаемые модулем. Если патч содержит модули различных конкретных микросервисов, такой статус возникает везде, и это нормально.

patch 05

Шаг 7. Удалить загруженный архив с патчем, чтобы исключить его случайное применение в дальнейшем:

patch 06

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

Ограничения

  • Патч на новую версию целиком невозможен.

  • Патч системных библиотек невозможен.

  • При заливке медиа-библиотек необходима перезагрузка части нод вручную в разделе "Система/Ноды".

  • Максимальный размер загружаемого zip-архива - 10МБ.

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