Шаг 1. Подготовка окружения (обязательный)#

Установка выполняется с помощью ansible-сценариев путем запуска ansible-playbook из состава дистрибутива на локальном хосте для установки на локальном или удаленном хосте.

Примечание

Все действия, за исключением раздела «Подготовка хостов, на которые планируется выполнить установку», выполняются на локальном хосте. В примерах ниже рабочим каталогом для процесса установки является $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/, а файл дистрибутива размещен в $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/files/kafka-patched.zip, в соответствии с действиями по подготовке к автоматизированной установке.

При установке возможно сконфигурировать использование следующих профилей безопасности:

Профили работы с KRaft контроллером:

  • PLAINTEXT__KRAFT_PLAIN_NO_AUTH — взаимодействие между контроллером, брокером, клиентами без SSL;

  • SSL__KRAFT_SSL_WITH_AUTH__KAFKA_SSL_WITH_AUTH — взаимодействие между контроллером, брокером, клиентами c SSL;

  • SSL__KRAFT_SSL_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT — взаимодействие между контроллером, брокером, клиентами с SSL и подключенным аудитом.

Профили работы с ZooЛeeper контроллером:

  • PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH — взаимодействие между контроллером, брокером, клиентами без SSL;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH — взаимодействие между контроллером, брокером, клиентами c SSL;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT — взаимодействие между контроллером, брокером, клиентами с SSL и подключенным аудитом;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN — взаимодействие с SSL и Secret Management System (SecMan);

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT__SECMAN — взаимодействие с SSL, аудитом и Secret Management System (SecMan).

Общие требования#

При подготовке окружения убедитесь в выполнении требований:

  • Установлены пакеты unzip и JDK.

  • Предоставлен доступ по SSH-соединению между узлами управления Ansible и хостами Corax.

  • Имеются привилегированные права для создания пользователя, группы, каталогов, сервисов и прав для запуска/остановки сервисов.

Примечание

Ansible роли Corax поддерживают разделение задач на основе тегов. Задачи разделяются на требующие и не требующие привилегированных прав root. При заранее созданном окружении (пользователя, группы, каталогов) установку можно производить с тегом install или без тегов.

Последовательность действий#

Настройка виртуального окружения в Python и установка Ansible#

Для настройки окружения, установки и использование Ansible установите пакет Ansible в соответствии с системными требованиями. Рекомендуем установить пакет Ansible.

Внимание

Не рекомендуем устанавливать Ansible Core (ansible-core), у него минимальное количество модулей и плагинов. Установка пакета Ansible избавляет от ручной установки дополнительных модулей и плагинов, которые необходимы для использования Ansible ролей Corax.

Один из вариантов установки Ansible:

  • Установите виртуальное окружение:

    python -m venv $HOME/python-venv/ansible
    
  • Активируйте виртуальное окружение:

    source $HOME/python-venv/ansible/bin/activate
    
  • Установите ansible pip install ansible или pip install ansible с соответствующей системным требованиям версией:

    pip install ansible == Х.Х.Х
    

    где Х.Х.Х - версия Ansible.

  • Проверить установку ansible

    ansible --version
    

Подготовка к установке#

Подготовка хостов, на которые планируется выполнить установку#

Примечание

