我有5个带有centos7的vm,每个vm都运行kafka和它的嵌入式zookeeper。
在我的systemd unit文件中,我尝试使用zookeeper.service作为kafka.service的requires依赖项,但它似乎不起作用,而且文档没有明确说明是否只.target文件是requires的有效值(我也假设after/before),或者.service文件本身也是允许的。
我是否必须使用zookeeper.target作为目标?
另外,我是否应该使用“想要”而不是“需要”,以防Kafka可以很好地开始,但当地的Zookeeper不能?这样的话,我假设Kafka会和另外一个Zookeeper联系,因为它知道所有的5个管理员,而当地的Zookeeper可能会被修复,然后开始重新加入团队。但Zookeeper至少会尝试在Kafka的任何时候开始。
以下是我的.service文件:
Kafka服务
# 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服务
# 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
1条答案
按热度按时间dwthyt8l1#
.target或.service文件都可以是依赖项(.target优先作为分组单元,而不是.service文件作为leaf)。无论是在需要、想要、之后,都可以很好地工作,例如:
我仍然不知道为什么它没有显示zookeeper作为Kafka的依赖项,但是当我这样做时,它的行为确实是这样的: