一 基本介绍
Zookeeper 是一个分布式协调服务
的开源框架。主要用来解决分布式集群中应用系统的一致性问题
,例如怎样避免同时操作同一数据造成脏读的问题。
ZooKeeper 本质上是一个分布式
的小文件存储系统
。提供基于类似于文件系统的目录树
方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。诸如:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等功能。

1.1 特性
-
全局数据一致(有点吹)
:集群中每个服务器保存一份相同的数据副本,client 无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征; - 可靠性:如果消息被其中一台服务器接受,那么将
被所有的服务器接受
。 - 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上
消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被
发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必
将排在 b 前面。 -
数据更新原子性
:一次数据更新要么成功(半数以上节点成功
),要么失败,不存在中间状态; - 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
补充
zookeeper是顺序一致性(即两个写操作在同一个节点必然是有序的,个人感觉就比最终一致性强一点),zookeeper不能保证每个client访问到的集群中的数据是一致的
线性一致性
:一致性更强。只有一个客户端看到了一个新值,则所有的客户端都不可能看到旧值。
参考:https://www.iteye.com/blog/flyfoxs-2121560
二 集群中的角色

2.1 leader
Zookeeper 集群工作的核心
事务请求(写操作)
的唯一
调度和处理者,保证集群事务处理的顺序性
;集群内部各个服务器的调度者
。
对于 create,setData,delete 等有写操作的请求,则需要统一转发给leader 处理
,leader 需要决定编号、执行操作,这个过程称为一个事务
。
2.2 follower
- 处理客户端
非事务(读操作)请求
,转发事务
请求给 Leader; - 参与集群 Leader
选举投票
。
此外,针对访问量比较大
的 zookeeper 集群,还可新增观察者角色
2.3 observer
- 观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态
同步
过来,其对于非事务
请求可以进行独立处理
,对于事务请求,则会转发给 Leader
服务器进行处理。 -
不会参与
任何形式的投票
只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力
三 集群搭建

3.1 卸载openjdk

3.2 安装sun-jdk
- 将下载的压缩包传到服务器上
- 解压
tar -zxvf jdk-8u211-linux-x64.tar.gz
- 开始配置
vim /etc/profile
在最后一行后面加上
export JAVA_HOME=/usr/local/soft/jdk1.8.0_211
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
- 使更新生效,执行
source /etc/profile
3.3 集群安装
- 先安装轿车在一台机器上部署好zookeeper,参考:https://blog.csdn.net/cndmss/article/details/80220273
-
然后利用虚拟机clone,实现集群效果
效果如下
image.png
四 数据模型
ZooKeeper 的数据模型,在结构上和标准文件系统的非常相似,拥有一个层次的命名空间
,都是采用树形
层次结构,ZooKeeper 树中的每个节点被称为—Znode
。和文件系统的目录树一样,ZooKeeper 树中的每个节点可以拥有子节点。
但也有不同之处:
- Znode
兼具文件和目录两种特点
。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部
分,并可以具有子 Znode。用户对 Znode 具有增、删、改、查等操作(权限允许的情况下) - Znode 具有
原子性
操作,读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表)
,这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。 - Znode 存储数据大小有限制(通常以 KB 为大小单位)
- Znode 通过路径引用,如同 Unix 中的文件路径。路径必须是
绝对
的,因此他们必须由斜杠字符来开头。不能重复,并且一些特殊路径已经被系统占用掉了
4.1 数据结构体

4.2 节点类型

这样,一共就有4种类型的节点
- PERSISTENT:永久节点
- EPHEMERAL:临时节点
- PERSISTENT_SEQUENTIAL:永久节点、序列化
- EPHEMERAL_SEQUENTIAL:临时节点、序列化
4.3 节点属性



五 shell客户端
5.1 连接操作
./zkCli.sh -r -server ip:port
-timeout:当前会话的超时时间,zookeper依靠与客户端的心跳来判断会话是否有效,单位是毫秒
-r: 只读模式,zookeeper的只读模式指一个服务器与集群中过半机器失去连接以后,这个服务器就不在不处理客户端的请求,但我们仍然希望该服务器可以提供读服务。
-server: zookeeper服务器ip地址和端口号
5.2 创建节点

- 临时节点的删除
有一定延时
(因为集群需要判断会话是真的断了,还是网络断了一下)
5.3 节点查看

5.4 更新节点

5.5 删除节点
delete和Rmr

5.6 quota(定额)

5.7 其他命令

六 watch

6.1 机制特点

6.2 通知状态和事件类型

6.3 shell操作watch


网友评论