Zookeeper--基本概念

ZooKeeper是用于分布式系统的高性能协调服务,通过简单的接口提供了命名服务,配置管理,同步和组服务等常用服务。 ZooKeeper是分布式的,开放源码的,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。

角色:

Zookeeper分为服务端和客户端,客户端连接到服务端的某台机器上,通过维护一个TCP连接发送请求,接受请求,发送心跳和获取观察的事件。如果该连接中断,客户端尝试连接到其他服务端。启动服务端集群后,集群中的服务器首先选举一个Leader,然后进入工作,当Leader机器崩溃后,剩下正常的机器会继续选举,Leader的作用是保证数据的一致性。

在ZooKeeper服务侧集群当中有两种角色Leader和Follower。Leader可以接受client请求,也接收其他Server转发的写请求,负责更新系统状态。 Follower也可以接收client请求,如果是写请求将转发给Leader来更新系统状态,读请求则由Follower的内存数据库直接响应。在zk的3.3.3版本以后,又添加了一种新角色Observer。Observer的作用同Follower类似,唯一区别就是它不参与选主过程。

特性:

1.最终一致性:客户端无论连接到哪个服务端,获取到的数据都一致。

2.实时性:客户端在一个时间范围内总能获取到服务端的更新信息或失效信息。

3.原子性:数据的更新只能是成功的或失败的。

4.顺序性:所以数据的更新请求都是单调有序的。

数据模型:

Zookeeper数据模型类似文件系统的目录树结构,特点如下:

1.每个节点(znode)被其所在的路径唯一标识,如/Apps/App1。

2.znode可以存储数据,EPHEMERAL类型节点没有子节点。

3.znode有版本,即znode中的数据有版本。

4.znode名称可以自动编号,即如果App1存在,再创建的节点会自动命名为App2

5.临时znode在失去连接的时候自动删除。

6.客户端服务端保持长连接,一个连接状态称为session,session失效了,临时节点就会自动删除。

7.任何znode的变化都可被监控,包括数据的变化和子节点的变化。当监控到变化,监控者(客户端)被通知,执行回调方法。

工作原理:

Zookeeper核心机制是原子广播,它保证了个服务端之间的数据同步。Zab协议保证了这一点。

Zookeeper有两种工作模式:恢复模式和广播模式。当服务启动时和Leader崩溃后进入恢复模式,恢复模式下Zookeeper进行leader选举,耗时在200ms内。当Leader被选举出来,且大多数服务器与Leader完成诗句同步后,ZK进入广播模式。为了保证事务的顺序一致性,ZK采用了递增的事务ID(zxid)来标识事务。

所有的提议都会被加上zxid,zxid为64位的数字,高32位是epoch用来标识leader是否改变的每一次leader选举出来都有一个新的epoch。zxid低32位用来递增计数。

每个服务器在工作中有3个状态:

Looking:当前服务器不知道谁是leader,搜索中。

Leading:当前服务器即为leader,领导中。

Following:当前服务器不是leader,正在与leader同步中。

同步流程:

1.leader等待服务器连接。

2.follower连接Leader,将最大的zxid发送给leader。

3.Leader根据follower的zxid确定同步点。

4.同步后通知follower成为uptodate状态。

5.follower收到uptodate消息后,同步完成。

leader工作流程:

leader功能:恢复数据,保持心跳,相应消息

leader可响应的消息有PING,REQUEST,ACK和REVALIDATE

PING即心跳消息,REQUEST为follower发送的提议(写请求或同步请求),ACK是follower对提议的回复,超过半数的follower通过,则commit。REVALIDATE为延长session的请求。

follower工作流程:

向leader发送请求并响应。

接受client请求并响应,接受写请求时发送给leader处理。

follower可响应的请求:

PING:发送心跳信息

PROPOSAL:leader发起的提案,follower投票

Commit:提议被commit

UPTODATE:同步完成

REVALIDATE:延长session的响应

SYNC:客户端发起,强制返回更新的数据

end

原文地址:https://www.cnblogs.com/luangeng/p/7376487.html