Шаг 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 используется для примера.
Создайте пользователя
kafka, выполнив команды:useradd kafkaСоздайте каталоги с правами
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Установите пакеты unzip, java-openjdk и acl, выполнив команду
yum install unzip java-openjdk acl -y.Увеличьте лимит количества файлов, выполнив команду
echo 'fs.file-max=262144' > /etc/sysctl.d/50-fs.confи примените параметры, выполнив командуsysctl -p.Увеличьте PAM лимиты на хосте, добавив в
/etc/security/limits.confпараметры#<domain> <type> <item> <value> * soft nproc 512000 * hard nproc 512000 * soft nofile 512000 * soft nofile 512000Добавьте каталог с утилитой Keytool (входит в JDK) в переменную
PATHпользователя, с правами которого будет выполняться установка.Настройте 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 |
Описание |
|---|---|
|
Запускает ansible-роли zookeeper, kafka_controller, kafka, kafka_topics, kafka_acl в зависимости от групп и переменных в inventory-файле |
|
Запускает ansible-роль zookeeper (установка ZooKeeper) |
|
Запускает ansible-роль kafka_controller (установка KRAFT Controller) |
|
Запускает ansible-роль kafka (установка kafka) |
|
Запускает ansible-роль kafka_acl (создание списка доступа к топикам) |
|
Запускает ansible-роль kafka_topics (создание топиков) |
|
Запускает ansible-роль crxsr (для установки SCHEMA-REGISTRY) |
|
Запускает ansible-роль crxui (для установки UI) |
Дополнительные ansible-playbook |
|
|
Запускает ansible-роль crxmm (для установки Corax Mirror Maker 2) |
|
Запускает ansible-роль kafka_connect (для установки Kafka Connect) |
|
Создает файл со всеми переменными из ansible-ролей |
|
Плейбук для изменения ip-адресов на fqdn-имена в конфигурационных файлах |
|
Плейбук для остановки всех процессов Kafka |
|
Плейбук для создания коннекторов |
|
Плейбук для удаления коннекторов |
|
Плейбук для остановки коннекторов |
|
Плейбук для перезапуска коннекторов |
|
Плейбук для возобновления работы коннекторов после остановки |
|
Плейбук для вывода статуса коннекторов |
|
Плейбук для создания коннекторов |
|
Запускает ansible-роль update_broker (обновление брокеров поочередно) |
|
Перезапуск процессов Kafka |
Проверка подготовительных работ#
Проверьте, что Ansible установлен, выполнив команду
ansible --version. Должна отобразиться версия Ansible.Проверьте, что существует каталог с файлами для установки через Ansible:
$HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/files/.Проверьте, что существует каталог с 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'