systemd 启动zk kafka
文章目录一、需求介绍二、首先安装ZK 服务三、安装Kafka服务一、需求介绍有个很常见的需求:线下环境中,我想在云主机(或者物理机)上安装 Zookeeper 和 Kafka,两个进程在因为某种异常退出后,能够自动尝试重启。要实现该需求有很多种方案:搞个脚本定时获取进程,若发现进程不在了,就自动重启使用Docker 或者 K8 的管理能力【最为推荐】使用systemd的管理能力本文讲述的是在cen
一、需求介绍
有个很常见的需求:
线下环境中,我想在云主机(或者物理机)上安装 Zookeeper 和 Kafka,两个进程在因为某种异常退出后,能够自动尝试重启。要实现该需求有很多种方案:
- 搞个脚本定时获取进程,若发现进程不在了,就自动重启
- 使用Docker 或者 K8 的管理能力【最为推荐】
- 使用
systemd
的管理能力
本文讲述的是在centos
上使用systemd
管理zookeeper 和 kafka.
二、首先安装ZK 服务
1、定义[Unit]
文件(service文件)
vim /etc/systemd/system/zookeeper.service
[Unit]
Description=zookeeper.service
After=network.target
[Service]
Type=forking
# 第一行设置日志目录,如果没有设置,默认是当前目录,对有的用户来说,可能没有权限。
Environment=ZOO_LOG_DIR=/apps/svr/apache-zookeeper-3.5.9-bin/
# 第二行是配置环境变量,systemd用户实例不会继承类似.bashrc中定义的环境变量,所以是找不到jdk目录的,而zookeeper又必须有。
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/apps/svr/jdk1.8.0_102/bin:/root/bin
ExecStart=/apps/svr/apache-zookeeper-3.5.9-bin/bin/zkServer.sh start
#ExecStop=/apps/svr/apache-zookeeper-3.5.9-bin/bin/zkServer.sh stop
#ExecReload=/apps/svr/apache-zookeeper-3.5.9-bin/bin/zkServer.sh restart
PIDFile=/data/zookeeper/zookeeper_server.pid
# 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no
Restart=always
# 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)
RestartSec=10
# StartLimitInterval: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
2、处理已有ZK进程
如果当前主机上已有ZK 进程了,zookeeper.service
会启动不成功,所以手动干掉 ZK 进程
jps |grep 'Quo' | awk '{print $1}' |xargs kill
3、执行命令
systemctl daemon-reload
systemctl enable zookeeper
systemctl start zookeeper
4、可以利用systemd
自带命令来查看服务状态以及错误日志
systemctl status kafka-zookeeper -l
5、还可测试下 systemd
是否真如预期那样能在Zk进程挂了之后自动将其拉起:
将ZK 进程 kill ,ZK进程退出,等待片刻,看 ZK 进程是否重新出现
三、安装Kafka服务
1、定义service
文件
-- ------------------------------
vim /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka server (broker)
After=network.target zookeeper.service
[Service]
Type=forking
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/apps/svr/jdk1.8.0_102/bin:/root/bin
ExecStart=/apps/svr/kafka_vms-2.7.0/bin/kafka-server-start.sh -daemon /apps/svr/kafka_vms-2.7.0/config/server.properties
# 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no
Restart=always
# 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)
RestartSec=10
# StartLimitInterval: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启
StartLimitInterval=0
LimitNOFILE=265535
[Install]
WantedBy=multi-user.target
2、若当前已经kafka
进程,则可能启动kafka服务失败
jps |grep -i Kafka | awk '{print $1}' |xargs kill
3、更新 systemd
,启动kafka
服务
systemctl daemon-reload
systemctl enable kafka
systemctl start kafka
4、查看状态
systemctl status kafka -l
这里要说下 配置 LimitNOFILE=265535
, 如果将一个 kafka做成了一个 systemd service
,那么修改 /etc/sysctl.conf
/etc/security/conf
的配置未必能够生效。想要验证的话,查看/proc/<kafka pid>/limits
中的Max Open Files
即可,为啥呢?怀疑kafka service
启动时,使用了父进程的 NOFILE
配置。
四、参考
- systemd 使用 https://zhuanlan.zhihu.com/p/56889721
- Kafka Zookeeper systemd :https://gist.github.com/dyoung522/6f7aab567f70f67030ae4ee0191933c0
- http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
更多推荐
所有评论(0)