• Zookeeper简介


    Hadoop中只适用于Hbase分布式部署,hadoop的HA自动切换.

    概述:

        zookeeper是应用于分布式应用的,是一个分布式协调服务.实现分布式应用,同步,配置管理,分组还有命名服务的.实现分布式应用中的协调服务.侧重于高性能,高可靠,还有顺序访问,HDFS只做存储,出发点不一样,都算一个文件系统.

        可靠性可以让它避免成为单点.严格的顺序访问,意味着实现了复杂的同步原子操作.事务性的唯一性.

    ZooKeeper简介

        zookeeper节点可以很多,也可以宕掉几个节点.只要大部分还活着都可以.

        很多的客户端连接到一个zookeeper服务节点中的任意一个.客户端会通过tcp和server进行联系.在联系的过程中,发送请求信息,获取应答信息. 还会获得一些watch events.发送心跳,目的是向服务器获取一些状态信息,数据更新.如果连接到的这台服务器宕了,客户端就会重新去连接.
        zookeeper在使用的时候是以集群的方式实现的.客户端连接的时候.去连接zookeeper中的某一个服务器,client会通过心跳的方式和服务器进行通信.
        zookeeper还是一个有顺序的东西,zookeeper会记录每一次更新的号,更新的号来自于zookeeper事务的顺序,我们的每一次的操作,在zookpeer这都会留下痕迹.
        client是去连接zookeeper server中的某一台,取一个去连接,别的客户端可能会去读取,zookeeper可以保证我们的数据在集群间事务的,如果在操作过程中,某一个客户端失败,整个任务就会是失败的.

    zookeepe认识:

        zookeeper是一个分布式的管理协调工具,它是用来在多个服务器之间进行事务性同步的.zookeeper是一个集群,有很多的节点,这些节点完成一个事务性同步的工作.
        在zookeeper中存在一个目录结构,类似于文件系统,简单的文件系统叫做znode,znode上面存放很多东西.
        数据是在各个服务器之间进行同步的,客户端是连接某一个服务器,然后从上读取数据.
        有顺序,速度快,读的要远远比写的多.
        zookeeper提供的命名空间非常像一个标准的文件系统,名字是一个用斜线分隔的路径元素,组成的一个名字.zookeeper每一个node是使用路径进行分隔的.node在保存数据的时候,还保存数据的版本,acl变化,时间戳,
        临时节点:是创建这个会话产生的时候就存在,一旦这个会话关闭了,这个节点也就没了.

    独立模式下配置:

        没有副本,处理失败,服务器就会宕机.

        conf/zoo,cfg
        tickTime=2000
        dataDir=/var/lib/zookeeper
        clientPort=2181
    
        tickTime:基本的时间单位.毫秒,用于心跳,最小的会话超时.
        dataDir:数据镜像,更新事务性的数据存储的目录.
        clientPort:客户端口,用来监听客户端连接的.
        启动: bin/zkServer.sh start 
        连接到zookeeper:bin/zkClii.sh -server 127.0.0.1:2181(客户端和服务器不一定在一起,如果在一起,不写后面的地址也可以.)
        help:查看帮助.
        ls /:查看根目录下的.
        create /zk_test my_data
        ls /
        get /zk_test
        set /zk_test junk 当zkk_test值变化的时候,是有版本的.

    生产模式下配置:

        运行在zookeeper replication模式下.

        replicated模式包含一组servers.一组服务器我们叫它为quorum,在replication的模式下,所有的quorum都有相同的配置文件.

        tickTime=2000    心跳的时间.
        dataDir=/var/lib/zookeeper    存放日志以及事务性文件的.
        clientPort=2181    客户端连接的端口.
        initLimit=5    限制zookeeper服务器quorum连接到leader花的时间.以tickTime为单元.
        syncLimit=2    同步时间,数据同leader获取的时候拿到的时间.
        server.1=zoo1.2888:3888    
        server.2=zoo2.2888:3888
        server.3=zoo3.2888:3888
        services:列出了zookeeperservers所有的服务器.当服务器启动的时候,要知道要找的myid是谁,文件在data目录下.myid包含服务器数据编号
        2888:zookeeper服务器之间相互连接使用2888.
        3888:follower与leader通信用的.

        客户端用到的主要的main class就是zookeeper这个类(入口类).

        当一个zookeeper对象被创建,那么两个线程就被创建了,一个是IO线程,一个是事件线程,所有的IO发生在IO线程中,用的是Java的NIO,所有事件的回调,发生在事件线程中,也就是说我们创建了一个zookeeper对象之后,产生两个线程,一个是进行数据读写的,一个是进行事件回调的,session维护对服务器的一个重连,包括维护的心跳,在IO线程中,IO线程用于发送心跳,并且连接服务器,服务器那边同步方法的应答也是在IO线程中完成的.
    异步方法的观察和应答事件都是在event线程中完成的.
        ephemeral nodes:临时节点,只要创建他们的会话存在,它就活着,会话结束的时候,ephemeral nodes节点就会被删除.
        watch是监控,是在客户端注册的,当我们服务端数据或者状态有变化的时候watch就会获得对应的event,如果连接断开,watch也会获得这个event,但是这个event来自于local.
    所以说epheral nodes这种节点,创建或者删除的时候,客户端都会收到消息.
        当我们创建一个znode的时候,我们可以请求zookeeper追加一个计数器.这个计数器对于父节点parent是唯一的一个.

  • 相关阅读:
    Javascript小技巧
    VIM
    interview experience
    HTML5
    代码实践
    git clone 速度慢的解决办法
    vscode 找不到相对目录文件的解决办法
    python基础 13 类命名空间于对象、实例的命名空间,组合方法
    python 基础 12 初识类,类方法,类属性
    python 基础 11 带参数装饰器与递归函数
  • 原文地址:https://www.cnblogs.com/xiaolong1032/p/4996469.html
Copyright © 2020-2023  润新知