zookeeper集群部署及验证
准备阶段
# 服务器准备【centos7.x】
172.31.108.31 zk01
172.31.108.32 zk02
172.31.108.33 zk03
# 安装包下载url:http://archive.apache.org/dist/zookeeper/
# zookeeper运行依赖java,需要提前安装配置好java
zookeeper集群部署
安装JDK,配置环境变量
[root@zk01 ~]# tar -xvzf jdk-8u202-linux-x64.tar.gz -C /data/java/
[root@zk01 ~]# tail -4 /etc/profile
## 配置java环境变量
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@zk01 ~]# source /etc/profile
安装zookeeper
# 请下载带有bin字段的压缩包。其他压缩包后面会报错,提示找不到主类
[root@zk01 ~]# tar -zvxf apache-zookeeper-3.7.1-bin.tar.gz -C /data/
[root@zk01 ~]# mv /data/apache-zookeeper-3.7.1-bin/ /data/zookeeper-3.7.1-bin/
# 修改配置文件
# 先进入conf目录
[root@zk01 ~]# cd /data/zookeeper-3.7.1-bin/conf
# 模板文件zoo_simple.cfg,先拷贝一份出来再改动
[root@zk01 conf]# cp zoo_sample.cfg zoo.cfg
# 主要修改项
tickTime=2000 # 客户端与服务器之间的心跳时间就是一个tickTime单位。默认值为2000毫秒
initLimit=10 # zk集群Follower连接到Leader并同步数据的最大时间。如果zookeeper数据比较大,考虑调大这个值
syncLimit=5 # zk集群Follower同步Leader的最大时间
dataDir=/data/zk/data # 配置zookeeper server数据的存放路径
dataLogDir=/data/zk/logs # 存储事务日志。不配置的话,默认事物日志存储在dataDir路下
clientPort=2181 # 定义客户端连接zookeeper server的端口。默认为2181
server.1=ip(zk01):port1:port2 # 用来设置集群中某台server的参数,myid文件确定当前节点的id。port1是follower连接leader同步数据和转发请求用,port2是leader选举用
server.2=ip(zk02):port1:port2
server.3=ip(zk03):port1:port2
leaderServes # 用于配制Leader节点是否接收客户端请求,默认情况下这个值是yes ,当集群中节点数量超过3个,建议设置为false,关闭leader节点接收客户端请求
cnxTimeout # 设置连接Leader接收通知的最大超时时间,该参数只在使用electionAlg 3时生效
electionAlg # leader选举算法,1表示基于UDP通信的不进行权限验证算法,2表示进行基于UDP通信的进行权限验证算法,3表示基于TCP通信的fast leader选举
# 试验使用,后三项可以不用配置,直接注释
新建目录【logs和zkdata】,创建文件myid
## logs和zkdata目录路径参照zoo.cfg
# logs存储事务日志
# zkdata是zk数据存放路径
# myid是zoo.cfg文件里定义的server.A项A的值,Zookeeper 启动时读取这个文件,拿到值与 zoo.cfg 里的配置信息比较,判断到底是哪个server,只是一个标识作用。
[root@zk01 ~]# mkdir /data/zookeeper-3.7.1-bin/{zkdata,logs}
[root@zk01 ~]# echo "1" > /data/zookeeper-3.7.1-bin/data/myid
[root@zk02 ~]# echo "2" > /data/zk/data/myid
[root@zk03 ~]# echo "3" > /data/zk/data/myid
启动zookeeper
# zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd} # zkServer.sh可以跟的参数
[root@zk01 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh start
[root@zk02 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh start
[root@zk03 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh start
集群验证
# 集群验证只需zkServer.sh status即可
[root@zk01 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh status
[root@zk02 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh status
[root@zk03 ~]# /data/zookeeper-3.7.1-bin/bin/zkServer.sh status
# 示例
[root@zk01 ~]# /iflytek/zookeeper-3.7.1-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /iflytek/zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower # follower为从
# Mode:follower为从
# Mode:leader为主
启动报错
# ZooKeeper报错:Unable to access datadir, exiting abnormally
## 解决方法就是删除启动进程时自动创建的文件夹version-2,并重新启动zk
## /data/zookeeper-3.7.1-bin/logs/version-2
## /data/zookeeper-3.7.1-bin/zkdata/version-2