Zookeeper原理介绍

 

Zookeeper原理介绍

1、概述

    Zookeeper是一个工具,能够实现集群中的分布式协调服务。服务器

    所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工做。网络

    Zookeeper之因此可以实现分布式协调服务,靠的就是它可以保证分布式数据一致性。数据结构

    所谓的分布式数据一致性,指的就是能够在集群中保证数据传递的一致。负载均衡

    Zookeeper可以提供的分布式协调服务包括:数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁、分布式队列等功能分布式

一、Zookeeper的特色

    Zookeeper工做在集群中,对集群提供分布式协调服务,它提供的分布式协调服务具备以下的特色:工具

1.顺序一致性

    从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中oop

2.原子性

    全部事物请求的处理结果在整个集群中全部机器上的应用状况是一致的,即,要么整个集群中全部机器都成功应用了某一事务,要么都没有应用,必定不会出现集群中部分机器应用了改事务,另一部分没有应用的状况。spa

3.单一视图

    不管客户端链接的是哪一个zookeeper服务器,其看到的服务端数据模型都是一致的。.net

4.可靠性

    一旦服务端成功的应用了一个事务,并完成对客户端的响应,那么该事务所引发的服务端状态变动将会一直保留下来,除非有另外一个事务又对其进行了改变。server

5.实时性

    zookeeper并非一种强一致性,只能保证顺序一致性和最终一致性,只能称为达到了伪实时性。

2、数据模型

    zookeeper中能够保存数据,正是利用zookeeper能够保存数据这一特色,咱们的集群经过在zookeeper里存取数据来进行消息的传递。

一、数据结构

    zookeeper中保存数据的结构很是相似于文件系统。都是由节点组成的树形结构。不一样的是文件系统是由文件夹和文件来组成的树,而zookeeper中是由ZNODE来组成的树。

    每个ZNODE里均可以存放一段数据,ZNODE下还能够挂载零个或多个子ZNODE节点,从而组成一个树形结构。

二、数据模型分类

    节点有顺序节点、普通节点、临时节点和持久节点,四种交叉产生如下四种实际节点类型。

  顺序节点 普通节点
临时节点 顺序临时节点 普通临时节点
持久节点 数序持久节点 普通持久节点

    顺序节点:指定叫什么,除了前缀是指定的名字外,在名字后会会自带一个独一无二自动增加的的编号。

    普通节点:指定叫什么就叫什么。

    临时节点:一个客户端链接建立的临时节点,会在当客户端会话结束时当即自动删除。

    持久节点:建立出来后只要不删除就不会消失,不管客户端是否链接。

3、zookeeper原理

    zookeeper为了保证可靠性,不能用一台机器,而应该是一个集群。

    为了保证zookeeper集群数据可以一致,必须有一个拍板说了算的人,这就是leader,其余的是follower。某一时刻集群里只能有且仅有一个leader。leader能够执行增删改和查询操做,而follower只能进行查询操做。全部的更新操做都会被转交给leader来处理,leader批准的任务,再发送给follower去执行来保证和leader的一致性。

    因为网络是不稳定的,为了保证执行顺序的一致,全部的任务都会被赋予一个惟一的顺序的编号,必定是按照这个编号来执行任务,保证任务顺序的一致性。

    那么何时leader能够认为一个客户端的请求能够算是处理成功了呢?

    若是只有leader或少数机器来承认这个任务,则leader和这些少许机器若是挂掉,则选出来的新的leader并不知道以前批准过的这个任务,最终会违反数据的可靠性。因此要求leader在批准一个任务以前应该保证集群里大部分的机器应该是知道这个提案的,这样即便本身挂掉,根据过半赞成选出来的leader确定是知道这个提案的。而若是leader必定要等到全部follower都赞成才执行提案也很差,由于若是有一个机器挂掉,leader就没法工做,也至关于单节点了,没法保证集群可靠性。因此,只要过半经过leader就能够认为一个提案经过。因此,leader在收到客户端提交过来的任务后,会向集群中全部的follower发送提案等待follower的投票,follower们收到这个提议后,会进行投票,赞成或者不一样意,leader会回收follower的投票,一旦收到过半的投票表示赞成,则leader认为这个提案经过,再发送命令要求全部的follower都进行这个提案中的任务。

    由于采用过半赞成机制,因此最极端的状况下集群中有过半的机器知道最新提案,而若是过半的机器挂掉,则剩下的机器可能不知道最新提案,则没法保证新选出的leader知道最新提案,因此zookeeper中,集群的及其至少要保证过半的存活才能才能正常工做。

    总结:

    zookeeper集群使用了过半选举投票机制,因此必须保证过半存活才能工做,zookeeper的集群中的机器数量最好应该是奇数个,由于须要过半存活集群才能工做,因此偶数个机器提供的集群可靠性其实和偶数-1个机器提供的集群可靠性是同样的。

    leader选举的问题:

    最开始集群启动时,会选择最早达到过半条件的机器做为leader。

    当leader挂掉后,会经过过半投票选出具备最高任务编号的机器成为新的leader。若是有相同的任务编号,那么在配置文件中,谁的serverid大谁为leader。

    未完待续…………!

    上一篇:Zookeeper集群的搭建

    下一篇:Hadoop简介

相关文章
相关标签/搜索