Интеграция с брокером сообщений Kafka

На Рис. 1 представлена схема интеграции бэкенда продукта с брокером сообщений Kafka.

kafka integration
Рис. 1. Интеграция бэкенда продукта с брокером сообщений Kafka

В рамках интеграции с брокером сообщений Kafka бэкенд продукта обеспечивает:

  • передачу данных со всех серверов управления (masters) в модуль бэкенда osmax-core;

    В брокере сообщений Kafka создается топик salt-topic — логическая единица организации данных, представляющая собой некоторое количество записей, которые называются сообщениями. Производитель, Kafka returner — модуль сервера управления (master), отправляет результаты выполнения команд и состояний, полученные от агентов (minions), в топик для дальнейшей обработки, а потребитель, модуль бэкенда продукта osmax-core, читает сообщения из него.

  • распределение запросов на установку ПО между серверами управления (masters);

    При запросе на установку ПО на агенте (minion) модуль бэкенда osmax-core отправляет HTTP-запрос, содержащий идентификатор агента (minion), на соответствующий сервер управления (master). Чтобы корректно определить сервер управления (master), модуль бэкенда osmax-core анализирует следующие сообщения о событиях SaltStack, полученные через брокер сообщений Kafka:

    • minion_ping — указывает на то, что агент (minion) только что отправил ping-запрос на сервер управления (master);

    • minion_start — указывает на то, что агент (minion) только что запустился;

    • /minion/refresh/<minion-id> — указывает на то, что была выполнена операция обновления данных на агенте (minion) с указанным идентификатором, который определяет Kafka returner при обработке сообщений.

  • регистрацию новых устройств в БД продукта;

    Модуль бэкенда osmax-provisioner получает информацию об успешной установке (устройство в статусе OS_INSTALLED — установлено), публикует информацию о нем в топике Apache Kafka provisioner-topic и переводит устройство в статус COMPLETED — выполнено.

    Модуль бэкенда osmax-core получает информацию о новом устройстве из топика provisioner-topic. Если такого устройства нет в БД, то создается новая запись о нем.

    Если при обработке сообщения возникает ошибка, то выполняются попытки обработать его повторно средствами конфигурируемого механизма retry. Если попытки повторной обработки не приводят к успеху, устройство не регистрируется в БД, а обрабатываемое сообщение перемещается в топик provisioner-dlq-topic (Dead Letter Queue) для последующей обработки администраторами системы в ручном режиме.

  • регистрацию устройств в БД продукта, на которых переустановлена ОС.

    Модуль бэкенда osmax-core передает информацию в топик osmax.core.os.reinstallation.machines об устройствах, а модуль бэкенда osmax-provisioner получает информацию об этих устройствах.

    Получив данные, osmax-provisioner регистрирует их и передает в топик osmax-provisioner.os.reinstallation.machines.registration.statuses статусы: COMPLETED — выполнено; или COMPLETED_WITH_ERROR — выполнено с ошибкой. Модуль osmax-core забирает эти данные и запускает применение формулы os-bootstrap-formula, которая выполняет подготовку к переустановке и перезапуск устройства. После этого инициируется процесс переустановки ОС.

    После переустановки ОС (или ошибки переустановки ОС) модуль osmax-provisioner передает данные отдельно по каждому устройству в топик provisioner-topic. Модуль osmax-core забирает эту информацию и актуализирует статус применения конфигурации «Переустановка ОС» к устройству.

Перед тем как настроить интеграцию необходимо:

  1. Установить Apache Kafka, следуя инструкциям в официальной документации.

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

    1. Для передачи данных с серверов управления (masters) в модуль osmax-core (например, salt-topic).

    2. Для передачи информации о новых устройствах из модуля osmax-provisioner в модуль osmax-core (например, provisioner-topic).

    3. Dead Letter Queue (DLQ) для приема сообщений, которые не были успешно обработаны модулем osmax-core в рамках регистрации информации о новых устройствах (например, provisioner-dlq-topic). Такие сообщения в дальнейшем будут обрабатываться администраторами системы.

    4. Для передачи данных из модуля osmax-core в модуль osmax-provisioner об устройствах, на которые назначена переустановка (например, osmax-core.os.reinstallation.machines).

    5. Для передачи статуса переустановки из модуля osmax-provisioner в модуль osmax-core (например, osmax-provisioner.os.reinstallation.machines.registration.statuses).

      Для топиков рекомендуется задать параметры:

      1. retention — время, в течение которого сообщения будут храниться в топике до момента удаления;

      2. partitions — способ физического разделения данных в топике на несколько частей. Эти параметры могут быть настроены в зависимости от требований к производительности и надежности системы.

Настройка интеграции выполняется в несколько шагов при установке продукта отдельно для каждого сервера управления (master) и агента (minion). Подробное описание каждого шага содержится в руководстве по установке.

Последовательность шагов:

  1. При конфигурировании сервера управления (master) выполните настройку отправки событий в топик Apache Kafka.

  2. После того как будут заданы настройки сервера управления (master), выполните настройку Kafka returner.

  3. При конфигурировании агента (minion) задайте интервал времени (ping_interval) между отправкой ping-запросов от агента (minion) на сервер управления (master).

  4. При конфигурировании модуля бэкенда osmax-core в конфигурационном файле `application.properties задайте:

  5. При конфигурировании модуля бэкенда osmax-provisioner в конфигурационном файле application.properties задайте параметры подключения к топикам Kafka.