1.Zookeeper概念
1.zookeeper是一个分布式协调开源框架。
2.zookeeper本质上是一个小文件存储系统。
2.Zookeeper特性
1.全局数据一致性:集群中每一台服务器都保存一份相同的数据副本,client不管连接哪一台服务器,展示的数据都是一致的,这是最重要的特征
2.实时性:zookeeper保证客户端在一定时间间隔内就会获取服务器的更新消息或失效消息。
3.可靠性:被一台服务器接受,就会被所有服务器接受。
4.顺序性:全局有序和偏序两种,全局有序是指在一台服务器上消息a在消息b前面发布,那么在所有的server上消息a都将在b消息前被发布。偏序是指如果一个消息b在消息a后被同一个发布者发布,那么消息a肯定在消息b前面。
5.数据原子更新性:一次数据更新要么成功要么失败,不会有中间状态。
3.Zookeeper服务架构
4.Zookeeper角色
Zookeeper本身是一个高可用的服务,Zookeeper集群中有三种角色:leader、follower、observer。
1.leader:负责投票的发起和决议,更新系统状态,写数据。
2.follower:用于接受客户端请求和返回客户端结果,在选举过程中参与投票
3.observer:可以接受客户端的连接,将写请求转发给leader节点,但不参与投票过程,只同步leader节点状态,主要存在目的是为了提高读取效率。(引进observer的作用:zookeeper需要保证高可用和强一致性,为了支持更多的客户端,需要增加更多的server;server越多投票阶段延迟越大,影响性能,;引入observer,observer不参与投票,接受客户端的连接,然后将写的请求转发给leader节点;加入更多的observer节点,提高伸缩性,同时不影响吞吐率)
5.数据结构
Zookeeper数据模型的结构和unix文件系统结构类似,整体上看都是一棵树,每棵树的节点叫做Znode,每个Znode默认能够存储1MB的数据,每个Znode都可以通过其唯一标识。
和unix文件系统一样,我们可以增加或者删除Znode,在一个Znode下增加或删除一个子Znode,唯一的不同就是在与Znode能够存储数据。
有四种类型Znode:
1.PERSISTENT-持久化目录节点:客户端与Zookeeper断开连接后,节点依然存在。
2.PERSISTEN_SEQUENTIAL-持久化顺序编号节点(永久有序):客户端与Zookeeper断开连接后,该节点依然存在,只是Zookeeper给该节点名称进行顺序编号。
3.EPHEMERAL-临时目录节点:客户端与Zookeeper断开连接后,该节点会被删除。
4.EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:客户端与Zookeeper断开连接后,该节点被删除,Zookeeper给该节点名称进行顺序编号。
注:创建Znode是设置顺序标识,Znode名称后面会有一个附加值,顺序号是一个单调递增的计数器,有父节点维护。
注:在分布式系统中,顺序号可以被用于为所有事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。
6.选举机制
Zookeeper提供三种选取机制:
1.LeaderElection
2.AuthFastLeaderElection
3.FastLeaderElection (最新默认)
全新集群选取机制
目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
服务器5启动,后面的逻辑同服务器4成为小弟。
非全新集群选取机制
对于运行正常的zookeeper集群,中途有机器down掉,需要重新选举时,选举过程就需要加入数据ID、服务器ID和逻辑时钟。
数据ID:数据新的version就大,数据每次更新都会更新version。
服务器ID:就是我们配置的myid中的值,每个机器一个。
逻辑时钟:这个值从0开始递增,每次选举对应一个值。 如果在同一次选举中,这个值是一致的。
这样选举的标准就变成:
1、逻辑时钟小的选举结果被忽略,重新投票;
2、统一逻辑时钟后,数据id大的胜出;
3、数据id相同的情况下,服务器id大的胜出;
根据这个规则选出leader。
选举机制中的概念
1.Serverid:服务器ID
假如有三台服务器编号为1、2、3。
编号越大在算法中权重就越大。
2.Zxid:数据ID
服务器中存放最大的ID
数值越大说明数据越新,在选举算法中权重就越大
3.Epoch:逻辑时钟
也可以叫做投票的次数,同一轮投票过程中逻辑时钟数值是相同的,每投完一次票这个数值就会增加,然后与接收到的其他服务器返回的投票信息相比较,根据不同的数值做出不同的判断。