Имя группы и пользователя выбирается на усмотрение администратора. В данном разделе kafka используется для примера.

  1. Создайте пользователя kafka, выполнив команды:

    useradd kafka
    
  2. Создайте каталоги с правами 775 и владельцем kafka:kafka (указаны каталоги по умолчанию) с помощью команд:

    # Каталог для всех хостов, по умолчанию /opt/Apache/
    install -d -o kafka -g kafka -m 775 /opt/Apache/
    
    # Каталог только для хостов группы kafka, по умолчанию /KAFKADATA/
    install -d -o kafka -g kafka -m 775 /KAFKADATA/
    
    # Каталог только для хостов группы zookeeper, по умолчанию /zookeeper/
    install -d -o kafka -g kafka -m 775 /zookeeper/
    
    # При использовании профиля с Kraft контроллером
    # Каталог только для хостов группы zookeeper, по умолчанию /KAFKACONTROLLER
    install -d -o kafka -g kafka -m 775 /KAFKACONTROLLER
    
  3. Установите пакеты unzip, java-openjdk и acl, выполнив команду yum install unzip java-openjdk acl -y.

  4. Увеличьте лимит количества файлов, выполнив команду echo 'fs.file-max=262144' > /etc/sysctl.d/50-fs.conf и примените параметры, выполнив команду sysctl -p.

  5. Увеличьте PAM лимиты на хосте, добавив в /etc/security/limits.conf параметры

    #<domain>      <type>  <item>         <value>
    *               soft    nproc          512000
    *               hard    nproc          512000
    *               soft    nofile         512000
    *               soft    nofile         512000
    
  6. Добавьте каталог с утилитой Keytool (входит в JDK) в переменную PATH пользователя, с правами которого будет выполняться установка.

  7. Настройте Firewall, разрешив сетевое взаимодействие между серверами кластера и клиентами кластера.

Подготовка к установке#

Выполните подготовку по инструкции из раздела Подготовка элементов развертывания.

Обратите внимание, подготовка состоит из двух этапов: создание единого дистрибутива продукта и подготовка к выбранному способу установки.

Внимание

Для установки необходимо выбрать профиль работы брокера с ZooKeeper или в режиме KRaft.

Подготовка ansible inventory#

Создайте файл ansible inventory в каталоге $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml и заполните его по шаблону, указав IP адреса хостов, на которые планируется выполнять установку.

Внимание

Удалите в шаблоне группу zookeeper если используются профили:

  • PLAINTEXT__KRAFT_PLAIN_NO_AUTH — профиль для работы с KRaft контроллером и подключение без SSL;

  • SSL__KRAFT_SSL_WITH_AUTH__KAFKA_SSL_WITH_AUTH — профиль для работы с KRaft контроллером и подключение c SSL;

  • SSL__KRAFT_SSL_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT — профиль для работы с KRaft контроллером и подключение с SSL и аудитом.

Удалите в шаблоне группу kafka_controller если используются профили:

  • PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH — подключение без SSL;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH — подключение с SSL;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT — подключение с SSL и аудитом;

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN — подключение с SSL и Secret Management System (SecMan);

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT__SECMAN — подключение с SSL, аудитом и Secret Management System (SecMan).

all:
  vars:
    # Переменные, доступные для всех ролей #
    ansible_connection: ssh         # Способ подключения к серверу
    ansible_user: "sshlogin"        # Логин пользователя для доступа по ssh
    ansible_ssh_pass: "sshpassword" # Пароль пользователя для доступа по ssh
    security: ''                    # УКАЖИТЕ ПРОФИЛЬ ДЛЯ УСТАНОВКИ
    tmp_dir: "$HOME/corax-distrib"  # путь к временной директории на конечных серверах
    wait_for_start: 120             # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
    customJavaPath: false           # абсолютный путь к используемой java (false для использования java из PATH)
    kafka_user: kafka               # имя пользователя, от имени которого запускается Kafka
    kafka_group: kafka              # имя группы от имени которой запускается Kafka
    zookeeper_user: kafka           # имя пользователя, от имени которого запускается ZooKeeper
    zookeeper_group: kafka          # имя группы от имени которой запускается ZooKeeper

# ИСПОЛЬЗОВАТЬ ГРУППУ ПРИ НАЛИЧИИ СЛОВА KRAFT В ПРОФИЛЕ
# Группа узлов, на которые будет установлен KRaft controller. Требуется указать только Ansible inventory aliases (только IP адрес)
kafka_controller:
  hosts:
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX

# ИСПОЛЬЗОВАТЬ ГРУППУ КОГДА В НАЗВАНИИ ПРОФИЛЯ НЕТ СЛОВА KRAFT
# Группа узлов, на которые будет установлен ZooKeeper. Требуется указать только Ansible inventory aliases (только IP адрес)
zookeeper:
  hosts:
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX

