Zookeeper
概述
Zookeeper是一个分布式的协调服务框架
Zookeeper可以解决分布式环境常见的问题
集群管理、统一命名服务
信息配置管理
分布式锁
Zookeeper要解决的问题
zookeeper旨在在分布式应用中,提供可靠的、可扩展的、分布式的、可配置的协调机制来管理整个集群的状态。
Zookeeper的重要性
1.Hadoop
2.Hbase
3.Storm
4.Kafka
结构
Zookeeper结构
1.Zookeeper默认有一个 根节点 (/)
2.Zookeper中每个节点都可以拥有子节点
3.每个节点称为znode节点
4.每个znode节点都可以存储数据
5.多个znode节点共同形成了znode树,znode树是维系在zookeeper服务端的内存中,
目的是供客户端快速查询节点以及节点的数据
6.每个znode节点的路径是唯一的.基于这个特性,我们可以利用zookeeper实现统一的命名服务
7.Zookeeper中,有事务的概念. ①创建节点 ②更新节点数据 ③删除节点 以上三个写操作都属于事务操作. 每产生一个事务,zookeeper服务端都会为这个事务分配一个全局递增的事务id
8.cZxid :创建节点的事务id
9.mZxid:修改节点的事务id
10.pZxid:节点下子节点最大的事务id
11.Zookeeper创建节点时,有4种类型节点
①create /park01 hello 普通节点,可持久化的
②create -e /park01 hello 临时节点. 特点是:当创建此节点的客户端下线后,节点会被删除
③create -s /data hello 顺序节点,特点是:在指定的节点后拼上一个递增的顺序号
④create -s -e /park hello 临时且顺序的
zookeeperAPI操作
1:Zookeeper的连接是一个非阻塞连接方法
①connectString:指定zk服务器的ip地址:端口号
②sessionTimeout:客户端连接服务的超时时间
③监听器,可以指定事件的发生
zookeeper选举
一致性问题
zk服务集群中每台服务器都可以提供读服务,所以要确保每台服务器数据是一致的
2PC算法
为了解决分布式一致性问题,在长期的探索研究过程中,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法。
2PC,是Two-Phase Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。
阶段一:提交事务请求+执行事务
1. 事务询问。
2. 执行事务。
3. 各参与者向协调者反馈事务询问的响应。
阶段二:事务提交
执行事务提交
1. 发送提交请求。
2. 事务提交。
3. 反馈事务提交结果。
4. 完成事务。
中断事务
1. 发送回滚请求。
2. 事务回滚。
3. 反馈事务回滚结果。
4. 中断事务。
优缺点
二阶段提交协议的优点:原理简单,实现方便。
二阶段提交协议的缺点:同步阻塞、单点问题、脑裂、太过保守。
二阶段提交协议存在的最明显也是最大的一个问题就是同步阻塞,这会极大地限制分布式系统的性能。
单点问题:协调者的角色在整个二阶段提交协议中起到了非常重要的作用。一旦协调者出现问题,那么整个二阶段提交流程将无法运转
太过保守:二阶段提交协议没有设计较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败。
Paxos算法
Paxos算法实际上也是一个类2pc算法,而重点是引入了“过半性”的投票理念,通俗地讲就是少数服从多数的原则
Paxos算法支持分布式节点角色之间的轮换,即当协调者出现问题后,参与者可以变成协调者工作。这极大地避免了分布式单点的出现,因此Paxos算法既解决了无限期等待问题,也提高了性能,是目前来说最优秀的分布式一致性协议之一。
选举机制--两个阶段
1.数据恢复阶段
在这个阶段,每个zk服务器要找自己所拥有的最大事务ID(从配置的数据目录中进行恢复),即找到自己所拥有的最新的事务
选举阶段
每台zk服务器都会提交一份选举协议(数据包)
自己所拥有的最大事务ID(Zxid)
自己的选举id(myid文件里的数字)
逻辑时钟值,这个值是确保多台zk服务器在同一轮选举中
当前zk服务器的状态
1)Looking选举状态
2)Leader 领导状态
3)Follower 从属状态
4)Observer 观察者状态
PK原则
1.首先比较最大事务ID,谁大谁当Leader.因为事务id越大,所拥有的数据越新
2,如果事务id比较不出来,就比较选举id,谁大谁当leader
注意:选举满足的最基本要求:过半选举
补充:zk服务集群的服务器数量最好是奇数个,能够更好的满足过半性的要求
zk可以确保当leader挂掉之后选出新的leader
zk集群过半存活
zookeeper的应用场景
1.实现数据的订阅和发布场景
2.实现集群管理
通过临时节点+监听节点被删除事件
3.实现分布式屏障--类似栅栏
4.实现统一命名服务
根据Zookeeper的路径唯一性的特点来实现
5.实现集群的统一配置文件管理
思想和数据的订阅和发布的思想相同.
6.实现分布式锁
通过顺序节点来实现