【问题标题】:CentOS 7 systemd Requires and After values for Kafka to depend on local Zookeeper?CentOS 7 systemd Requires 和 After 值让 Kafka 依赖本地 Zookeeper?
【发布时间】:2017-12-26 14:53:40
【问题描述】:

我有 5 台使用 CentOS 7 的 VM,每台都运行 kafka 及其嵌入式 Zookeeper。

在我的 systemd 单元文件中,我尝试使用 zookeeper.service 作为 kafka.service 的 Requires 依赖项,但它似乎不起作用,并且文档没有明确说明是否只有 .target 文件是 Requires 的有效值(我认为 After/Before 也是如此),或者 .service 文件本身也是允许的。

我必须为 Requires 使用 zookeeper.target 吗?

另外,我应该使用 Wants 而不是 Requires,以防 Kafka 可以正常启动但本地 Zookeeper 不能?这样,我假设 Kafka 将连接到其他 Zookeeper 之一,因为它知道所有 5 个,而本地 Zookeeper 可以修复并稍后开始重新加入集合。但是 zookeeper 至少会尝试在 kafka 的任何时候启动。

这是我的 .service 文件:

kafka.service

# Kafka server (broker) management

[Unit]
Description=Apache Kafka server (broker)
Documentation=http://kafka.apache.org/documentation.html
Requires=network.target remote-fs.target zookeeper.service
After=network.target remote-fs.target zookeeper.service

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

动物园管理员服务

# Zookeeper server management (Kafka-embedded)

[Unit]
Description=Apache Zookeeper server (Kafka-embedded)
Documentation=http://zookeeper.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

编辑:我希望看到一个依赖层次结构显示 zookeeper 在 kafka 下方缩进,但它们只是显示为兄弟姐妹:

# systemctl --all list-dependencies | egrep '(kafka|zookeeper)'
● ├─kafka.service
● ├─zookeeper.service

【问题讨论】:

    标签: centos apache-kafka systemd


    【解决方案1】:

    .target 或 .service 文件都可以是依赖项(首选 .target 作为分组单元,而不是叶子的 .service 文件)。在 Requires、Wants、After 中都可以正常工作,例如:

    Requires=network.target remote-fs.target zookeeper.service
    After=network.target remote-fs.target zookeeper.service
    

    我仍然不知道为什么它不将 zookeeper 显示为 kafka 的依赖项,但它的行为就像我这样做时一样:

    sudo systemctl start kafka
    

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 2019-02-10
      • 2020-07-12
      • 2019-02-10
      • 2021-07-09
      • 2020-02-19
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      相关资源
      最近更新 更多