Шаг 2. Установка Kafka и ZooKeeper (обязательный)#

Порядок установки#

Подготовка конфигурации для использования#

Перед установкой выполните действия, приведенные в разделе Подготовка окружения.

Протокол безопасности PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH#

Создайте файл $HOME/corax/kfka-deploy-x.y.z-distrib/inv/group_vars/all/vars.yaml и заполните его по шаблону:

# Переменные, доступные для всех ролей #
tmp_dir: $HOME/corax # путь к временной директории на конечных серверах
wait_for_start: 120 # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
customJavaPath: false # абсолютный путь к используемой java (false для использования java из PATH)
security: PLAINTEXT__ZK_PLAIN_NO_AUTH__KAFKA_PLAINTEXT_NO_AUTH # протокол безопасности
kafka_user: kafka # имя пользователя, от имени которого запускается Kafka
kafka_group: kafka # имя группы от имени которой запускается Kafka
zookeeper_user: kafka # имя пользователя, от имени которого запускается ZooKeeper
zookeeper_group: kafka # имя группы от имени которой запускается ZooKeeper
enabled_service: true # создание сервиса и настройка сервиса ../helper/create_service.yml

kafka:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /KAFKADATA # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
ZooKeeper:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /zookeeper # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)

Протокол безопасности SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH#

Настройка протокола безопасности состоит из:

  1. Подготовки X509 сертификата.

  2. Подготовки ansible vars.

Подготовка X509 сертификата

Подготовка X509 сертификата

Могут применяться два вида X509 сертификатов:

  • самоподписанные (допускается для тестовых установок);

  • подписанные корпоративным CA (рекомендуется для промышленных установок).

Для подготовки X509 сертификата необходимо создать два JKS хранилища:

  • server.kafka.jks – хранилище ключей, содержащее сертификат и приватный ключ;

  • truststore.kafka.jks – хранилище доверенных сертификатов, содержащее только сертификат корневого CA без приватного ключа из server.kafka.jks.

Создание хранилищ с самоподписанным сертификатом

Для создания хранилищ с использованием самоподписанного сертификата выполните шаги:

  1. Создайте каталог командой:

    mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/
    

    и перейдите в него командой:

    cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl
    
  2. Создайте 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"
    
  3. Извлеките сертификат без приватного ключа из JKS во временный файл kafka.export командой:

    keytool -exportcert -keystore server.kafka.jks -alias kafka -file kafka.export -storepass <keyStorePassword>
    
  4. Импортируйте сертификат в truststore.kafka.jks командой:

    keytool -import -keystore truststore.kafka.jks -alias kafka -file kafka.export -storepass <trustStorePassword> -noprompt -storetype JKS
    
  5. Удалите временный файл kafka.export, созданный на шаге 3.

Создание хранилищ с сертификатом, подписанным корпоративным CA

Правила и алгоритм выпуска X509 сертификатов в различных организациях может отличаться. Далее описаны основные этапы подготовки конфигурации с использованием X509 сертификата, подписанного корпоративным CA:

  1. Создайте каталог командой:

    mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/
    

    и перейдите в него командой:

    cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl
    
  2. Создайте 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"
    
  3. Сгенерируйте запрос на сертификат (CSR) командой:

    keytool -certreq -keystore server.kafka.jks -alias kafka -file server.kafka.csr -storepass <keyStorePassword> -ext ExtendedKeyUsage=serverAuth,clientAuth
    
  4. Полученный файл server.kafka.csr подпишите в корпоративном CA. После подписания сертификата потребуются четыре файла:

    • server.kafka.cer — cертификат в формате cer, полученный в корпоративом CA;

    • server.kafka.jks — хранилище, созданное на шаге 2;

    • ca1.cer — сертификат корневого CA, полученный в корпоративом CA;

    • ca2.pem (опционально) — cертификат промежуточного CA (может отсутствовать), полученный в корпоративом CA.

  5. Добавьте сертификат server.kafka.cer, полученный в корпоративом удостоверяющем центре, в созданное на шаге 2 хранилище server.kafka.jks командой:

    keytool -import -keystore server.kafka.jks -alias kafka -file server.kafka.cer -storepass <keyStorePassword> -noprompt -storetype JKS
    
  6. Подготовьте 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
    
  7. Опционально. Удалите все файлы из каталога $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/kfka-deploy-x.y.z-distrib/inv/group_vars/all/vars.yaml и заполните его по шаблону:

# Переменные, доступные для всех ролей #
tmp_dir: $HOME/corax # путь к временной директории на конечных серверах
wait_for_start: 120 # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
customJavaPath: false # абсолютный путь к используемой java (false для использования java из PATH)
security: SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH # протокол безопасности
kafka_user: kafka # имя пользователя, от имени которого запускается Kafka
kafka_group: kafka # имя группы от имени которой запускается kafka
zookeeper_user: kafka # имя пользователя, от имени которого запускается ZooKeeper
zookeeper_group: kafka # имя группы от имени которой запускается ZooKeeper
enabled_service: true # создание сервиса и настройка сервиса ../helper/create_service.yml

kafka:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /KAFKADATA # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
    keyStorePath: "ssl/server.kafka.jks" # путь от inv/_стенд_/ до файла хранилища ключей (или абсолютный на сервере при needUploadJks: false)
    keyStorePassword: "<keystore-password>" # пароль от хранилища ключей
    keyPassword: "<key-password>" # пароль от ключа в хранилище
zookeeper:
    distr: distrib.zip # Имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /zookeeper # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
    keyStorePath: "ssl/server.kafka.jks" # путь от inv/_стенд_/ до файла хранилища ключей (или абсолютный на сервере при needUploadJks: false)
    keyStorePassword: "<keystore-password>" # пароль от хранилища ключей

Протокол безопасности SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT#

Настройка протокола безопасности состоит из:

  1. Подготовки X509 сертификата.

  2. Подготовки ansible vars.

Подготовка X509 сертификата

Подготовка X509 сертификата

Могут применяться два вида X509 сертификатов:

  • самоподписанные (допускается для тестовых установок);

  • подписанные корпоративным CA (рекомендуется для промышленных установок).

Для подготовки X509 сертификата необходимо создать два JKS хранилища:

  • server.kafka.jks – хранилище ключей, содержащее сертификат и приватный ключ;

  • truststore.kafka.jks – хранилище доверенных сертификатов, содержащее только сертификат корневого CA без приватного ключа из server.kafka.jks.

Создание хранилищ с самоподписанным сертификатом

Для создания хранилищ с использованием самоподписанного сертификата выполните шаги:

  1. Создайте каталог командой:

    mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/
    

    и перейдите в него командой:

    cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl
    
  2. Создайте 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"
    
  3. Извлеките сертификат без приватного ключа из JKS во временный файл kafka.export командой:

    keytool -exportcert -keystore server.kafka.jks -alias kafka -file kafka.export -storepass <keyStorePassword>
    
  4. Импортируйте сертификат в truststore.kafka.jks командой:

    keytool -import -keystore truststore.kafka.jks -alias kafka -file kafka.export -storepass <trustStorePassword> -noprompt -storetype JKS
    
  5. Удалите временный файл kafka.export, созданный на шаге 3.

Создание хранилищ с сертификатом, подписанным корпоративным CA

Правила и алгоритм выпуска X509 сертификатов в различных организациях может отличаться. Далее описаны основные этапы подготовки конфигурации с использованием X509 сертификата, подписанного корпоративным CA:

  1. Создайте каталог командой:

    mkdir -p $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl/
    

    и перейдите в него командой:

    cd $HOME/corax/kfka-deploy-x.y.z-distrib/inv/ssl
    
  2. Создайте 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"
    
  3. Сгенерируйте запрос на сертификат (CSR) командой:

    keytool -certreq -keystore server.kafka.jks -alias kafka -file server.kafka.csr -storepass <keyStorePassword> -ext ExtendedKeyUsage=serverAuth,clientAuth
    
  4. Полученный файл server.kafka.csr подпишите в корпоративном CA. После подписания сертификата потребуются четыре файла:

    • server.kafka.cer — cертификат в формате cer, полученный в корпоративом CA;

    • server.kafka.jks — хранилище, созданное на шаге 2;

    • ca1.cer — сертификат корневого CA, полученный в корпоративом CA;

    • ca2.pem (опционально) — cертификат промежуточного CA (может отсутствовать), полученный в корпоративом CA.

  5. Добавьте сертификат server.kafka.cer, полученный в корпоративом удостоверяющем центре, в созданное на шаге 2 хранилище server.kafka.jks командой:

    keytool -import -keystore server.kafka.jks -alias kafka -file server.kafka.cer -storepass <keyStorePassword> -noprompt -storetype JKS
    
  6. Подготовьте 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
    
  7. Опционально. Удалите все файлы из каталога $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/kfka-deploy-x.y.z-distrib/inv/group_vars/all/vars.yaml и заполните его по шаблону:

