一、数据结构

1、ZooKeeper数据类型的结构与Unix文件系统很类型,整体上可以看作是一棵树,每个节点称作一个ZNode。
2、ZooKeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,这上面的每一个节点,称之为“znode”,每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识

数据结构图:

zookeeper 存储路径 zookeeper的存储结构_zookeeper

二、节点类型

ZNode有两种类型:

1、短暂(ephemeral):客户端或服务器断开后,创建的节点自动删除。
2、持久(persistent):客户端或服务器端断开后,创建的节点不会被删除。

ZNode有四种形式的目录节点(默认是persistent)

1、持久化目录节点(persistent) 命令:create /test
客户端与zookeeper断开连接后,该节点不被删除。
2、持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL) 命令:create -s /test
客户端与zookeeper断开连接后,该节点不会被删除,依旧存在着,zookeeper会给该节点名称进行顺序编号。
3、临时目录节点(EPHEMERAL) 命令:create -e /test
客户端与zookeeper断开后,该节点被删除
4、临时目录顺序节点(EPHEMERAL_SEQUENTIAL) 命令:create -e -s /test
该节点在创建时,zookeeper会给该节点名称进行顺序编号,客户端与zookeeper断开后,该节点会被删除。

创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的排序。

zookeeper 存储路径 zookeeper的存储结构_zookeeper_02

三、stat结构体

1、czxid- 引起这个znode创建的zxid,创建节点的事务的zxid(ZooKeeper Transaction Id)
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
2、ctime - znode被创建的毫秒数(从1970年开始)
3、mzxid - znode最后更新的zxid
4、mtime - znode最后修改的毫秒数(从1970年开始)
5、pZxid-znode最后更新的子节点zxid
6、cversion - znode子节点变化号,znode子节点修改次数
7、dataversion - znode数据变化号
8、aclVersion - znode访问控制列表的变化号
9、ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10、dataLength- znode的数据长度
11、numChildren - znode子节点数量

zookeeper 存储路径 zookeeper的存储结构_服务器_03

四、分布式安装

1、集群

分别在三台服务器上部署zookeeper。解压安装在【简介及安装配置】中可见。

2、配置(每个服务器上从zoo.cfg文件都要进行以下配置)

安装配置完成后,需配置zoo.cfg文件。添加如下配置:

zookeeper 存储路径 zookeeper的存储结构_zookeeper 存储路径_04

配置参数:
server.A=B:C:D
A 是一个数字,表示这是第几号服务器;
B 是服务器的ip地址;
C 表示当前服务器与集群中的Leader服务器交互的端口号;
D 表示如果集群中的Leader服务器挂了(宕机等),需要一个端口来重新选举出一个新的Leader,而这个端口就是用来选举时服务器相互通信的端口。

集群模式下,需要在dataDir目录下配置一个myid文件,该文件里存放的就是A的值,ZooKeeper在启动时就读取此文件,拿到myid里面的数据与zoo,cfg里面的配置信息比较,从而判断出时哪台server。(注意:添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码)

3、查看状态

配置完成后,分别启动三台服务器上的zookeeper,在zookeeper中使用命令:bin/zkServer.sh start,启动成功后使用命令:bin/zkServer.sh status 查看状态,信息如下:

[root@admin zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@admin zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[root@admin zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower