Zookeeper基本原理
一 zookeeper角色
- 领导者(leader)
领导者负责进行投票的发起和决议,更新系统状态。 - 学习者(learner)
跟随者:Follower用于接收客户端请求并向客户端返回结果,在选主过程中参与投票。
观察者:Observer可以接收客户端连接,并将请求转发给leader节点,但Observer 不参加投票过程,只同步leader的状态,Observer的目的是为了扩展系统,提高读取速度。 - 客户端(client)
应用程序客户端,请求发起方。
二 zookeeper选举
- zookeeper选举算法采用了Paxos协议。
- Paxos的核心思想是当大多数的server写成功,则任务数据写成功。
如果有三个server,则需两个Server写成功即表示任务数据写成功。
如果有四个或者五个server,则需三个Server写成功即表示任务数据写成功。 - Server数目一般为奇数,例如3,5,7等
如果有三个server则最多允许一个Server挂掉。
如果有四个server则同样最多允许一个Server挂掉。
三 zookeeper数据模型
- zookeeper提供一个层次化目录结构,命名符合常规文件系统规范。
- 每个节点在在zookeeper中叫做znode,并且他有唯一的一个路径标识。
- Znode有两种类型:
短暂的(ephemeral) 当客户端连接上zookeeper时,Znode才会存在,当客户端挂掉时,Znode就会被删除。
持久的(persistent) Znode会持久的保存,例如当客户端挂掉或者zookeeper关闭再重启时,Znode还会重新恢复。
节点Znode可以包含数据和子节点。 - Znode的数据可以有多个版本。
- 客户端应用可以在节点上设置监视器(Watcher)。
Watcher作用:监测节点,一旦节点数据被修改,他就会广播给各个客户端,当客户端收到广播时,就会做出响应的调整。 - 节点Znode不支持部分读写,而是一次性完整读写。
- Znode的类型在创建时确定,并且之后不能再修改。
- Znode有四种形式目录节点,
persistent,persistent_sequential,ephemeral,ephemeral_sequential