# Переменные, доступные для всех ролей #
tmp_dir: $HOME/corax # путь к временной директории на конечных серверах
wait_for_start: 120 # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
customJavaPath: false # абсолютный путь к используемой java (false для использования java из PATH)
security: SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH # протокол безопасности
kafka_user: kafka # имя пользователя, от имени которого запускается Kafka
kafka_group: kafka # имя группы от имени которой запускается kafka
zookeeper_user: kafka # имя пользователя, от имени которого запускается ZooKeeper
zookeeper_group: kafka # имя группы от имени которой запускается ZooKeeper
enabled_service: true # создание сервиса и настройка сервиса ../helper/create_service.yml

kafka:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /KAFKADATA # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
    keyStorePath: "ssl/server.kafka.jks" # путь от inv/_стенд_/ до файла хранилища ключей (или абсолютный на сервере при needUploadJks: false)
    keyStorePassword: "<keystore-password>" # пароль от хранилища ключей
    keyPassword: "<key-password>" # пароль от ключа в хранилище
zookeeper:
    distr: distrib.zip # Имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /zookeeper # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
    keyStorePath: "ssl/server.kafka.jks" # путь от inv/_стенд_/ до файла хранилища ключей (или абсолютный на сервере при needUploadJks: false)
    keyStorePassword: "<keystore-password>" # пароль от хранилища ключей
config_audit:  # настройки аудита
  url: "http://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>" # пароль от ключа в хранилище

SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN#

При использовании профиля SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN подготовка сертификатов X509 не требуется. Управление сертификатами и секретами происходит с помощью Secret Management System (SecMan).

Создайте файл $HOME/corax/kfka-deploy-x.y.z-distrib/inv/group_vars/all/vars.yaml и заполните его по шаблону:

# Переменные, доступные для всех ролей #
tmp_dir: $HOME/corax # путь к временной директории на конечных серверах
wait_for_start: 120 # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
customJavaPath: false # абсолютный путь к используемой java (false для использования java из PATH)
security: SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN # протокол безопасности
kafka_user: kafka # имя пользователя, от имени которого запускается Kafka
kafka_group: kafka # имя группы от имени которой запускается kafka
zookeeper_user: kafka # имя пользователя, от имени которого запускается ZooKeeper
zookeeper_group: kafka # имя группы от имени которой запускается ZooKeeper
enabled_service: true # создание сервиса и настройка сервиса ../helper/create_service.yml

kafka:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /KAFKADATA # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
zookeeper:
    distr: distrib.zip # Имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /zookeeper # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
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"

Протокол безопасности SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__AUDIT__SECMAN#

При использовании профиля SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN подготовка сертификатов X509 не требуется. Управление сертификатами и секретами происходит с помощью Secret Management System (SecMan).

Создайте файл $HOME/corax/kfka-deploy-x.y.z-distrib/inv/group_vars/all/vars.yaml и заполните его по шаблону:

# Переменные, доступные для всех ролей #
tmp_dir: $HOME/corax # путь к временной директории на конечных серверах
wait_for_start: 120 # время в секундах на корректный старт приложения (падает с ошибкой при превышении)
customJavaPath: false # абсолютный путь к используемой java (false для использования java из PATH)
security: SSL__ZK_mTLS_WITH_AUTH__KAFKA_SSL_WITH_AUTH__SECMAN # протокол безопасности
kafka_user: kafka # имя пользователя, от имени которого запускается Kafka
kafka_group: kafka # имя группы от имени которой запускается kafka
zookeeper_user: kafka # имя пользователя, от имени которого запускается ZooKeeper
zookeeper_group: kafka # имя группы от имени которой запускается ZooKeeper
enabled_service: true # создание сервиса и настройка сервиса ../helper/create_service.yml

