1、zookeeper的数据模型,类似于文件系统,不同的是每个节点除了可以拥有子节点,节点本身还可以绑定数据。节点的术语叫znode。每个znode还保存有数据的版本信息,ACL的版本信息,时间戳信息等。
2、znode的类型有永久节点和临时节点两种,临时节点在创建它的session消失的时候被删除。临时节点不可以有子节点。这两种节点可以创建为顺序节点。
PERSISTENT(持久的)
EPHEMERAL(暂时的)
PERSISTENT_SEQUENTIAL(持久化顺序编号目录节点)
EPHEMERAL_SEQUENTIAL(暂时化顺序编号目录节点)
3、watchs。客户端可以为一个znode设置一个watch,当这个znode改变的时候,watch会被触发,相应的client会收到通知,然后watch会被删除,想要继续监视znode的变化,client就要重新设置watch。如果client和zookeeper之间的连接断开的时候,client会收到一个本地的通知,做相应的处理。
4、zookeeper的保证
- 顺序性,同一个client发出的update命令,会按顺序执行
- 原子性,update要么成功要么失败,没有部分成功或部分失败。
- 一致性,客户端不管连接哪个zookeeper服务器,看到的数据都是一样的。
- 及时性,zookeeper集群中每个服务器的数据,保证会在一个时间范围内达到最新的状态。
5、zookeeper的数据操作
-
create : creates a node at a location in the tree
-
delete : deletes a node
-
exists : tests if a node exists at a location
-
get data : reads the data from a node
-
set data : writes data to a node
-
get children : retrieves a list of children of a node
-
sync : waits for data to be propagated
6、zookeeper集群的结构
客户端读取数据时,flowwer直接从本地内存中取数据。
客户端写数据时,flowwer会把写请求转发到leader,然后leader向每个flowwer发送一个message proposals,flowwer同意message delivery。当leader收到超过n+1个flowwer的同意回复。。。。,
这个过程使用的是zookeeper的原子广播消息协议,这个消息系统还负责选举leader、flowwer从leader同步数据等过程。
因为这个消息系统是原子性的,所以每个写请求要么全部同步到flowwer要么一个flowwer都不会同步,所以每个flowwer的数据都是一致的。
7、zookeeper节点角色
领导者(leader),负责进行投票的发起和决议,更新系统状态
学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
客户端(client),请求发起方
8、每个zookeeper server的工作状态
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步