Шаг 2. Установка контроллера (kraft controller или zookeeper) и брокера (kafka)#
Порядок установки#
Подготовка конфигурации для использования#
Перед установкой выполните действия, приведенные в разделе Подготовка окружения.
Изменение параметров установки и параметров работы контроллера (kraft controller или zookeeper) и брокера (kafka)#
В созданном файле $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml, при необходимости можно переназначать параметры установки,
добавляя в раздел all-vars структуру:
zookeeper:
distr: "kafka-patched.zip" # путь до приложения относительно /files
installdir: "/opt/Apache/kafka" # абсолютный путь на конечном сервере до приложения
logdir: "/opt/Apache/kafka/logs" # абсолютный путь на конечном сервере до логов приложения
datadir: "/zookeeper" # абсолютный путь на конечном сервере до данных приложения
cleanLog: "true" # очистить путь до логов при установке
cleanData: "true" # очистить путь до данных при установке
xms: "128m" # начальный heap size
xmx: "1G" # максимальный heap size
port: "2181" # используемый порт
kafka_controller:
distr: "kafka-patched.zip" # путь до приложения относительно /files
installdir: "/opt/Apache/controller" # абсолютный путь на конечном сервере до приложения
tmpdir: "/opt/Apache/.new_release" # абсолютный путь на конечном сервере до приложения
logdir: "/opt/Apache/controller/logs" # абсолютный путь на конечном сервере до логов приложения
datadir: "/KAFKACONTROLLER" # абсолютный путь на конечном сервере до данных приложения (через запятую, если путей несколько)
cleanLog: "false" # очистить путь до логов при установке
cleanData: "false" # очистить путь до данных при установке
xms: "128m" # начальный heap size
xmx: "1G" # максимальный heap size
port: "2181" # используемый порт
kafka:
distr: "kafka-patched.zip" # путь до приложения относительно /files
installdir: "/opt/Apache/kafka" # абсолютный путь на конечном сервере до приложения
logdir: "/opt/Apache/kafka/logs" # абсолютный путь на конечном сервере до логов приложения
datadir: "/KAFKADATA" # абсолютный путь на конечном сервере до данных приложения (через запятую, если путей несколько)
cleanLog: "false" # очистить путь до логов при установке
cleanData: "false" # очистить путь до данных при установке
xms: "256m" # начальный heap size
xmx: "5G" # максимальный heap size
port: "9093" # используемый порт
jmx:
port: "7010" # порт для подключения по JMX
users: # переменные для генерации доступов. Если переменная не определена, то текущие доступы не меняются
- user: "myuser"
access: "readonly"
password: "mypassword"
Дополнительные параметры для использования профилей с SSL#
Подготовка для использования профилей с SSL состоит из:
Подготовка X509 сертификата
Подготовка X509 сертификата
Могут применяться два вида X509 сертификатов:
самоподписанные (допускается для тестовых установок);
подписанные корпоративным CA (рекомендуется для промышленных установок).
Для подготовки X509 сертификата необходимо создать два JKS хранилища:
server.kafka.jks– хранилище ключей, содержащее сертификат и приватный ключ;truststore.kafka.jks– хранилище доверенных сертификатов, содержащее только сертификат корневого CA без приватного ключа изserver.kafka.jks.
Создание хранилищ с самоподписанным сертификатом
Для создания хранилищ с использованием самоподписанного сертификата выполните шаги:
Создайте каталог командой:
mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/и перейдите в него командой:
cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/sslСоздайте JKS хранилище с сертификатом и приватным ключом командой:
keytool -genkey -keyalg RSA -keysize 2048 -storetype JKS -alias kafka -keystore server.kafka.jks -validity 3650 -keypass <keyPassword> -storepass <keyStorePassword> -dname "CN=kafka, OU=kafka, O=kafka"Извлеките сертификат без приватного ключа из JKS во временный файл
kafka.exportкомандой:keytool -exportcert -keystore server.kafka.jks -alias kafka -file kafka.export -storepass <keyStorePassword>Импортируйте сертификат в
truststore.kafka.jksкомандой:keytool -import -keystore truststore.kafka.jks -alias kafka -file kafka.export -storepass <trustStorePassword> -noprompt -storetype JKSУдалите временный файл
kafka.export, созданный на шаге 3.
Создание хранилищ с сертификатом, подписанным корпоративным CA
Правила и алгоритм выпуска X509 сертификатов в различных организациях может отличаться. Далее описаны основные этапы подготовки конфигурации с использованием X509 сертификата, подписанного корпоративным CA:
Создайте каталог командой:
mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/и перейдите в него командой:
cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/sslСоздайте JKS хранилище с сертификатом и приватным ключом командой:
keytool -genkey -keyalg RSA -keysize 2048 -storetype JKS -alias kafka -keystore server.kafka.jks -validity 3650 -keypass <keyPassword> -storepass <keyStorePassword> -dname "CN=kafka, OU=kafka, O=kafka"Сгенерируйте запрос на сертификат (CSR) командой:
keytool -certreq -keystore server.kafka.jks -alias kafka -file server.kafka.csr -storepass <keyStorePassword> -ext ExtendedKeyUsage=serverAuth,clientAuthПолученный файл
server.kafka.csrподпишите в корпоративном CA. После подписания сертификата потребуются четыре файла:server.kafka.cer— cертификат в форматеcer, полученный в корпоративом CA;server.kafka.jks— хранилище, созданное на шаге 2;ca1.cer— сертификат корневого CA, полученный в корпоративом CA;ca2.pem(опционально) — cертификат промежуточного CA (может отсутствовать), полученный в корпоративом CA.
Добавьте сертификат
server.kafka.cer, полученный в корпоративом удостоверяющем центре, в созданное на шаге 2 хранилищеserver.kafka.jksкомандой:keytool -import -keystore server.kafka.jks -alias kafka -file server.kafka.cer -storepass <keyStorePassword> -noprompt -storetype JKSПодготовьте
truststore.kafka.jksс X509 сертификатом корневого CA командой:keytool -import -keystore truststore.kafka.jks -alias root -file ca1.cer -storepass <trustStorePassword> -noprompt -storetype JKS keytool -import -keystore truststore.kafka.jks -alias root -file ca2.cer -storepass <trustStorePassword> -noprompt -storetype JKSОпционально. Удалите все файлы из каталога
$HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/, кромеtruststore.kafka.jksиserver.kafka.jks, командой:
ls | grep -v "*.jks" | xargs rm -f
Подготовка ansible vars#
В созданном файле $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml, добавить параметры для работы с SSL:
zookeeper:
trustStorePath: "ssl/zookeeper.jks" # путь от inventories/_стенд_/ до файла с trustStore
trustStorePassword: "changeit" # пароль от trustStore
keyStorePath: "ssl/zookeeper.jks " # путь от inventories/_стенд_/ до файла с keyStore
keyStorePassword: "changeit" # пароль от keyStore
kafka_controller:
trustStorePath: "ssl/kafka_conroller.jks" # путь от inventories/_стенд_/ до файла с trustStore (или абсолютный на сервере при needUploadJks: false)
trustStorePassword: "changeit" # пароль от trustStore
keyStorePath: "ssl/kafka_conroller.jks" # путь от inventories/_стенд_/ до файла с keyStore (или абсолютный на сервере при needUploadJks: false)
keyStorePassword: "changeit" # пароль от keyStore
keyPassword: "changeit" # пароль от ключа в хранилище
kafka:
trustStorePath: "ssl/kafka.jks" # путь от inventories/_стенд_/ до файла с trustStore (или абсолютный на сервере при needUploadJks: false)
trustStorePassword: "SeCuRePaSsWorD2" # пароль от trustStore
keyStorePath: "ssl/kafka.jks" # путь от inventories/_стенд_/ до файла с keyStore (или абсолютный на сервере при needUploadJks: false)
keyStorePassword: "SeCuRePaSsWorD2" # пароль от keyStore
keyPassword: "SeCuRePaSsWorD2" # пароль от ключа в хранилище
Дополнительные параметры для использования профилей с AUDIT#
Подготовка ansible vars#
В созданном файле $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml,
дополнить параметрами для работы с AUDIT:
config_audit: # настройки аудита
url: "https://localhost:8084" # префикс url для отправки событий аудита system_id: "CORAX" # Имя приложения для аудита (по умолчанию "APPLICATION NAME FOR AUDIT")
trustStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов
trustStorePassword: "<password>" # пароль от хранилища доверенных сертификатов
keyStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла хранилища ключей
keyStorePassword: "<password>" # пароль от хранилища ключей
keyPassword: "<password>" # пароль от ключа в хранилище
Дополнительные параметры для использования профилей с SECMAN#
При использовании профиля SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN подготовка сертификатов X509 не требуется. Управление сертификатами и секретами происходит с помощью Secret Management System (SecMan).
В созданном файле $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/inv/stand-corax.yml, дополнить параметрами для работы с SECMAN:
config_secman:
endpoint: 'secman_url' # адрес хоста Sec_Man
namespace: 'name_space' # пространство, в котором хранятся секреты
path: 'container_path' # путь к контейнеру с секретами
secret_name: 'container_name' # имя контейнера с секретами
opentimeout: '20' # время ожидания соединения (секунды)
readtimeout: '20' # время ожидания получения (секунды)
tokenttl: '120' # время жизни токена (секунды)
fetchrole: 'role-secman-CA-name' # имя роли для работы с удостоверяющим центром (CA) SECMAN
fetchmount: 'PKI' # (путь) адрес CA SECMAN
fetchcn: 'test.corax' # Common Name в сертификате
put_enable: false # включение создания контейнера секретов в Sec_Man
connectDict: # данные для авторизации в Sec_Man
role_id: "role_id_xxx"
secret_id: "secret_id_xxx"
Запуск ansible-playbook#
Для запуска playbook выполните:
Перейдите в каталог со сценариями ansible командой
cd $HOME/corax-distrib/KFK-x.y.z-b/Corax-ansible-x.y.z-b/.Выполните команду
ansible-playbook -i inv/stand-corax.yml playbooks/kafka-crxui-crxsr.ymlи дождитесь завершения выполнения.
В случае успешного выполнения в stdout, в разделе PLAY RECAP, должно появиться unreachable=0 failed=0 напротив каждого хоста.

Описание тегов для применения при установке#
Имя тега |
Описание |
|---|---|
prepare |
Устанавливает Java и создает: пользователя-группу в ОС, сервис, каталоги для установки |
root |
Устанавливает Java и создает: пользователя-группу в ОС, сервис, каталоги для установки, останавливает сервис, загружает дистрибутив на хосты, распаковывает дистрибутив, конфигурирует, запускает сервис |
install |
Останавливает сервис, загружает дистрибутив на хосты, распаковывает дистрибутив, конфигурирует, запускает сервис |
configure |
Останавливает сервис, конфигурирует, запускает сервис |
start |
Запускает сервис |
stop |
Останавливает сервис |
status |
Показывает id процесса и время работы |
clean |
Останавливает сервис, очищает рабочие директории |
uninstall |
Останавливает сервис, очищает рабочие директории, удаляет рабочие директории, удаляет сервис, удаляет группу и пользователя |
Проверка результата#
Проверка работоспособности на хостах группы Kafka#
Подключитесь по ssh к хосту из ansible группы kafka.
Выполните команду
ps axu | grep -v 'grep' | grep java.*kafka/server.properties. Должен отобразиться 1 запущенный процесс.Выполните пункты 1-2 для остальных хостов ansible группы kafka.
Проверка работоспособности на хостах группы ZooKeeper#
Подключитесь по ssh к хосту из ansible группы ZooKeeper.
Выполните команду
ps axu | grep -v 'grep' | grep java.*config/zookeeper.properties. Должен отобразиться 1 запущенный процесс.Выполните пункты 1-2 для остальных хостов ansible группы zookeeper.
Проверка работоспособности подключением через Kafka Tool / Offset Explorer#
Запустите Offset Explorer / Kafka Tool.
В элементе Cluster выберите Import Connection.
Импортируйте xml файл с конфигурацией подключения из примеров ниже (при необходимости отредактируйте параметры подключения под свое окружение):
для протокола безопасности SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <connections> <connection bootstrap_servers="<host-ip-address>:9093" broker_security_type="SSL" chroot="/" group="Clusters" groupId="1" host="10.XX.XX.XX" jaas_config="" keystore_location="C:\Users\User\Desktop\server.kafka.jks" keystore_password="<password>" keystore_privatekey="<password>" name="10.XX.XX.XX" port="2181" sasl_mechanism="" schema_registry_endpoint="" truststore_location="C:\Users\User\Desktop\truststore.kafka.jks" truststore_password="<password>" version="VERSION_1_0_0"/> <groups> <group id="1" name="Clusters"/> </groups> </connections>для протокола безопасности PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <connections> <connection bootstrap_servers="<host-ip-address>:9093" broker_security_type="PLAINTEXT" chroot="/" group="Clusters" groupId="1" host="10.XX.XX.XX" jaas_config="" keystore_location="" keystore_password="" keystore_privatekey="" name="10.XX.XX.XX" port="2181" sasl_mechanism="" schema_registry_endpoint="" truststore_location="" truststore_password="" version="VERSION_1_0_0"/> <groups> <group id="1" name="Clusters"/> </groups> </connections>
Подключитесь к кластеру и убедитесь, что на вкладке Brokers видны все брокеры, на которые выполнялась установка.