# Группа узлов, на которые будет установлена kafka. Требуется указать только Ansible inventory aliases (только IP адрес)
kafka:
  hosts:
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX

# Узел, на котором будет установлен Corax-SR. Требуется указать только Ansible inventory aliases (только IP адрес)
crxsr:
  10.XX.XX.XX:
    ansible_host: 10.XX.XX.XX

# Узел, на котором будет установлен Corax-UI. Требуется указать только Ansible inventory aliases (только IP адрес)
crxui:
  10.XX.XX.XX:
    ansible_host: 10.XX.XX.XX

Подготовка к установке Corax Mirror Maker 2#

Установка Corax Mirror Maker 2 производится с помощью Ansible-роли crxmm на сервера с предварительно установленной Kafka.

Подготовка к установке#

Выполните подготовку по инструкции из раздела Подготовка элементов развертывания.

Обратите внимание, подготовка состоит из двух этапов: создание единого дистрибутива продукта и подготовка к выбранному способу установки.

Подготовка ansible inventory#

В подготовленный файл ansible inventory в каталоге $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml добавьте группу crxmm c IP адресами хостов и группу переменных crxmm добавить в all-vars, как в примере:

all:
  vars:
    crxmm:
      config:
        property:
          "destination.bootstrap.servers": "10.XX.XX.XX:YYYY"
          "source.bootstrap.servers": "10.XX.XX.XX:YYYY"
          "source->destination.topics": "<topic 1>[,<topic N>]"
      custom_property:
          - key: "sync.topic.acls.enabled"
            value: "false"
            state: 'present'
          - key: "sync.topic.acls.interval.seconds"
            value: "120"
            state: 'present'
crxmm:
  hosts:
    10.XX.XX.XX:
      ansible_host: 10.XX.XX.XX

Подготовка к установке Kafka Connect для работы с S3#

Установка производится с помощью Ansible-роли kafka_connect на сервера с предварительно установленной Kafka.

Подготовка к установке#

Выполните подготовку по инструкции из раздела Подготовка элементов развертывания.

Обратите внимание, подготовка состоит из двух этапов: создание единого дистрибутива продукта и подготовка к выбранному способу установки.

Подготовка ansible inventory#

В подготовленный файл ansible inventory в каталоге $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml добавьте группу kafka_connect c IP адресами хостов и группу переменных kafka_connect добавить в all-vars, как в примере:

all:
  vars:
    kafka_connect:
# Пример добавления/удаления/изменения дополнительных свойств в конфигурационный файл connect-s3.properties
      config:
        custom_properties: []
# Примеры
#         - { key: "key.converter" , value: "ru.sbrf.kafka.connect.EncryptedByteArrayConverter", state: "absent" }
#         - { key: "key.converter.password" , value: "qwe123" }
#         - { key: "value.converter.password" , value: "qwe123" }
#         - { key: "header.converter.password" , value: "qwe123" }

# Пример для создания коннекторов
      connectors:
        # Пример коннектора для сохранения сообщений из топика в S3
        - name: "s3-sink-byte" # имя коннектора
          topics: "byteSink"   # имя топика для резервного копирования
          "connector.class": "io.lenses.streamreactor.connect.aws.s3.sink.S3SinkConnector" # класс для взаимодействия с S3
          "connect.s3.kcql": "insert into connect select * from byteSink STOREAS `BYTES` PROPERTIES ('flush.count'=1)" # Запрос по выбору сообщений из топика для сохранения в S3
          "tasks.max": "1" # Количество задач в коннекторе
          "initial_state": "STOPPED" # Первоначальное состояние коннектора
          # Классы конвертации сообщений из топика
          "key.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          "value.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          "header.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          # Параметры подключения к хранилищу S3
          "connect.s3.custom.endpoint": 'http://10.40.12.60:8082'
          "connect.s3.vhost.bucket": 'true'
          "connect.s3.aws.auth.mode": 'Credentials'
          "connect.s3.aws.region": 'eu-west-2'
          "connect.s3.aws.access.key": 'none'
          "connect.s3.aws.secret.key": 'none'

        # Пример коннектора для восстановления сообщений из S3 в топик
        - name: "s3-source-byte"
          topics: "byteSource"
          "connector.class": "io.lenses.streamreactor.connect.aws.s3.source.S3SourceConnector"
          "connect.s3.kcql": "insert into byteSource select * from connect STOREAS `BYTES`"
          "tasks.max": "1"
          "initial_state": "STOPPED"
          "key.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          "value.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          "header.converter": "org.apache.kafka.connect.converters.ByteArrayConverter"
          "connect.s3.custom.endpoint": 'http://10.40.12.60:8082'
          "connect.s3.vhost.bucket": 'true'
          "connect.s3.aws.auth.mode": 'Credentials'
          "connect.s3.aws.region": 'eu-west-2'
          "connect.s3.aws.access.key": 'none'
          "connect.s3.aws.secret.key": 'none'

#Указывается адрес сервера на который будет установлен kafka-connect
kafka_connect:
  hosts:
    10.xxx.xxx.xxx:
      ansible_host: 10.xxx.xxx.xxx

Описание ansible-playbook из состава дистрибутива#

Имя ansible-playbook

Описание

kafka-crxui-crxsr.yml

Запускает ansible-роли zookeeper, kafka_controller, kafka, kafka_topics, kafka_acl в зависимости от групп и переменных в inventory-файле

zookeeper.yml

Запускает ansible-роль zookeeper (установка ZooKeeper)

kraft-controller.yml

Запускает ansible-роль kafka_controller (установка KRAFT Controller)

kafka.yml

Запускает ansible-роль kafka (установка kafka)

kafka_acls.yml

Запускает ansible-роль kafka_acl (создание списка доступа к топикам)

kafka_topics.yml

Запускает ansible-роль kafka_topics (создание топиков)

crxsr.yml

Запускает ansible-роль crxsr (для установки SCHEMA-REGISTRY)

crxui.yml

Запускает ansible-роль crxui (для установки UI)

Дополнительные ansible-playbook

crxmm.yml

Запускает ansible-роль crxmm (для установки Corax Mirror Maker 2)

kafka-connect.yml

Запускает ansible-роль kafka_connect (для установки Kafka Connect)

generate_all_defaults.yml

Создает файл со всеми переменными из ansible-ролей

change_ip_on_fqdn.yml

Плейбук для изменения ip-адресов на fqdn-имена в конфигурационных файлах

kill_kafka_process.yml

Плейбук для остановки всех процессов Kafka

kafka-connect-create.yml

Плейбук для создания коннекторов

kafka-connect-delete.yml

Плейбук для удаления коннекторов

kafka-connect-pause.yml

Плейбук для остановки коннекторов

kafka-connect-restart.yml

Плейбук для перезапуска коннекторов

kafka-connect-resume.yml

Плейбук для возобновления работы коннекторов после остановки

kafka-connect-status.yml

Плейбук для вывода статуса коннекторов

kafka-connect-create.yml

Плейбук для создания коннекторов

rolling_update_broker.yml

Запускает ansible-роль update_broker (обновление брокеров поочередно)

restart.yml

Перезапуск процессов Kafka

Проверка подготовительных работ#

  1. Проверьте, что Ansible установлен, выполнив команду ansible --version. Должна отобразиться версия Ansible.

  2. Проверьте, что существует каталог с файлами для установки через Ansible: $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/files/.

  3. Проверьте, что существует каталог с inventory-файлами: $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/.

Пример команды для запуска ansible-playbook#

Внимание

Запуск ansible-playbook производить из каталога $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b.

ansible-playbook playbooks/kafka-crxui-crxsr.yml -i inv/stand-corax.yml -e security='PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH'