Zookeeper Windows 安装配置(单机 - 集群)
# 官网下载
官网地址:Apache ZooKeeper (opens new window)
选择当前稳定版本下载,我们可以看到有如下两个选项
Apache ZooKeeper 3.8.4 (asc, sha 512):不带源码
Apache ZooKeeper 3.8.4 Source Release (asc, sha 512):带源码的安装包,对源码感兴趣的可以下载此版本
本次我们选择不含源码版本,之后解压压缩包即可
# 更改配置
进入到解压后的安装目录下,新增两个文件夹,一个命名为 data ,一个命名为 log
找到解压目录下的 conf 目录,将目录中的 zoo_sample.cfg 文件,复制一份,重命名为 zoo.cfg
修改 zoo.cfg 配置文件,将默认的 dataDir=/tmp/zookeeper 修改成 zookeeper 安装目录所在的 data 文件夹,修改如下
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin\\data
dataLogDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin\\log
2
3
4
5
# 启动服务端
进入安装目录下的 bin 目录,双击 zkServer.cmd 启动
# 启动客户端
双击 zkCli.cmd 启动
启动之后可以看到 data 和 log 文件夹下均生成了 version-2 文件夹,即可启动成功
# 注意问题
zk 启动会占用 8080 端口,如果其他项目占用该端口则会启动失败,建议添加配置 admin.serverPort=端口号,以此修改端口
遇到闪退问题可能是 data 路径配置错误,或是没有配置好 JDK 环境和 java 环境变量
# 集群配置
上述为单机启动,也可以设置集群启动,这里条件有限使用的是伪集群
我们将上述安装目录复制三份,如下
# 配置 zoo.cfg
然后分别配置三个 zk 的 zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-1\\data
dataLogDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-1\\log
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
2
3
4
5
6
7
8
9
10
11
12
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-2\\data
dataLogDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-2\\log
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
2
3
4
5
6
7
8
9
10
11
12
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-3\\data
dataLogDir=E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-3\\log
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
2
3
4
5
6
7
8
9
10
11
12
关于 zoo.cfg 的配置进行说明:
① 在集群模式下,集群中每台机器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置:server.id=host:port:port。其中,id 被称为 Server ID,用来标识该机器在集群中的机器序列号。同时,在每台 Zookeeper 机器上,我们都需要在数据目录(即 dataDir 参数指定的那个目录)下创建一个 myid 文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的 Server ID 数字。
第一个 port 用于指定 follower 与 leader 进行通信和数据同步所使用的 tcp 端口;第二个 port 指定 leader 选举中投票通信的 tcp 端口。
② 在 Zk 的设计中,集群中所有机器上的 zoo.cfg 文件的内容都应该是一致的。因此最好使用 svn 或是 git 把此文件管理起来,确保每个机器都能共享到一份相同的配置。
③ myid 文件中只有一个数字,即一个 Server ID。例如,server.1 的 myid 文件内容就是"1"。注意,清确保每个服务器的 myid 文件中的数字不同,并且和自己所在机器的 zoo.cfg 中 server.id=houst:port:port 的 id 一致。另外,id 的范围是 1~255。
④ 参数的作用说明:
tickTime:默认值为 3000,单位是毫秒(ms),可以不配置。参数 tickTime 用于配置 Zookeeper 中最小时间单元的长度,很多运行时的时间间隔都是使用 tickTime 的倍数来表示的。例如,Zk 中会话的最小超时时间默认是 2*tickTime。
dataDir:该参数无默认值,必须配置。参数 dataDir 用于配置 Zookeeper 服务器存储快照文件的目录。
clientPort:参数 clientPort 用于配置当前服务器对外的服务端口,客户端会通过该端口和 Zk 服务器创建连接,一般设置为 2181。
initLimit:该参数默认值:10,表示是参数 tickTime 值的 10 倍,必须配置,且为正整数。该参数用于配置 Leader 服务器等待 Follower 启动,并完成数据同步的时间。Follower 服务器在启动过程中,会与 Leader 建立连接并完成对数据的同步,从而确定自己对外提高服务的起始状态。leader 服务器允许 Follower 在 initLimit 时间内完成这个工作。
syncLimit:该参数默认值:5,表示是参数 tickTime 值的 5 倍,必须配置,且为正整数。该参数用于配置 Leader 服务器和 Follower 之间进行心跳检测的最大延时时间。在 Zk 集群运行的过程中,Leader 服务器会与所有的 Follower 进行心跳检测来确定该服务器是否存活。如果 Leader 服务器在 syncLimit 时间内无法获取到 Follower 的心跳检测响应,那么 Leader 就会认为该 Follower 已经脱离了和自己的同步。
server.id:该参数无默认值,在单机模式下可以不配置。该参数用于配置组成 Zk 集群的机器列表,其中 id 即为 Server ID,与每台服务器 myid 文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定 Follower 服务器与 Leader 进行运行时通信和数据同步时所使用的端口,第二个端口测专门用于进行 Leader 选举过程中的投票通信。
# 创建 myid
分别在三个 zk 安装目录下的 data 目录下创建 myid 文件,然后在该文件第一行填上对应的数字
E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-1\\data 创建值为"1"的myid文件
E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-2\\data 创建值为"2"的myid文件
E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-3\\data 创建值为"3"的myid文件
2
3
# 启动集群
分别启动三个 zk 的 zkServer.cmd(未全部启动会出现报错,原因是心跳检测失败,全部启动即可)
方便起见也可以使用如下 bat 脚本启动全部节点
start call E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-1\\bin\\zkServer.cmd
start call E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-2\\bin\\zkServer.cmd
start call E:\\Zookeeper\\apache-zookeeper-3.8.4-bin-3\\bin\\zkServer.cmd
2
3
客户端连接测试
zkCli.cmd -server 127.0.0.1:2181
# 当然连接 2182,2183 也可以
2
# 节点可视化
查看 zookeeper 上的节点信息时,输命令很麻烦,可以使用常用的可视化的客户端 zooinspector
zooinspector 仓库:zzhang5/zooinspector: An improved zookeeper inspector (github.com) (opens new window)