zoukankan      html  css  js  c++  java
  • Zookeeper介绍

    1.   Zookeeper概念简介:

    Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务

    1. zookeeper是为别的分布式程序服务的
    2. Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
    3. Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
    4. 虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

                管理(存储,读取)用户程序提交的数据;

                并为用户程序提供数据节点监听服务;

    2.   zookeeper集群机制

    半数机制:集群中半数以上机器存活,集群可用。

    zookeeper适合装在奇数台机器上!!!

    3.  zookeeper特性

    1、Zookeeper:一个leader,多个follower组成的集群

    2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的

    3、分布式读写,更新请求转发,由leader实施

    4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

    5、数据更新原子性,一次数据更新要么成功,要么失败

    6、实时性,在一定时间范围内,client能读到最新数据

     

    4.  zookeeper数据结构

    1、层次化的目录结构,命名符合常规文件系统规范(见下图:数据结构图)

    2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识

    3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)

    4、客户端应用可以在节点上设置监视器
     

    4.1.  节点类型

    1、Znode有两种类型:

        短暂(ephemeral)(断开连接自己删除)

        持久(persistent)(断开连接不删除)

    2、Znode有四种形式的目录节点(默认是persistent )

            PERSISTENT

            PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )

            EPHEMERAL

            EPHEMERAL_SEQUENTIAL

    3、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

    4、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

     

    4.2.  zookeeper命令行操作

    运行 zkCli.sh –server <ip>进入命令行工具

    1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:

        [zk: 202.115.36.251:2181(CONNECTED) 1] ls /

    2、创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串:

        [zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData“

    3、我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:

        [zk: 202.115.36.251:2181(CONNECTED) 3] get /zk

    4、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:

        [zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl“

    5、下面我们将刚才创建的 znode 删除:

        [zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk

    6、删除节点:rmr

        [zk: 202.115.36.251:2181(CONNECTED) 5] rmr /zk


    5.  zookeeper-api应用

    5.1.   基本使用

     org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话

    它提供了表 1 所示几类主要方法  :

    功能

    描述

    create

    在本地目录树中创建一个节点

    delete

    删除一个节点

    exists

    测试本地是否存在目标节点

    get/set data

    从目标节点上读取 / 写数据

    get/set ACL

    获取 / 设置目标节点访问控制列表信息

    get children

    检索一个子节点上的列表

    sync

    等待要被传送的数据

     

    Zookeeper的监听器工作机制

    监听器是一个接口,我们的代码中可以实现Wather这个接口,实现其中的process方法,方法中即我们自己的业务逻辑

    监听器的注册是在获取数据的操作中实现:

    getData(path,watch?)监听的事件是:节点数据变化事件

    getChildren(path,watch?)监听的事件是:节点下的子节点增减变化事件

    6. zookeeper应用案例(分布式应用HA||分布式锁)

    实现分布式应用的(主节点HA)及客户端动态更新主节点状态

    某分布式系统中,主节点可以有多台,可以动态上下线

    任意一台客户端都能实时感知到主节点服务器的上下线

    7.   zookeeper原理

    Zookeeper虽然在配置文件中并没有指定master和slave

    但是,zookeeper工作时,是有一个节点为leader,其他则为follower

    Leader是通过内部的选举机制临时产生的

     

    7.1.  zookeeper的选举机制(全新集群paxos)

    以一个简单的例子来说明整个选举的过程.
    假设有五台服务器组成的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一样,当小弟.

    7.2.  非全新集群的选举机制(数据恢复)

    那么,初始化的时候,是按照上述的说明进行选举的,但是当zookeeper运行了一段时间之后,有机器down掉,重新选举时,选举过程就相对复杂了。

    需要加入数据id、leader id和逻辑时钟。

    数据id:数据新的id就大,数据每次更新都会更新id。

    Leader id:就是我们配置的myid中的值,每个机器一个。

    逻辑时钟:这个值从0开始递增,每次选举对应一个值,也就是说:  如果在同一次选举中,那么这个值应该是一致的 ;  逻辑时钟值越大,说明这一次选举leader的进程更新.

    选举的标准就变成:

                       1、逻辑时钟小的选举结果被忽略,重新投票

                       2、统一逻辑时钟后,数据id大的胜出

                       3、数据id相同的情况下,leader id大的胜出

    根据这个规则选出leader。

  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6666608.html
Copyright © 2011-2022 走看看