使用的安装文件是apache-zookeeper-3.6.2-bin.tar.gz
,以下内容均以此版本进行说明。
1.安装
# 在安装文件目录解压并移动到/usr/local/zookeeper目录下 tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz mv ./apache-zookeeper-3.6.2-bin/ /usr/local/zookeeper
2.配置
配置环境变量:配置环境变量的方法比较多,这里统一将环境变量放在 /etc/profile.d/my_env.sh 内。
vim /etc/profile.d/my_env.sh # 1.添加 ZOOKEEPER_HOME 和 PATH export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin # 2.使得配置的环境变量立即生效: # 首先是要赋权限【只操作一次就行】 chmod +x /etc/profile.d/my_env.sh source /etc/profile.d/my_env.sh # 3.验证是否生效 echo ${ZOOKEEPER_HOME} /usr/local/zookeeper
zookeeper配置文件:
# 进入${ZOOKEEPER_HOME}/conf/ 目录下 拷贝配置样本并进行修改 cp zoo_sample.cfg zoo.cfg vim zoo.cfg # ------------以下为配置文件内容------------ # 指定数据存储目录和日志文件目录(目录不用预先创建) dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/log # 以下使用默认值 tickTime=2000 initLimit=10 syncLimit=5 clientPort=2181
配置项说明:
- dataDir:zk用于存储内存数据库快照的目录。如果不指定dataLogDir参数,则数据库更新的事务日志也将会存储在该目录下。
- dataLogDir:指定zk事务日志的存储目录。
- tickTime: zk中使用的基本时间单元,单位为毫秒,用于控制心跳和超时,比如session超时:N*tickTime。更低的tickTime值可以更快的发现超时问题。
- initLimit:用于集群,zk集群中follower初始化连接到leader时,最长能忍受多少个tickTime,以tickTime的倍数来表示,默认值为10,即为20s。
- syncLimit:用于集群,用于配置leader和follower间进行心跳检测的最大超时时间。如果在设置的时间内followers无法与leader进行通信,那么follower将会被丢弃。以tickTime的倍数来表示,默认值为5,即10s。
- clientPort:服务器监听客户端连接的端口,默认值为2181
- maxClientCnxns:限制单个客户端与单台服务之间的并发连接数,默认值为60,设置为0则不限制。
- autopurge.snapRetainCount:配置zk在自动清理的时候需要保存的数据文件快照的数量和对应的事务日志文件,默认为3。
- autopurge.purgeInterval:和autopurge.snapRetainCount配置使用,用于配置zk自动清理文件的频率,默认为1小时,即默认开启自动清理功能,设置为0,则表示禁用清理功能。
3.启动
命令启动:
# zookeeper服务命令 zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd} # 启动 zkServer.sh start
配置开机启动:
# 1.添加文件 vim /etc/rc.d/init.d/zookeeper # ------------文件内容------------ # 如果有Kafka服务那么chkconfig的配置参数启动服务的优先等级要高于Kafka停止服务的优先等级要低于Kafka #!/bin/bash # chkconfig: 2345 80 12 # description: service zookeeper # processname: zookeeper export JAVA_HOME=/usr/local/java ZOOKEEPER_HOME=/usr/local/zookeeper case "$1" in start) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh start;; start-foreground) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh start-foreground;; stop) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh stop;; status) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh status;; restart) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh restart;; upgrade) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh upgrade;; print-cmd) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh print-cmd;; *) echo "require start|start-foreground|stop|status|restart|print-cmd";; esac # 2.赋执行权并添加开启开机自启 chmod +x /etc/rc.d/init.d/zookeeper chkconfig --add /etc/rc.d/init.d/zookeeper chkconfig zookeeper on # 查看zookeeper是否添加成功 chkconfig --list zookeeper zookeeper 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 3.服务命令 service zookeeper start service zookeeper stop ... # 如果防火墙未关闭则需要开启外网端口 firewall-cmd --zone=public --add-port=2181/tcp --permanent && firewall-cmd --reload
4.验证
由于已经配置过环境变量,直接使用下面命令启动即可:
[root@tcloud ~]# zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
由于添加了service服务,也可使用服务命令【本质是一样的】:
[root@tcloud ~]# service zookeeper start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
使用 jps 验证进程是否已经启动,出现 QuorumPeerMain 则代表启动成功:
[root@tcloud /]# jps 15934 QuorumPeerMain
也可以登录客户端进行测试:
[root@tcloud /]# zkCli.sh [zk: localhost:2181(CONNECTED) 0] version ZooKeeper CLI version: 3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
自启动测试:
# 重启 reboot # 开机后查看zookeeper状态 Last login: Thu Mar 31 08:56:56 2022 [root@tcloud ~]# service zookeeper status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: standalone
至此,zookeeper单机版部署成功。
5.chkconfig配置说明
Linux chkconfig 命令用于检查,设置系统的各种服务。这是 Red Hat 公司遵循 GPL 规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。
# 语法 chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
- –add 增加所指定的系统服务,让 chkconfig 指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
- –del 删除所指定的系统服务,不再由 chkconfig 指令管理,并同时在系统启动的叙述文件内删除相关数据。
- –level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。
# 列出 chkconfig 所有的服务的情况或serviceName的服务情况 chkconfig --list [serviceName] # 开启服务 chkconfig serviceName on # 关闭服务 chkconfig serviceName off
系统服务配置文件里的# chkconfig: 2345 10 90
三个参数说明:
第一个参数,指定服务的运行级别。
0 关机 1 单用户模式 2 无网络支持的多用户模式 3 有网络支持的多用户模式 4 保留,未使用 5 有网络支持有X-Window支持的多用户模式 6 重新引导系统,即重启
第二个参数,指定启动服务的优先等级。第三个参数,指定停止服务的优先等级。特别注意:数值越大等级越低。
6.自动部署脚本
将安装文件和自动部署脚本zookeeperAutoInstall.sh
放在同一个文件夹下,执行 shell 脚本即可完成部署启动。ZOOKEEPER_HOME
文件夹可自行调整。
#!/bin/bash rm -rf /usr/local/zookeeper echo "1.安装Zookeeper..." tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz sleep 10 mv ./apache-zookeeper-3.6.2-bin/ /usr/local/zookeeper echo "1.安装Zookeeper完毕" echo "2.环境变量配置..." cat <<EOF > /etc/profile.d/zookeeper.sh export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin EOF sleep 2 chmod +x /etc/profile.d/zookeeper.sh source /etc/profile.d/zookeeper.sh echo "ZOOKEEPER_HOME目录:"${ZOOKEEPER_HOME} echo "2.环境变量配置完毕" echo "3.Zookeeper配置..." cp ${ZOOKEEPER_HOME}/conf/zoo_sample.cfg ${ZOOKEEPER_HOME}/conf/zoo.cfg sed -i "12c dataDir=/usr/local/zookeeper/data" ${ZOOKEEPER_HOME}/conf/zoo.cfg sed -i "13i dataLogDir=/usr/local/zookeeper/datalog" ${ZOOKEEPER_HOME}/conf/zoo.cfg echo "3.Zookeeper配置完毕" echo "4.启动Zookeeper..." zkServer.sh start zkServer.sh status echo "4.启动Zookeeper完毕" echo "5.开启2181端口..." firewall-cmd --zone=public --add-port=2181/tcp --permanent && firewall-cmd --reload echo "5.开启2181端口完毕" echo "6.加入到service服务并设置开机自启..." cat <<EOF > /etc/rc.d/init.d/zookeeper #!/bin/bash # chkconfig: 2345 10 90 # description: service zookeeper # processname: zookeeper ZOOKEEPER_HOME=/usr/local/zookeeper case "$1" in start) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh start;; start-foreground) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh start-foreground;; stop) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh stop;; status) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh status;; restart) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh restart;; upgrade) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh upgrade;; print-cmd) su root ${ZOOKEEPER_HOME}/bin/zkServer.sh print-cmd;; *) echo "require start|start-foreground|stop|status|restart|print-cmd";; esac EOF chmod +x /etc/rc.d/init.d/zookeeper chkconfig --add /etc/rc.d/init.d/zookeeper chkconfig zookeeper on echo "6.加入到service服务并设置开机自启完毕"