Zookeeper 有三种部署模式分别是单机模式、伪集群模式、集群模式。
这三种模式在不同的场景下使用:
从 Apache 官网下载一个 Zookeeper 稳定版本,本次采用的是 apache-zookeeper-3.6.1。
https://zookeeper.apache.org/releases.html
解压到你想安装的目录即可
注意 Zookeeper 要求 Java 运行环境,并且需要 JDK 版本 1.6 以上。
安装好了,其实单机模式的部署任务的一大半就差不多完成了,剩下的就是需要自己创建一个配置文件。
默认配置文件路径为 apache-zookeeper-3.6.1-bin/conf/ 目录下,文件名为 zoo.cfg。我们进入 conf 目录下可以看到一个 zoo_sample.cfg 文件,可供参考。在 conf 目录下我们复制 zoo_sample.cfg 文件重命名为 zoo.cfg。
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
我们需要修改的配置的是 dataDir 路径值。修改好了单机模式下的 Zookeeper 就安装好了。
dataDir=xxxx/server1/data
dataLogDir=xxxx/server1/logdata
我们再看一些这个文件里其他的属性值:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=xxxxxx
dataLogDir=xxxxxx
# the port at which the clients will connect
clientPort=2181
其中 2,3 的内容是在集群模式下使用的。
伪集群模式其实就是在单台机器上运行多个 Zookeeper 实例, 在之前的属性值中我们看到了 clientPort 参数用来设置客户端连接 Zookeeper 服务器的端口。例如:./zkCli.sh -server [ip]:[port] 命令中,IP 指的是组成 Zookeeper 服务器的 IP 地址,Port为组成 Zookeeper 服务器之间的通信端口。由于伪集群模式中,我们使用的是同一台服务器所以我们必须要保证多个 Zookeeper 实例的配置文件的 Client 端口不能冲突。
作为集群,我们最少要有三个实例。首先将 Zookeeper 压缩包解压到三个目录下:
tar -zxvf zookeeper-3.6.1.tar.gz /home/ZK/server1
tar -zxvf zookeeper-3.6.1.tar.gz /home/ZK/server2
tar -zxvf zookeeper-3.6.1.tar.gz /home/ZK/server3
然后在 server1/data/ 目录下创建文件 myid 文件并写入“1”;在 server2/data/ 目录下创建文件myid并写入“2”,在 server3/data/ 目录下创建文件 myid 文件并写入“3”。这个 data 目录就是单机模式那里确定的 dataDir 的路径。
最后就是修改每个实例中的 zoo.cfg 文件了。主要就是配置三台服务器的 server.A=B:C:D、port 端口以及 dataDir 和 dataLogDir 路径值。
server1/conf/zoo.cfg 文件:
# Server 1
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/ZK/server1/data
dataLogDir=/home/ZK/server1/dataLog
# the port at which the clients will connect
clientPort=2181
server.1= 192.168.1.111:2888:3888
server.2= 192.168.1.111:2889:3889
server.3= 192.168.1.111:2890:3890
#server.A=B:C:D 其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;
C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。
server2/conf/zoo.cfg 文件:
# Server 2
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/ZK/server2/data
dataLogDir=/home/ZK/server2/dataLog
# the port at which the clients will connect
clientPort=2182
server.1= 192.168.1.111:2888:3888
server.2= 192.168.1.111:2889:3889
server.3= 192.168.1.111:2890:3890
#server.A=B:C:D 其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;
C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。
server3/conf/zoo.cfg 文件:
# Server 3
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/ZK/server3/data
dataLogDir=/home/ZK/server3/dataLog
# the port at which the clients will connect
clientPort=2183
server.1= 192.168.1.111:2888:3888
server.2= 192.168.1.111:2889:3889
server.3= 192.168.1.111:2890:3890
#server.A=B:C:D 其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;
C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。
进入三个实例的 bin 目录下,启动三台 Zookeeper 实例:
启动之后通过 ,在第一台机器上创建 data 节点值为 123。
然后退出当前客户端,现在在第二台机器中查看一下这个节点。
查询数据可以看到是正确的,就说明我们的伪分布集群成功了。
集群模式其实和伪分布集群的部署方式差不多的,但是我们在伪分布集群中看到,因为是在一台实例上创建所以我们配置时 IP 相同,但是为了区别实例我们的 Port 值不同。在真正的集群模式中 IP 其实是不同的,所以我们的端口号是可以保持一致的也推荐保持一致。
首先是 server1/data/ 目录下创建文件 myid 文件,跟伪分布式操作一致。
然后配置我们的 zoo.cfg 文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/ZK/server1/data
dataLogDir=/home/ZK/server1/dataLog
clientPort=2181
server.1= 192.168.1.111:2888:3888
server.2= 192.168.1.113:2888:3888
server.3= 192.168.1.114:2888:3888
每台机器的配置都是一样的。依次配置就行了。配置好了,其实集群模式下搭建也就搭建完成了。
测试结果因为没有三台虚拟机就不验证了,但是流程应该是没有问题的,有问题可以交流。