概述
Zookeeper是一个分布式协调服务中间件,提供的功能包括:配置维护、名字服务、分布式同步、组服务、分布式锁、分布式的ID生成器等。主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成“脏数据”的后果。Zookeeper通过协调服务来对各个系统进行有序的管理,它的三大特性:一致性、可用性、容错性。
安装和配置
因为为实验环境,而不是生成环境,所以这里使用windows环境。下载zookeeper3.1.14,并解压
ZooKeeper节点数有以下要求
- ZooKeeper集群节点数必须是奇数
因为在ZooKeeper集群中,需要一个主节点,也称为Leader节点。
主节点是集群通过选举的规则从所有节点中选举出来的。
在选举的规则中很重要的一条是:要求可用节点数量>总节点数量/2 - ZooKeeper集群要大于等于3个,至少是3个
ZooKeeper可以通过一个节点,正常启动和提供服务。但是,一个节点的ZooKeeper服务不能叫作集群,达不到高可用,在正常情况下,搭建ZooKeeper集群,至少需要3个节点
集群配置
log日志目录
在log目录下创建三个节点的日志目录zoo-1、zoo-2、zoo-3
data数据目录
在data目录下创建三个节点的数据目录zoo-1、zoo-2、zoo-3
创建myid文件
为每一个节点创建一个id文件,即myid文件(没有后缀名)
- myid文件的唯一作用是记录(伪)节点的编号
- myid文件是一个文本文件,文件名称为myid
- myid文件内容为一个数字,表示节点的编号
- 在myid文件中只能有一个数字,不能有其他的内容
- myid文件的存放位置,默认处于数据目录下
※myid文件中id的值只能是一个数字,id的范围是1~255,表示集群最多的节点个数为255个。
配置文件
conf目录下复制三份,分别命名为zoo-1.cfg、zoo-2.cfg、zoo-3.cfg,参考内容如下
#zoo-1.cfg
tickTime=4000
initLimit=10
syncLimit=5
dataDir=E:/zookeeper/zookeeper-3.4.14/data/zoo-1
dataLogDir=E:/zookeeper/zookeeper-3.4.14/log/zoo-1
clientPort=2181
server.1=127.0.0.1:28881:38881
server.2=127.0.0.1:28882:38882
server.3=127.0.0.1:28883:38883
#zoo-2.cfg
tickTime=4000
initLimit=10
syncLimit=5
dataDir=E:/zookeeper/zookeeper-3.4.14/data/zoo-2
dataLogDir=E:/zookeeper/zookeeper-3.4.14/log/zoo-2
clientPort=2182
server.1=127.0.0.1:28881:38881
server.2=127.0.0.1:28882:38882
server.3=127.0.0.1:28883:38883
#zoo-3.cfg
tickTime=4000
initLimit=10
syncLimit=5
dataDir=E:/zookeeper/zookeeper-3.4.14/data/zoo-3
dataLogDir=E:/zookeeper/zookeeper-3.4.14/log/zoo-3
clientPort=2183
server.1=127.0.0.1:28881:38881
server.2=127.0.0.1:28882:38882
server.3=127.0.0.1:28883:38883
※参数说明:
- dataDir:数据目录选项,配置为前面准备的数据目录。myid文件处于此目录下
- dataLogDir:日志目录选项,配置为前面准备的日志目录。如果没有设置该参数,默认将使用和dataDir相同的设置
- clientPort:表示客户端连接ZooKeeper集群中的节点的端口号,clientPort一般设置为2181(生产环境下clientPort基本都是相同的,实验环境中,因为在本地一台机器上,所以设置了不同端口)
- 节点信息的配置
节点信息需要配置集群中所有节点的(id)编号、IP地址和端口号。格式为:server.id=host:port:port
(1)不能有相同id的节点,需要确保每个节点的myid文件中的id值不同
(2)每一行“server.id=host:port:port”中的id值,需要与所对应节点的数据目录下的myid文件中的id值保持一致
(3)每一个配置文件都需要配置全部的节点信息。不仅仅是配置自己的那份,还需要配置所有节点的id、ip、端口
(4)在每一行“server.id=host:port:port”中,需要配置两个端口。前一个端口(如示例中的28881)用于节点之间的通信,后一个端口(如示例中的38881)用于选举主节点
※在实际的分布式集群模式下,由于不同节点的ip不同,每一行记录中可以配置相同的端口 - tickTime
配置单元时间。单元时间是ZooKeeper的时间计算单元,其他的时间间隔都是使用tickTime的倍数来表示 - initLimit
节点的初始化时间,该参数用于Follower(从节点)的启动,并完成与Leader(主节点)进行数据同步的时间。
该参数默认值为10,表示是参数tickTime值的10倍,必须配置且为正整数 - syncLimit
心跳最大延迟周期。该参数用于配置Leader节点和Follower节点之间进行心跳检测的最大延时时间,Leader节点会通过心跳检测来确定Follower节点是否存活。
该参数默认值为5,表示是参数tickTime值的5倍,必须配置且为正整数。
依次启动zookeeper集群节点
E:\zookeeper\zookeeper-3.4.14\bin>zkServer-1.cmd
E:\zookeeper\zookeeper-3.4.14\bin>zkServer-2.cmd
E:\zookeeper\zookeeper-3.4.14\bin>zkServer-2.cmd
在zookeeper 安装目录bin文件夹下,使用 jps命令查看集群的节点进程数
image.png
使用客户端命令
> zkCli.cmd -server 127.0.0.1:2181
连接成功,信息如下:
连接成功
※ZooKeeper集群需要有1/2以上的节点启动才能完成集群的启动,才能对外提供服务
※可以把启动命令做成服务,这样就可以变成后台服务来运行。
拓展zkClient
上面我们使用了zkClient命令,连接到服务端后,用help命令可以列出ZooKeeper的所有命令
zk的客户端常用命令:
zk的客户端常用命令
使用 get命令获取ZNode节点信息
> get /
ZNode节点信息
ZNode节点信息的主要属性介绍
ZNode节点信息
网友评论