1.什么是zookeeper?
zookeeper是一个开源分布式的,为分布式框架提供协调服务的Apache项目。
zookeeper的作用:
1.配置管理(当许多服务器都需要某种配置时,使用配置文件一个一个去配,非常麻烦,我们就会需要一种集中管理配置的方法)
2.名字服务
比如为了通过网络问一个系统,我们得知道对方的P地址,但是P地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是不能是域名的。怎么办呢?如果我们每台机器里都备有一份域名到P地的映射,这个倒是能解决一部分问题,但是如果域名对应的P发生变化了又
该怎么办呢?于是我们有了DNS这个东西。我们只需要访问一个大家熟知的known)的点,它就会告诉你这个域名对应的P是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都熟知的访方问点,这里提供统的入口,那么维护起来将方便得多了。
3.分布式锁(选举机制)
当leader出现问题时,进行重新选举,协调集群服务
4、集群管理
在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机器需要感知倒这种变化,然后根据这种变化做出对应的决策。
为什么要设计zookeeper?
zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它主要负责管理存储和管理大家关心的数据,然后接受观察者的注册,一旦管理的这些数据的状态发生了变化,zookeeper就将负责已经在zookeeper上注册的那些观察者做出相应的反应
zookeeper的特点
1)zookeeper:一个领导者(leader),多2)个跟随者(Follower)组成的集群。
2)集群中只有在半数以上节点存活,zookeeper集群能正常服务,所以zookeeper适合安装在奇数台服务器上
3)全局数据一致,每个server保存一份相同的数据副本,客户端无论连接到哪个server,数据都是一致的
4)更新请求顺序执行,来自同一个客户端的更新请求按其发送顺序依次执行
5)数据更新原子性,一次数据更新要么成功,要么失败。
6)实时性,在一定时间范围内,客户端能读到更新数据。
1.2应用场景
提供的服务包括:统一的命名服务、统一配置管理、统一的集群管理、服务器节点动态上下线、负载均衡等;
2、zookeeper选举机制
2.1)zookeeper选举机制,第一次启动
2.2)zookeeper非第一次启动
(1)czxid:创建节点的事务zxid
每次修改ZooKeeper状态都会产生一个ZooKeeper事务ID。事务ID是ZooKeeper中所有修改总的次序。每次修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
(2)ctime:znode被创建的毫秒数(从1970年开始)
(3)mzxid:znode最后更新的事务zxid
(4)mtime:znode最后修改的毫秒数(从1970年开始)
(5)pZxid:znode最后更新的子节点zxid
(6)cversion:znode子节点变化号,znode子节点修改次数
(7)dataversion:znode数据变化号
(8)aclVersion:znode访问控制列表的变化号
(9)ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
(10)dataLength:znode的数据长度
(11)numChildren:znode子节点数量
监听器原理
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper会通知客户端。监听机制保证ZooKeeper保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。
4、写数据流程