Перейти к содержанию

Корректное выключение узлов

Общая информация

Данная статья описывает один из возможных вариантов интеграции SpaceVM с использованием RestAPI для тех случаев, когда серверное оборудование подключено к UPS, события которого фиксируются и обрабатываются внешней системой мониторинга.

Основная функция UPS — защита системы от кратковременных потерь электричества. После прекращения подачи электричества от АС, UPS переводит питание оборудования на аккумуляторы. За время их работы необходимо либо активировать генератор для восстановления источника постоянного питания, либо послать сигнал на корректное выключение оборудования.

Корректное выключение

Во избежание потери данных по причине отключения питания оборудования, необходимо корректное выключение узлов инфраструктуры.
Некоторым процессам ВМ требуется продолжительное время для корректного завершения работы.

Для контроля времени работы оборудования на питании от аккумуляторов, UPS предоставляют интерфейс для получения событий и метрик, где наиболее важными характеристиками являются:

  • факт перехода на питание от аккумуляторов или возвращение питания от AC;

  • среднее расчетное время работы аккумуляторов при текущей нагрузке (runtime);

  • время, прошедшее с момента потери питания от AC и перехода к питанию от аккумуляторов (режим on_battery).

Характеристика runtime

UPS характеристика runtime является неточной, поскольку нагрузка на батареи динамическая.

В связи с этим рекомендуется использовать метрику, показывающую текущее время работы UPS на питании от аккумуляторов.

Сценарий использования:

  • Питание UPS от АС прекратилось.

  • UPS перешел на питание от аккумуляторов.

  • По истечению заданного времени:

    • питание от АС не восстановилось;

    • резервный генератор электричества не включился (или отсутствует).

  • Инициация корректного выключения всех ВМ и узлов SpaceVM.


Порядок действий

Создание роли

Для реализации описанной возможности необходимо создать пользовательскую роль, которая будет иметь доступ только к функциям выключения узлов.

  • Открыть раздел Безопасность - Роли.

  • Нажать кнопку Добавить и заполнить поля:

    • Название: UPS-shutdown-role.

      Примечание

      Название роли UPS-shutdown-role приведено в качестве примера. Допускается иное именование роли.

    • Число приоритета: первый свободный после 100.

    • Тип: Administrator.

  • Подтвердить создание роли кнопкой ОК.

image


Редактирование разрешений

  • Открыть раздел Безопасность - Роли.

  • Открыть подробный просмотр созданной роли нажатием на ее имя.

  • В открывшемся окне перейти в раздел Разрешения.

  • Деактивировать все разрешения, установленные по умолчанию.

  • Нажать на Фильтр, указать для параметра Действие значение set-status и нажать Применить.

  • Активировать разрешения:

    • Действие: set-status, Метод: post, Приложение: cluster.

    • Действие: set-status, Метод: post, Приложение: node.

  • Нажать Сохранить в верхней части окна.

image


Создание пользователя

  • Открыть раздел Безопасность - Пользователи.

  • Нажать кнопку Добавить пользователя

  • В открывшемся окне заполнить поля:

    • Логин: UPS-shutdown-role.

      Примечание

      Логин пользователя UPS-shutdown-role приведен в качестве примера. Допускается иное именование.

    • Выбор ролей: название роли, указанное на шаге создания роли.

    • Остальные поля заполнить опционально.

image


Создание ключа интеграции

  • Открыть раздел Безопасность - Пользователи.

  • Открыть подробный просмотр созданного пользователя нажатием на имя.

  • В открывшемся окне перейти в раздел Ключи интеграции.

  • Нажать кнопку Создать ключ.

  • В открывшемся окне заполнить поля:

    • Приложение для интеграции: UPS-shutdown-role.

      Примечание

      Приложение для интеграции UPS-shutdown-role приведено в качестве примера. Допускается иное именование.

    • Ключ интеграции: нажать кнопку Сгенерировать ключ.

      Важно

      Для дальнейших действий необходимо скопировать сгенерированный ключ интеграции.

      Примечание

      Время жизни ключа интеграции составляет 10 лет.

    • (Опционально) IP-адрес: указать IP-адрес сервиса мониторинга, который будет взаимодействовать с API.

image


Написание cURL запроса

Выбор способа выключения (одного узла / всех узлов кластера) зависит от того, как реализовано подключение UPS в инфраструктуре. Например, если все узлы кластера подключены к одному UPS, возможно использование функции выключения всех узлов кластера - /api/clusters/XXX/set-status/.
В ином случае следует выключать узлы по отдельности - /api/nodes/XXX/set-status/.

Для выключения узлов необходимо выполнить соответствующий HTTP-запрос с использованием ранее сгенерированного ключа интеграции для работы с API.


Пример

Примечание

В примере ниже используется вариант выключения узла с UUID b69f23e6-cf5a-46d0-be84-1ca2d764d64e.

  • Определить UUID кластера/узла (в зависимости от выбранного способа выключения):

    • Перейти в раздел Кластеры/Серверы.

    • Открыть подробный просмотр выбранного кластера/узла нажатием на имя.

    • Навести курсор мыши на id.

    • В всплывающем окне указан UUID выбранной сущности. Нажать кнопку Копировать.

image

  • Создать JSON-файл (например, status.json), который будет использован в качестве payload:

    {
      "domains_shutdown": true,
      "domains_shutdown_timeout": 360,
      "shutdown": true,
      "reason": "UPS: the node shutdown process is initiated by transitioning to the on_battery state",
      "power_on_activate": true
    }
    

    Примечание

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

  • В скрипт, осуществляющий передачу управления для выключения узлов, необходимо добавить HTTP-запрос, включающий ранее созданный JSON-файл:

    curl -X POST \
    -H "Content-Type: application/json" \
    -d @shutdown.json ${HOST}/api/nodes/b69f23e6-cf5a-46d0-be84-1ca2d764d64e/set-status/
    -H "Authorization: jwt ${JWT}"