一、概述
1、定义:
ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
ZooKeeper框架最初是在“Yahoo!”上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。
Zookeeper是什么
(1)是一个数据库
(2)是一个拥有文件系统特点的数据库
(3)是一个解决了一致性问题的分布式数据库
(4)是一个具有发布和订阅功能的分布式数据库
2、数据一致性解决
(1)数据一致性:
强一致性:等到更新操作同步到从数据库之后再提供给用户查询请求
弱一致性:即使数据没有同步到从数据库也可提供查询
最终一致性:没更新也可提供查询,且集群不认为没同步的数据是错误的,但最终会同步
CAP:
Consistency:一致性(强一致性)
Availability:可用性
Partition Tolerance:分区容错性(网络稳定)
启动两个zookeeper
连接一台
数据同步
CP without A 保证强一致性 可能会不可用
AP without C 保证可用性,则数据可能会不一致
Zookeeper是保证了cp
CAP需要根据场景来选择
3、Zookeeper是如何解决数据一致性问题的
(1)保证一致性的要素:
领导:领导者选举机制
两阶段提交:预提交(询问),ack,提交
过半验证机制:超过半数
(2)ZAB协议:
1)领导者选举
发生的节点:
集群启动
Leader挂掉
Follower挂掉后Leader发现已经没有过半的Follower跟随自己了
2)数据同步
3)接受请求(二阶段提交)
选举规则:
比较机器强的
1、先比较zid,zid大的强(zid越大数据越新);
2、比较id,id越大越强
选举过程中不提供服务
事务性请求:创建、修改、删除
非事务性请求:get、ls、exists
即使其他机房的Zookeeper跟leader断开连接也不允许选举新的leader,以此来组织老列问题