一、概述

1、定义:

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
ZooKeeper框架最初是在“Yahoo!”上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。

image.png
image.png

Zookeeper是什么

(1)是一个数据库

(2)是一个拥有文件系统特点的数据库

(3)是一个解决了一致性问题的分布式数据库

(4)是一个具有发布和订阅功能的分布式数据库

2、数据一致性解决

(1)数据一致性:

强一致性:等到更新操作同步到从数据库之后再提供给用户查询请求
image.png
弱一致性:即使数据没有同步到从数据库也可提供查询

最终一致性:没更新也可提供查询,且集群不认为没同步的数据是错误的,但最终会同步

CAP:

Consistency:一致性(强一致性)

Availability:可用性

Partition Tolerance:分区容错性(网络稳定)

启动两个zookeeper
image.png
连接一台
image.png
数据同步
image.png

image.png

CP without A 保证强一致性 可能会不可用

AP without C 保证可用性,则数据可能会不一致

image.png

Zookeeper是保证了cp

CAP需要根据场景来选择
image.png

image.png
image.png
image.png

3、Zookeeper是如何解决数据一致性问题的

(1)保证一致性的要素:

领导:领导者选举机制

两阶段提交:预提交(询问),ack,提交

过半验证机制:超过半数

(2)ZAB协议:

1)领导者选举

发生的节点:
集群启动
Leader挂掉
Follower挂掉后Leader发现已经没有过半的Follower跟随自己了

2)数据同步

3)接受请求(二阶段提交)

选举规则:

比较机器强的

1、先比较zid,zid大的强(zid越大数据越新);

2、比较id,id越大越强

image.png
image.png
image.png

image.png
选举过程中不提供服务

事务性请求:创建、修改、删除
非事务性请求:get、ls、exists

image.png
image.png

image.png
image.png
image.png
即使其他机房的Zookeeper跟leader断开连接也不允许选举新的leader,以此来组织老列问题