zookeeper是一个开源的分布式的,为分布式提供了协调服务的Apache项目
zookeeper部署方式有:单机模式和集群模式
zookeeper角色有:Leader(领导者)和Follower(伴随者)和Obsserver
zookeeper集群最少有几台:3台,积数台(如果有4台的话挂2台都不能用,如果是5台的话挂2台还能用)
zookeeper常用命令有:ls create get delete set…
zookeeper大的优点: 强一致性
zookeeper特点
1.zookeeper:一个领导者(Leader),多个跟随者(Follwer)组成的集群。
2.集群中只要欧半数以上节点的存活,zookeeper集群就能正常服务。
3.全局数据一致每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
C:一致性(保证每台集群Server数据的一致性)
A:可用性(如果消息被到一台服务器接受,那么它将被所有的服务器接受)
p:分区容错()
(远程传输)
4.更新请求顺序进行,来自同一个Client的更新请求安其次发送顺序依次执行。
5.数据更新原子性,一次数据更新要么成功,要么失败。
6.实用性,在一定时间范围内,Client能读到最新数据。应该在读数据之前调用sync()接口
zookeeper优点
特点 说明
最终一致性 为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能
可靠性 如果消息被到一台服务器接受,那么它将被所有的服务器接受。
实时性 Zookeeper不能保证两个客户端能同时得到刚更新
的数据,如果需要最新数据,应该在读数据之前调 用sync()接口。
独立性 各个Client之间互不干预
原子性 更新只能成功或者失败,没有中间状态。
顺序性 所有Server,同一消息发布顺序一致。
Zookeeper的角色
领导者(leader),负责进行投票的发起和决议,更新系统状态
学习者(learner),包括跟随者(follower)和观察 者(observer),follower用于接受客户端请求并想 客户端返回结果,在选主过程中参与投票
Observer可以接受客户端连接,将写请求转发给 leader,但observer不参加投票过程,只同步leader 的状态,observer的目的是为了扩展系统,提高读取 速度
客户端(client),请求发起方
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协 议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者 崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后
,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议( proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识 leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的 统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
watch机制:
同归通过观察者模式,可以绑定任何节点,当发生任何操作,已经绑定了的节点,能够被触发。发生联动。