Zookeeper三种部署模式

Zookeeper 有三种部署模式分别是单机模式、伪集群模式、集群模式。
这三种模式在不同的场景下使用:

  • 单机部署:一般用来检验 Zookeeper 基础功能,熟悉 Zookeeper 各种基础操作及特性。
  • 伪集群部署:在单台机器上部署集群,方便在本地验证集群模式下的各种功能。
  • 集群部署:一般在生产环境使用,具备一致性、分区容错性。

安装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
  1. tickTime : 服务器与客户端之间交互的基本时间单元。
  2. initLimit : 此配置表示允许 follower 连接并同步到 leader 的初始化时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
  3. syncLimit : leader 服务器与 follower 服务器之间信息同步允许的最大时间间隔,如果超过次间隔,默认 follower 服务器与 leader 服务器之间断开链接。
  4. dataDir : 保存 Zookeeper 数据路径。
  5. dataLogDir : 保存 Zookeeper 日志路径,当此配置不存在时默认路径与 dataDir 一致。
  6. clientPort : 客户端访问 Zookeeper 时经过服务器端时的端口号,默认配置为 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。
在这里插入图片描述
然后退出当前客户端,现在在第二台机器中查看一下这个节点。
Zookeeper三种部署模式_第1张图片
查询数据可以看到是正确的,就说明我们的伪分布集群成功了。

集群模式

集群模式其实和伪分布集群的部署方式差不多的,但是我们在伪分布集群中看到,因为是在一台实例上创建所以我们配置时 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

每台机器的配置都是一样的。依次配置就行了。配置好了,其实集群模式下搭建也就搭建完成了。
测试结果因为没有三台虚拟机就不验证了,但是流程应该是没有问题的,有问题可以交流。

你可能感兴趣的:(Zookeeper三种部署模式)