1.概述
1.1 ZooKeeper概述
Zookeeper是一个分布式协调服务的开源框架(Leader角色)。主要用来解
决分布式集群中应用系统的一致性问题。
ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于
文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。
从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变
化,从而可以达到基于数据的集群管理。
1.2 ZooKeeper特性
1.全局数据一致
2.可靠性
3.顺序性
4.数据更新原子性: 一次数据更新要么成功(半数以上节点成功),
要么失败,不存在中间状态;
5.实时性
2. ZooKeeper的集群角色
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1683aa10e07d2aad9515afabbc72621b.png)
1:Leader
1:管理其他节点,保证集群事务处理的顺序性;
2:主要完成事务操作(写操作 增删改),也可以完成非事务操作;
2:Follower
1:完成非事务(读)操作;
2:参与投票选举;
3:Observer
1:完成非事务操作;
3: ZooKeeper 的结点类型
Znode有两种:
1. 临时节点: 一旦会话结束,临时节点将被自动删除,当然可以也可以
手动删除。临时节点不允许拥有子节点。
普通临时节点;
序列化临时节点;
2. 永久节点: 该节点的生命周期不依赖于会话,并且只有在客户端显
示执行删除操作的时候,他们才能被删除。
普通永久节点;
序列化永久节点;
PERSISTENT:永久节点
EPHEMERAL:临时节点
PERSISTENT_SEQUENTIAL:永久节点、序列化
EPHEMERAL_SEQUENTIAL:临时节点、序列化
4: 节点的操作
1:客户端和服务器的连接方式
1:bin/zkCli.sh
只能连接本主机
2:bin/zkCli.sh -server node1:2181
可以连接集群任何主机
进入到zk的bin目录:cd /export/server/zookeeper-3.4.6/bin/
启动客户端: sh zkCli.sh
2. 创建结点:
创建普通永久节点
create /app1 hello
创建序列化的永久节点
create -s /app2 world
创建临时节点
create -e /tempnode world
创建序列化的临时节点
create -s -e /tempnode2 aaa
3:查看节点列表 从 / 目录开始
ls /app1 查看节点
ls /app1/app11 查看子节点
3:获取节点数据
get /app1
4:修改节点
set /app1 world
5:删除
delete /app1 删除的节点不能有子节点
rmr /app1 递归删除
结点属性:
mzxid: Znode被修改的事务id,即每次对znode的修改都会更新mZxid。
数字越大表示数据越新
ephemeralOwner
0:表示永久节点
非0:表示临时节点
5. ZooKeeper 的watch机制
Watch机制用来监控简单的创建,销毁、修改
过程: 客户端向服务端注册Watcher、服务端事件发生触发Watcher、客户端
回调Watcher得到触发事件情况
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a60f4a33d0fae4c910caf3a6e9e9da3b.png)
6. ZooKeeper的选举机制
zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜
出的逻辑。(过半原则)
1:第一次启动选举
核心点是判断投票数是否过半,然后比较myid的值
2:Leader宕机选举
核心点是比较谁的数据最新(Mzxid 越大月薪),如果数据都是最新,
则比较myid的值.