服务器IP | hostname | 节点说明 |
192.168.31.101 | master | 主节点 |
192.168.31.102 | slave1 | 从节点 |
192.168.31.103 | slave2 |
从节点 |
下面的安装与配置操作需要在三台虚拟机上都执行一遍,这里的虚拟机上安装的是centOS7版本。
ZooKeeper要求运行在 JDK 环境上,JDK安装教程可参考 CentOS 7.x 安装 JDK1.8
地址:Apache ZooKeeper
建议下载稳定版本,我这里选择下载 Apache ZooKeeper 3.7.1
将安装包上传到 CentOS 中的 /home/software/ 目录下(目录不存在的就新建)。
解压:
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
将解压后的文件夹移动到 /usr/local 目录下,并重命名为 zookeeper-3.7.1
mv apache-zookeeper-3.7.1-bin /usr/local/
cd /usr/local/
mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1
将zookeeper压缩文件解压后,进入到 conf 目录:
将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件。
cp zoo_sample.cfg zoo.cfg
通过 vim zoo.cfg 命令对该文件进行修改:
如果dataDir指定的目录不存在的话需要新建一下:
mkdir /usr/local/zookeeper-3.7.1/data
上面红色框住的内容即是我们要修改的内容,主要有两处:
① 第一个是 dataDir ;
② 第二个是需要新增 server.A=B:C:D 配置:
对配置文件中的几个参数解释如下:
① tickTime:基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime时间就会发送一个心跳。
② initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
③ syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
④ dataDir:存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
⑤ clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
⑥ server.A=B:C:D
A表示这个是第几号服务器,
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
参考官方文档:ZooKeeper: Because Coordinating Distributed Systems is a Zoo
在 上一步 dataDir 指定的目录下,创建 myid 文件。然后在该文件中写入上一步 server 配置的对应 A 数字。
比如我们上面的 dataDir 配置:
dataDir=/usr/local/zookeeper-3.7.1/data
server 配置是:
server.0=192.168.31.101:2888:3888
server.1=192.168.31.102:2888:3888
server.2=192.168.31.103:2888:3888
那么就必须在 192.168.31.101 机器的的 /usr/local/zookeeper-3.7.1/data 目录下创建 myid 文件,并在该文件中写上 0 即可。
# 显示文件内容
cat myid
其他的ip对应的机器依次创建myid文件,写上相应配置数字即可。192.168.31.102 对应的 myid 文件写上 1,192.168.31.103 对应的 myid 文件写入 2 。
为了能够在任意目录下启动zookeeper集群,我们需要配置环境变量。
编辑 /etc/profile 文件,在文件末尾添加相应的配置信息:
#set zookeeper environment
export ZK_HOME=/usr/local/zookeeper-3.7.1
export PATH=$PATH:$ZK_HOME/bin
然后执行如下命令使得环境变量生效:
source /etc/profle
基本命令:
# 启动命令
zkServer.sh start
# 停止命令
zkServer.sh stop
# 重启命令
zkServer.sh restart
# 查看集群节点状态
zkServer.sh status
分别对集群的三台机器执行启动命令。执行完毕后,分别查看集群节点状态:
出现如下即是集群搭建成功:
三台机器,slave1 成功的通过了选举称为了leader,而剩下的两台成为了 follower。这时候,如果将slave1关掉,会发现剩下两台又会有一台变成了 leader节点。
进入zookeeper客户端: zkCli.sh
进去之后可输入以下命令进行操作:
PS1: 任意节点都可以看到zookeeper集群的数据一致性
PS2: 创建节点有俩种类型:短暂(ephemeral) 持久(persistent)
如果没有出现第 7 步显示的集群状态,说明搭建过程出了问题,那么解决问题的首先就是查看日志文件:
zookeeper 日志文件目录在:dataDir 配置的目录下,文件名称为:zookeeper.out。通过查看日志来解决相应的问题。下面是两个可能的原因:
查看防火墙状态,如果没有关闭的话需要关闭一下。
在 zoo.cfg 文件中,会有对 dataDir 的一项配置,需要创建该目录,并且注意要在该目录下创建 myid 文件,里面的配置和 zoo.cfg 中的server.x 配置保持一致。
在 /etc/rc.d/init.d/ 下创建一个文件,名为 zookeeper :
cd /etc/rc.d/init.d/
touch zookeeper # 创建文件
chmod 777 zookeeper # 赋给权限:可读可写可执行
vim zookeeper
文件中加入以下内容:
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/java/jdk8
export PATH=$PATH:$JAVA_HOME/bin
case $1 in
start) /usr/local/zookeeper-3.7.1/bin/zkServer.sh start;;
stop) /usr/local/zookeeper-3.7.1/bin/zkServer.sh stop;;
status) /usr/local/zookeeper-3.7.1/bin/zkServer.sh status;;
restart) /usr/local/zookeeper-3.7.1/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
chkconfig --add zookeeper 添加一个新服务供 chkconfig 管理
chkconfig zookeeper on 配置为在每次系统启动时启动
chkconfig --list zookeeper 列出 chkconfig 中zookeeper的自启动状态
执行完上面三条命令后,我们就可以用 service zookeeper start/stop 来启动停止zookeeper服务了,使用 service zookeeper status 查看运行状态
如果上面的操作都正常的话;你就可以重启你的linux服务器看下ZooKeeper有没有跟着自启动。
ZooInspector下载:ZooInspector
解压之后进入到解压后的文件夹 ZooInspector\build 下,在空白处,按住 shift 键,同时 鼠标右键,进入 Powershell 窗口:
执行命令:
java -jar zookeeper-dev-ZooInspector.jar
进行连接ZooKeeper节点:
出现如下界面则显示连接成功: