Zookeeper是什么?按照官方语言来说, ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
首先我们来了解一下什么是分布式。在这里大家可能会混淆分布式和集群的概念。我在网上层看到过一个自认为比较形象的比喻。小饭店原来只有一个厨师,切菜洗菜备料炒菜全干,后来客人多了,厨房一个厨师忙不过来,又请了一个厨师,两个厨师都炒一样的菜,这两个厨师的关系是集群,为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来,又请了一个配菜师,这两个配菜师的关系是集群。分布式讲究的是协作,一个事件的发生可以触发多个事件同时进行不同的业务运算。而集群中的成员功能是一样的。
Zookeeper集群由一组server组成,其中包含一个leader节点和若干follower节点,也就是Master/salve模式。Zookeeper的核心是原子广播,保证了各个server之间的同步,实现这个机制的协议是Zab协议。
Zab有两种模式
①恢复模式(选主)
当zookeeper集群启动时,将会从所有的server中选出一个leader(核心在于paxos一致性算法,有想详细了解这个算法的可以关注我下一篇文章),当某个leader宕机后,也会进入恢复模式,重新选举出新的leader,这也是zookeeper高可用的原因。不会出现一台服务器挂掉,导致整个集群瘫痪的情况。
Paxos的核心思想是当多数server写成功,则任务数据写成功,如果有三个server,则两个写成功即可,如果有四个server,则三个写成功即可,这两种情况都只允许一个server挂掉,也就是说它们的容灾能力是一样的。所以为了节省资源,我们一般都用奇数个数作为服务器部数。
②广播模式(同步)
下图为同步的一个操作流程
client向follwer发出一个写请求
follower把请求发送给leader
leader接收到请求后发起投票通知follwer
follower把投票结果发送给leader
leader开始写入并通知follwer,然后commit
follwer把请求结果返回给client
本篇文章是有青岛达内培训为您呈现,希望给您带来更多更好的文章