我有5个使用CentOS 7的虚拟机,每个虚拟机都运行kafka及其嵌入式zookeeper。
在我的systemd单元文件中,我尝试使用zookeeper.service作为kafka.service的Requires依赖,但它似乎不起作用,并且文档没有明确说明是否只有.target文件是Requires的有效值(我也假设After / Before)或.service文件本身也是允许的。
我是否必须使用zookeeper.target for Requires?
另外,我应该使用Wants而不是Requires,以防Kafka可以开始正常,但当地的Zookeeper不能吗?这样,我认为Kafka将连接到其他一个动物园管理员,因为它知道所有5个动物园管理员,而当地的动物园管理员可以修复并开始重新加入整个团体。但是,动物园管理员至少会尝试随时启动卡夫卡。
以下是我的.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.service
# 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
答案 0 :(得分:0)
.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