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

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

Примечание

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

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

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

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

  • SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH — подключение с 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 и аудитом;

  • 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 Role для Corax поддерживает разделение задач на основе тегов. Задачи разделяются на требующие и не требующие привилегированных прав root. Обратите внимание: на некоторых шагах установки потребуется root-доступ.

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

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

Для настройки окружения и установки Ansible Role:

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

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

    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.

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

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

Примечание

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

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

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

    # Каталог только для хостов группы kafka, по умолчанию /KAFKADATA/
    install -d -o kafka -g kafka -m 775 /KAFKADATA/
    
    # Каталог только для хостов группы zookeeper, по умолчанию /zookeeper/
    install -d -o kafka -g kafka -m 775 /zookeeper/
    
    # Каталог для всех хостов, по умолчанию /opt/Apache/
    install -d -o kafka -g kafka -m 775 /opt/Apache/
    
  3. Установите пакеты unzip, java-11-openjdk и acl, выполнив команду yum install unzip java-11-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, разрешив сетевое взаимодействие между серверами кластера и клиентами кластера.

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

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

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

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

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

Внимание

Для установки требуется учетная запись с правами root (с помощью sudo).

all:
  vars:
    ansible_connection: ssh         # Способ подключения к серверу
    ansible_user: "sshlogin"        # Логин пользователя для доступа по ssh
    ansible_ssh_pass: "sshpassword" # Пароль пользователя для доступа по ssh
# Группа узлов, на которые будет установлена 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
# Группа узлов, на которые будет установлен 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

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

Установка Schema Registry производится с помощью Ansible-роли crxsr.

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

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

  2. Создайте каталог для группы crxsr /opt/Apache/ с правами 775 и владельцем kafka:kafka с помощью команды:

    install -d -o kafka -g kafka -m 775 /opt/Apache/
    
  3. Установите пакеты unzip, java-11-openjdk и acl, выполнив команду yum unzip install java-11-openjdk acl -y.

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

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

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

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

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

Подготовьте файл ansible inventory в каталоге $HOME/corax/kfka-deploy-x.y.z-distrib/inv/dev-inventory.yml и заполните его по шаблону ниже, указав IP адреса хостов с установленным Corax, с узлом CRXSR.

Примечание

Для установки требуется учетная запись с правами root (с помощью sudo).

all:
  vars:
    ansible_connection: ssh         # Способ подключения к серверу
    ansible_user: "sshlogin"        # Логин пользователя для доступа по ssh
    ansible_ssh_pass: "sshpassword" # Пароль пользователя для доступа по ssh
# Группа узлов, на которые будет установлена 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
# Группа узлов, на которые будет установлен 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
# Узел, на котором будет установлен Corax-SR. Требуется указать только Ansible inventory aliases (только IP адрес)
crxsr:
  10.XX.XX.XX:
    ansible_host: 10.XX.XX.XX

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

Установка Corax UI производится с помощью Ansible-роли crxui.

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

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

  2. Создайте каталог для группы crxui /opt/Apache/ с правами 775 и владельцем kafka:kafka с помощью команды:

    install -d -o kafka -g kafka -m 775 /opt/Apache/
    
  3. Установите пакеты unzip, java-11-openjdk и acl, выполнив команду yum unzip install java-11-openjdk acl -y.

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

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

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

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

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

Подготовьте файл ansible inventory в каталоге $HOME/corax/kfka-deploy-x.y.z-distrib/inv/dev-inventory.yml и заполните его по шаблону ниже, указав IP адреса хостов с установленным Corax, с узлом CRXUI.

Примечание

Для установки требуется учетная запись с правами root (с помощью sudo).

all:
  vars:
    ansible_connection: ssh         # Способ подключения к серверу
    ansible_user: "sshlogin"        # Логин пользователя для доступа по ssh
    ansible_ssh_pass: "sshpassword" # Пароль пользователя для доступа по ssh
# Группа узлов, на которые будет установлена 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
# Группа узлов, на которые будет установлен 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
# Узел, на котором будет установлен Corax-UI. Требуется указать только Ansible inventory aliases (только IP адрес)
crxui:
  10.XX.XX.XX:
    ansible_host: 10.XX.XX.XX

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

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

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

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

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

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

Подготовьте файл ansible inventory в каталоге $HOME/corax/kfka-deploy-x.y.z-distrib/inv/dev-inventory.yml и заполните его по шаблону ниже, указав IP адреса хостов с установленным Corax, с узлом CRXMM.

all:
  vars:
    ansible_connection: ssh         # Способ подключения к серверу
    ansible_user: "sshlogin"        # Логин пользователя для доступа по ssh
    ansible_ssh_pass: "sshpassword" # Пароль пользователя для доступа по ssh
    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/kfka-deploy-x.y.z-distrib/inv/dev-inventory.yml и заполните его по шаблону ниже:

all:
  vars:
    ansible_connection: ssh         # Способ подключения к серверу
    vault_ansible_ssh_user: "ssh_user"
    vault_ansible_ssh_pass: "ssh_pass"
    kafka_connect:
# Пример заполнения переменных для использования с SSL
      ssl:
        trustStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла с trustStore
        trustStorePassword: "SeCuRePaSsWorD2" # пароль от trustStore
        keyStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла с keyStore
        keyStorePassword: "SeCuRePaSsWorD2" # пароль от keyStore
        keyPassword: "SeCuRePaSsWorD2" # пароль от ключа в хранилище

# Пример добавления/удаления/изменения дополнительных свойств в конфигурационный файл 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:
  hosts:
    10.xxx.xxx.xxx:
      ansible_host: 10.xxx.xxx.xxx
    10.xxx.xxx.xxx:
      ansible_host: 10.xxx.xxx.xxx
    10.xxx.xxx.xxx:
      ansible_host: 10.xxx.xxx.xxx

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

Проверка результата#

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

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

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

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

Имя ansible-playbook

Описание

kafka-zookeeper.yml

Запускает ansible-роли zookeeper, kafka, kafka_topics, kafka_acl

kafka.yml

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

kafka_acls.yml

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

kafka_topics.yml

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

update_broker.yml

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

zookeeper.yml

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

kafka-zookeeper-sr-ui.yml

Запускает ansible-роли zookeeper, kafka, kafka_topics, kafka_acl, crxsr, crxui

kafka-zookeeper-ui.yml

Запускает ansible-роли zookeeper, kafka, kafka_topics, kafka_acl, crxui

playbooks/kafka-connect.yml

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

playbooks/kafka-connect-create.yml

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

playbooks/kafka-connect-delete.yml

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

playbooks/kafka-connect-pause.yml

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

playbooks/kafka-connect-restart.yml

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

playbooks/kafka-connect-resume.yml

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

playbooks/kafka-connect-status.yml

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

Пример запуска команды:

ansible-playbook playbooks/kafka-connect-create.yml -i inv/devops/host.yml -e security='SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN'

Обязательно указания профиля, по профилю выбирается плейбук из роли.