kafka:
    distr: distrib.zip # имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /KAFKADATA # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
zookeeper:
    distr: distrib.zip # Имя zip архива с дистрибутивом, размещенного в ./ansible/files/
    installdir: /opt/Apache/kafka # абсолютный путь на конечном сервере к приложению
    logdir: /opt/Apache/kafka/logs # абсолютный путь на конечном сервере к логам приложения
    datadir: /zookeeper # абсолютный путь на конечном сервере к данным приложения
    cleanLog: true # очистить путь к логам при установке
    cleanData: true # очистить путь к данным при установке (true если данные не нужны)
    trustStorePath: "ssl/truststore.kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов (или абсолютный на сервере при needUploadJks: false)
    trustStorePassword: "<truststore-password>" # пароль от хранилища доверенных сертификатов
config_audit:  # настройки аудита
  url: "http://localhost:8084" # префикс url для отправки событий аудита  system_id: "CORAX" # Имя приложения для аудита (по умолчанию "APPLICATION NAME FOR AUDIT")
  trustStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла хранилища доверенных сертификатов
  trustStorePassword: "<password>" # пароль от хранилища доверенных сертификатов
  keyStorePath: "ssl/kafka.jks" # путь от inv/_стенд_/ до файла с keyStore
  keyStorePassword: "<password>" # пароль от keyStore
  keyPassword: "<password>" # пароль от ключа в хранилище
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 выполните:

  1. Перейдите в каталог со сценариями ansible командой cd $HOME/corax/kfka-deploy-x.y.z-distrib/.

  2. Выполните команду ansible-playbook -i ./inv/inventory.ini ./playbooks/kafka-zookeeper.yml и дождитесь завершения выполнения.

В случае успешного выполнения в stdout, в разделе PLAY RECAP, должно появиться unreachable=0 failed=0 напротив каждого хоста.

Описание тегов для применения при установке#

Имя тега

Описание

prepare

Устанавливает Java и создает: пользователя-группу в ОС, сервис, каталоги для установки

root

Устанавливает Java и создает: пользователя-группу в ОС, сервис, каталоги для установки, останавливает сервис, загружает дистрибутив на хосты, распаковывает дистрибутив, конфигурирует, запускает сервис

install

Останавливает сервис, загружает дистрибутив на хосты, распаковывает дистрибутив, конфигурирует, запускает сервис

configure

Останавливает сервис, конфигурирует, запускает сервис

start

Запускает сервис

stop

Останавливает сервис

clean

Останавливает сервис, очищает рабочие директории

uninstall

Останавливает сервис, очищает рабочие директории, удаляет рабочие директории, удаляет сервис, удаляет группу и пользователя

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

Проверка работоспособности на хостах группы Kafka#

  1. Подключитесь по ssh к хосту из ansible группы kafka.

  2. Выполните команду ps axu | grep -v 'grep' | grep java.*kafka/server.properties. Должен отобразиться 1 запущенный процесс.

  3. Выполните пункты 1-2 для остальных хостов ansible группы kafka.

Проверка работоспособности на хостах группы ZooKeeper#

  1. Подключитесь по ssh к хосту из ansible группы ZooKeeper.

  2. Выполните команду ps axu | grep -v 'grep' | grep java.*config/zookeeper.properties. Должен отобразиться 1 запущенный процесс.

  3. Выполните пункты 1-2 для остальных хостов ansible группы zookeeper.

Проверка работоспособности подключением через Kafka Tool / Offset Explorer#

  1. Запустите Offset Explorer / Kafka Tool.

  2. В элементе Cluster выберите Import Connection.

  3. Импортируйте 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>
      
  4. Подключитесь к кластеру и убедитесь, что на вкладке Brokers видны все брокеры, на которые выполнялась установка.