安装zookeeper
1.下载zookeeper
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.9/
2.解压,在conf目录下创建并配置zoo.cfg文件
文件内容如下:
# The number of milliseconds of each tick
tickTime=2000
# 配置leader节点和follower节点启动并且完成数据同步的时间
initLimit=10
# leader节点和follower节点心跳检测的最大延迟时间
syncLimit=5
# 存储快照的目录
dataDir=/tmp/zookeeper/data
# 对外暴露的端口
clientPort=2181
3.到安装目录的bin目录运行 启动zookeeper
./zookeeper.sh start
4.停止zookeeper
./zookeeper.sh stop
5.前台启动zookeeper,方便查看日志
zkServer.sh start-foreground
6.zookeeper集群
Zookeeper 不仅可以单机提供服务,同时也支持多机组成集群来提供服务。实际上 Zookeeper 还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个 Zookeeper 实例,下面将介绍集群模式的安装和配置。
Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。集群模式除了上面的三个配置项还要增加和修改下面几个配置项:
initLimit=5
syncLimit=3
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
server.<id>=<ip>:<port1>:<port2>
其中
id是一个数字,表示这个是第几号服务器;
ip 是这个服务器的 ip 地址;
port1 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
port2 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 ip 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 id 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
7.集群实现代码
将zoo_sample.cfg 拷贝3分 zoo1.cfg,zoo2.cfg,zoo3.cfg ******************************************************************
1).zoo1.cfg:
# The number of milliseconds of each tick
tickTime=2000
# 配置leader节点和follower节点启动并且完成数据同步的时间
initLimit=10
# leader节点和follower节点心跳检测的最大延迟时间
syncLimit=5
# 存储快照的目录
dataDir=/tmp/zookeeper/data1
# 对外暴露的端口
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
2).zoo2.cfg
# The number of milliseconds of each tick
tickTime=2000
# 配置leader节点和follower节点启动并且完成数据同步的时间
initLimit=10
# leader节点和follower节点心跳检测的最大延迟时间
syncLimit=5
# 存储快照的目录
dataDir=/tmp/zookeeper/data2
# 对外暴露的端口
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
3)zoo3.cfg
# The number of milliseconds of each tick
tickTime=2000
# 配置leader节点和follower节点启动并且完成数据同步的时间
initLimit=10
# leader节点和follower节点心跳检测的最大延迟时间
syncLimit=5
# 存储快照的目录
dataDir=/tmp/zookeeper/data3
# 对外暴露的端口
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
分别在 /data,data1,data2,下建立myid 文件,内容分别是1,2,3
启动zookeeper服务
分别启动1,2,3:
./zkServer.sh start zoo1.cfg
./zkServer.sh start zoo2.cfg
./zkServer.sh start zoo3.cfg
前面两个起的时候可能会有错误提示:
这个可以不用管,等服务都起来之后就不会有这个提示了