Zookeeper学习记录(一):Zookeeper简介

文章目录:

      1.1:什么是Zookeeper

      1.2:Zookeeper的集群结构

      1.3:Zookeeper的选举机制

      1.4:Zookeeper的作用



1.1:什么是Zookeeper

       Zookeeper英译:动物管理员


       Zookeeper是分布式集群中的大管家

       分布式集群系统比较复杂,子模块很多,但是子模块往往不是孤立存在的,它们彼此之间需要协作和交互,各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper


      Zookeeper 是为分布式应用程序提供高性能协调服务的工具集合,也是Google的Chubby一个开源的实现,是Hadoop 的子项目


1.2:Zookeepe的集群结构

     


在Zookeeper集群中,主要分为三者角色,而每一个节点同时只能扮演一种角色,这三种角色分别是:

      > leader 负责进行投票的发起和决议,监控集群中的节点是否存活(心跳机制),进行分配资源

      > follower 用于接受客户端请求并向客户端返回结果,在选主过程中参与投票

      >observer 与follower不同,observer不参与选举

特点:
A:Zookeeper:一个leader,多个follower/observer组成的集群
B:全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
C:数据更新原子性,一次数据更新要么成功,要么失败
D:实时性,在一定时间范围内,client能读到最新数据

E:半数机制:整个集群中只要有一半以上存活,就可以提供服务。因此通常Zookeeper由2n+1台servers组成,每个server都知道彼此的存在。每个server都维护的内存状态镜像以及持久化存储的事务日志和快照。为了保证Leader选举能过得到多数的支持,所以ZooKeeper集群的数量一般为奇数。对于2n+1台server,只要有n+1台(大多数)server可用,整个系统保持可用


1.3:Zookeeper的选举机制

zookeeper中有三种选举算法

     >LeaderElection

     >FastLeaderElection(默认算法)

     >AuthLeaderElection

首先介绍几个名词的含义

服务器ID
     配置server时,给服务器标识的id,id越大在选择算法中的权重越大
数据ID
      服务器在运行时产生的数据id,id越大,表示数据越新而且在选举算法中的权重越大
逻辑时钟
      或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。

1.3.1、全新集群选举
以一个简单的例子来说明整个选举的过程.
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么.
1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.

5) 服务器5启动,同4一样,当小弟.


这种情况下如果启动顺序为   53214:主为5       13452:主为4        31524:主为5


1.3.2、非全新集群选举(当leader崩溃或者leader失去大多数的follower)

       (1)每个server会将自己的(数据id 、服务器id 、逻辑时钟)作为广播信息,广播到集群中所有的服务器(server)。然后等待集群中的服务器(server)返回的选举结果

       (2)当某个服务器(server)收到其他server广播过来的数据,它会对这些数据进行对比

第一步:比较逻辑时钟 

          > 逻辑时钟小的server,更新本机逻辑时钟,重新选举

第二步:逻辑时钟一致的时候,根据数据id和服务器id推荐leader

         >首先比较每个server的数据id,比如server1的数据id大,当前server就推荐server1为leader

         >如果最大的数据id有两个server(server1和server2),但是server2的服务器id比server1大,那么当前server就推                荐server2为leader

第二步图解:括号内容为 (服务器id,数据id)


1.4:Zookeeper的作用

Zookeeper包含一个简单的原语集,分布式应用程序可以基于它实现命名服务、配置维护、集群选主等:
>命名服务:注册节点信息,形成有层次的目录结构(类似Java的包名)。
>配置维护:配置信息的统一管理和动态切换。
>集群选主:确保整个集群中只有一个主,其它为从。并且当主挂了后,可以从新选主









猜你喜欢

转载自blog.csdn.net/qq_37936542/article/details/80853429