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

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

Примечание:

Все действия, за исключением раздела «Подготовка хостов, на которые планируется выполнить установку», выполняются на локальном хосте. В примерах ниже рабочим каталогом для процесса установки является /tmp/installer/, а файл дистрибутива размещен в /tmp/installer/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 сценариев из дистрибутива#

  1. Распакуйте дистрибутив командой unzip /tmp/installer/distrib.zip -d /tmp/installer/distrib/.

  2. Распакуйте архив с ansible сценариями командой unzip /tmp/installer/distrib/kfka-deploy-<версия продукта>-distrib.zip -d /tmp/installer/ansible/.

  3. Переместите zip архив с дистрибутивом командой mv /tmp/installer/distrib.zip /tmp/installer/ansible/files/.

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

Подготовьте файл ansible inventory в каталоге /tmp/installer/ansible/inventories/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 сценариев из дистрибутива#

  1. Распакуйте дистрибутив командой unzip /tmp/installer/distrib.zip -d /tmp/installer/distrib/.

  2. Распакуйте архив с ansible сценариями командой unzip /tmp/installer/distrib/kfka-deploy-<Platform V Corax version>-distrib.zip -d /tmp/installer/ansible/.

  3. Переместите zip архив с дистрибутивом командой mv /tmp/installer/distrib.zip /tmp/installer/ansible/files/.

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

Подготовьте файл ansible inventory в каталоге /tmp/installer/ansible/inventories/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 сценариев из дистрибутива#

  1. Распакуйте дистрибутив командой unzip /tmp/installer/distrib.zip -d /tmp/installer/distrib/.

  2. Распакуйте архив с ansible сценариями командой unzip /tmp/installer/distrib/kfka-deploy-<Platform V Corax version>-distrib.zip -d /tmp/installer/ansible/.

  3. Переместите zip архив с дистрибутивом командой mv /tmp/installer/distrib.zip /tmp/installer/ansible/files/.

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

Подготовьте файл ansible inventory в каталоге /tmp/installer/ansible/inventories/DEV/inventory.ini и заполните его по шаблону ниже, указав 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 сценариев из дистрибутива#

  1. Распакуйте дистрибутив командой unzip /tmp/installer/distrib.zip -d /tmp/installer/distrib/.

  2. Распакуйте архив с ansible сценариями командой unzip /tmp/installer/distrib/kfka-deploy-<Platform V Corax version>-distrib.zip -d /tmp/installer/ansible/.

  3. Переместите zip архив с дистрибутивом командой mv /tmp/installer/distrib.zip /tmp/installer/ansible/files/.

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

Подготовьте файл ansible inventory в каталоге /tmp/installer/ansible/inventories/crx-mirror-maker.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 сценариев из дистрибутива#

  1. Распакуйте дистрибутив командой unzip /tmp/installer/distrib.zip -d /tmp/installer/distrib/.

  2. Распакуйте архив с ansible сценариями командой unzip /tmp/installer/distrib/kfka-deploy-<Platform V Corax version>-distrib.zip -d /tmp/installer/ansible/.

  3. Переместите zip архив с дистрибутивом командой mv /tmp/installer/distrib.zip /tmp/installer/ansible/files/.

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

Подготовьте файл ansible inventory в каталоге /tmp/installer/ansible/inventories/.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" # путь от inventories/_стенд_/ до файла с trustStore 
        trustStorePassword: "SeCuRePaSsWorD2" # пароль от trustStore
        keyStorePath: "ssl/kafka.jks" # путь от inventories/_стенд_/ до файла с 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: /tmp/installer/ansible/files/.

  3. Проверьте, что существует каталог с inventory-файлами: /tmp/installer/ansible/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 inventories/devops/host.yml -e security='SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN'

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