好程序员Java教程分享Zookeeper基本原理与运用场景

好程序员Java教程分享Zookeeper基本原理与运用场景node

好程序员Java教程分享Zookeeper基本原理与运用场景1、什么是Zookeeper?程序员

    zookeeper是一个分布式的一致性协调服务。服务器

    换句话说,也能够把zookeeper当作一个小型的分布式文件系统。可是和FastDFS不一样,zookeeper只适合用来存储一些小型的数据或者配置信息。分布式

2、Zookeeper的文件系统

    zookeeper底层是一个树形结构,进行数据的存储。spa

和Linux、Window等系统不一样:设计

    Linux和Window中有文件和文件夹的概念。文件夹下面只能有文件,文件下面不能再有数据。文件夹自己不存放数据,文件自己用来进行数据存储。3d

    Zookeeper中的节点,没有文件夹和文件之分,全部节点均可以进行数据存储,同时也能够拥有子节点。每一个节点称之为znodeserver

    znode的分类:blog

    1)临时节点-ephemeral:临时节点由某个客户端建立,若是该客户端断开了和zookeeper服务器的连接,则该临时节点就会被自动删除。注意:临时节点不能有子节点。教程

    2)持久性节点-persistent:持久化的节点会永久存在于文件系统中,除非客户端显示的删除该节点。该节点是最多见的节点。

    3)临时顺序节点-ephemeral_sequential:和临时节点拥有相同的特色,惟一的却别在于该节点名称会自动维护一个编号。

    4)持久性顺序节点-persistent_sequential:和持久性节点拥有相同的特色,惟一的却别在于该节点名称会自动维护一个编号。

    文件系统的操做命令:

    ls 路径:查看某个路径下的子节点状况,zk中只能写绝对路径(全部的路径都必须从/出发)

    create [-s] [-e] path data : 建立一个节点,在path路径的位置。数据为data(数据不能为空,至少要为'')。-s表示顺序节点 -e临时节点

    get 路径:查看指定路径对应的节点数据。每一个节点都分为:数据部分、描述信息

    set path data:修改指定节点的数据

    delete path:删除指定节点数据,若是下面的有子节点须要先删除子节点

3、Zookeeper的通知机制(watch)

    什么是通知机制?

        客户端能够选择对某个znode进行监听。当这个znode发生变化时(自己的添加、删除、修改以及子节点的变化),会主动通知监听了这个znode的客户端。zookeeper的通知机制有一次性触发原则,znode发生变化后,一旦通知了客户端,则断开客户端的监听,若是须要继续监听节点的变化,则必须从新发起监听。

    exists - 能够监听到节点建立、节点的内容修改、节点的删除

    getData - 能够监听节点内容修改,节点的删除

    getChildren - 能够监听子节点的添加、删除(子节点内容变化和子节点的子节点的变化不能监听)

4、Zookeeper的运用场景

    1)配置文件统一管理

        在分布式集群的工程中,一般由不少服务部署在不一样的服务上,每一个服务都有本身的配置信息,若是须要修改某个配置,则可能须要对多态服务器进行配置的修改,是很是不方便的。那么就可使用zookeeper帮助咱们进行统一的配置文件管理。

        在zookeeper上建立一个持久化节点,将全部的配置信息放入到这个节点中,而后每台服务器都去监听这个节点的变化(Watch机制)。若是有新的配置信息,开发者只须要上传到zookeeper的这个节点上(更新节点的配置数据)。每一个服务就能收到zookeeper节点的更新通知,而后从节点中读取新的配置,应用到系统中,完成配置的更新。

    2)集群管理

        在某些集群中,可能须要知道其余集群服务器的状态,好比有新的机器加入集群,或者有老的机器退出集群等。这个时候就能够经过zookeeper进行集群的统一管理。

    3)分布式锁

        · 保持独占

        · 控制顺序

              全部客户端同时在一个节点的下面建立临时顺序节点。而后只须要让编号最小的节点的机器得到锁就能够了。

5、Zookeeper的集群

        集群的工做原理:

        zookeeper集群可能有N台机器,这些机器中必定会存在一个leader,其余的机器就是follower。对于客户端来讲,能够随意链接任何一个集群中服务器。若是某个客户端须要对zk进行更改的操做,这些操做命令最终须要提交给leader。leader将命令分发给全部的集群服务器。当一半以上的集群服务器执行该命令成功,则leader就会通知全部节点进行事务提交,达到数据同步更新的目的。

        zookeeper集群的“过半数存活原则”:

        在zookeeper集群中,当存活的机器数量超过总集群一半的时候,整个集群才能正常工做。

        基于过半数存活原则,zookeeper的集群数量必定是奇数台。

       为何zookeeper须要设计一个过半数存活机制?

        由于整个集群中,有可能由于“脑裂“,致使整个集群分为2个甚至多个集群,若是没有“过半数存活的机制“,那么整个zookeeper集群提供的数据将没法再保证数据一致性。因此为了保证总体数据的强一致性,zookeeper规定了过半数存活这个原则。

        zookeeper集群的角色:

        leader:领导者

        follower:追随者

        observer:观察者,观察者和追随者功能同样,可是区别在于观察者不会参与投票环节。

相关文章
相关标签/搜索