Создание системных и пользовательских сервисов обслуживания#

Для автоматического перезапуска брокеров Platform V Corax / Apache Kafka и Zookeeper в случае перезагрузки сервера и корректной работы скриптов Ansible необходимо перед установкой создать системные или пользовательские сервисы обслуживания.

Для создания системных сервисов обслуживания:

Необходимо выдать права пользователю (например, kafka) на запуск, остановку и редактирование сервиса. Для этого под пользователем root добавить строки в файл /etc/sudoers:

Для Kafka:

kafka ALL= NOPASSWD: /bin/systemctl start kafka
kafka ALL= NOPASSWD: /bin/systemctl stop kafka
kafka ALL= NOPASSWD: /bin/systemctl status kafka
kafka ALL= NOPASSWD: /bin/systemctl restart kafka
kafka ALL= NOPASSWD: /bin/systemctl enable kafka
kafka ALL= NOPASSWD: /bin/systemctl disable kafka
kafka ALL= NOPASSWD: /bin/systemctl daemon-reload
kafka ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/kafka.service

Для Zookeeper:

kafka ALL= NOPASSWD: /bin/systemctl start zookeeper
kafka ALL= NOPASSWD: /bin/systemctl stop zookeeper
kafka ALL= NOPASSWD: /bin/systemctl status zookeeper
kafka ALL= NOPASSWD: /bin/systemctl restart zookeeper
kafka ALL= NOPASSWD: /bin/systemctl enable zookeeper
kafka ALL= NOPASSWD: /bin/systemctl disable zookeeper
kafka ALL= NOPASSWD: /bin/systemctl daemon-reload
kafka ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/zookeeper.service

Для создания пользовательских сервисов обслуживания:

Необходимо добавить вашего пользователя в список исключений, чтобы пользовательский сервис приложения не завершался принудительно.

Для этого под пользователем root:

  1. Добавить строки с логином пользователей в файл /etc/systemd/logind.conf:

KillExcludeUsers=kafka
  1. Дать возможность пользовательским сервисам работать как долговременные, выполнив команды:

systemctl restart systemd-logind
loginctl enable-linger kafka

Создание системных и пользовательских сервисов обслуживания с помощью Jenkins Job#

  1. Необходимо заполнить настройки inventory из раздела Настройка inventory.

  2. Выбрать соответствующий playbook в Jenkins Job в параметре playbook:

    • zk_kafka_system_service.yml — создание системного сервиса обслуживания;

    • zk_kafka_user_service.yml — создание пользовательского сервиса обслуживания.

Создание системного сервиса обслуживания Zookeeper с помощью ansible#

Под пользователем kafka выполните действия:

  1. Создайте файл сервиса zookeeper.service:

sudo /bin/sudoedit /etc/systemd/system/zookeeper.service
  1. Заполните созданный файл:

[Unit]
Description=Zookeeper service
After=local-fs.target network.service

[Service]
WorkingDirectory={{ zookeeper.installdir }}
Type=simple
User=kafka
ExecStart={{ zookeeper.installdir }}/bin/zookeeper-server-start.sh {{ zookeeper.installdir }}/config/zookeeper.properties
ExecStop={{ zookeeper.installdir }}/bin/zookeeper-server-stop.sh
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target

, где zookeeper.installdir — абсолютный путь до директории установки Zookeeper.

  1. Для инициализации сервиса выполните команду:

sudo systemctl daemon-reload

Создание пользовательского сервиса обслуживания Zookeeper с помошью ansible#

Под пользователем kafka выполните следующие действия:

  1. Создате файл сервиса ~/.config/systemd/user/zookeeper.service со следующим содержимым:

[Unit]
Description=Zookeeper service

[Service]
WorkingDirectory={{ zookeeper.installdir }}
Type=simple
ExecStart={{ zookeeper.installdir }}/bin/zookeeper-server-start.sh {{ zookeeper.installdir }}/config/zookeeper.properties
ExecStop={{ zookeeper.installdir }}/bin/zookeeper-server-stop.sh
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

, где zookeeper.installdir — абсолютный путь до директории установки Zookeeper.

  1. Для инициализации сервиса выполните команду:

sudo systemctl --user daemon-reload

Создание системного сервиса обслуживания Kafka с помощью ansible#

Под пользователем kafka выполните следующие действия:

  1. Создайте файл сервиса:

sudo /bin/sudoedit /etc/systemd/system/kafka.service
  1. Заполните созданный файл:

[Unit]
Description=Apache Kafka service
After=local-fs.target network.service

[Service]
WorkingDirectory={{ kafka.installdir }}
Type=simple
User=kafka
ExecStartPre=/bin/sleep 10
ExecStart={{ kafka.installdir }}/bin/kafka-server-start.sh {{ kafka.installdir }}/config/server.properties
ExecStop={{ kafka.installdir }}/bin/kafka-server-stop.sh
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

, где kafka.installdir — абсолютный путь до директории установки Kafka.

  1. Для инициализации сервиса выполните команду:

sudo systemctl daemon-reload

Создание пользовательского сервиса обслуживания Kafka с помошью ansible#

Под пользователем kafka выполните следующие действия:

  1. Создате файл сервиса ~/.config/systemd/user/kafka.service со следующим содержимым:

[Unit]
Description=Apache Kafka service

[Service]
WorkingDirectory={{ kafka.installdir }}
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart={{ kafka.installdir }}/bin/kafka-server-start.sh {{ kafka.installdir }}/config/server.properties
ExecStop={{ kafka.installdir }}/bin/kafka-server-stop.sh
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

, где kafka.installdir — абсолютный путь до директории установки Kafka.

  1. Для инициализации сервиса выполните команду:

sudo systemctl --user daemon-reload