zoukankan      html  css  js  c++  java
  • ZooKeeper原理

    1,ZooKeeper概述
    ··· 作用:
        · ZooKeeper是为分布式应用程序提供的一个分布式开源协调框架,是Hadoop和Hbase的重要组件;
        · 主要用于解决分布式集群中应用系统的一致性问题;
        · 提供了类似于Unix的节点树方式来存储数据;
        · 可用于维护和监控存储数据的状态变化,从而达到基于数据的集群管理;
        · 提供了一组原语(机器指令),以及java和C语言的接口。
    ··· 特点:
        · 也是一个分布式集群,一个领导者(leader),多个跟随者(follower)。
        · 集群中只要有半数节点存活,ZooKeeper集群就可以正常服务。
        · 全局数据一致性:每个server都会保存一份相同到的副本,无论client连接哪个server,数据都是一样的。
        · 原子性:一次数据的更新,要么成功要么失败。
        · 数据的实时性:在一定时间范围内,client能够读取到最新的数据。
    ··· 数据模型:
        · ZooKeeper中的数据模型与Unix中的文件系统类似都是树形结构。在这个系统中没有文件和目录,而是采用节点                    (node)的概念,在这里是 znode;znode既可以保存数据,类似于文件;也可以保存其他znode,类似于目录。
        · 一个znode最多存储 1M的数据。
    ··· 应用场景:
        · 同一配置管理
        · 同一集群管理
        · 节点动态上下线感知
        · 软负载均衡
        · 分布式锁
        · 分布式队列
     
    2,安装配置
    ··· 安装
        · 把ZooKeeper-3.4.14.tar.gz解压到 /opt/app/中。
        · 配置ZooKeeper环境变量。
    ··· 配置
        · 修改zoo.cfg文件:从conf/zoo_sample.cfg中复制一份。
        · 配置dataDir
        · 配置三个服务器的server.id,并在相应的dataDir下新建一个myid文件,内容为相应的id。
     
    3,基本命令
    ··· zkServer.sh start :服务端命令
        · start 启动
        · stop 关闭
        · status 状态
    ··· zkCli.sh [-server] [ip:port]:启动客户端
        · 客户端常用命令:ls、get、set、quit、delete、create(创建时必须写入内容)
     
    4,ZooKeeper工作原理
    ··· 选举机制
        · 基于节点在半数以上才能正常服务的要求,ZooKeeper适合安装在奇数台机器上。
        · ZooKeeper没有在配置中指定leader和follower,而是通过选举机制来选取一个leader,其他的为follower。
        · 选举时的权重:逻辑时钟(Epoch):已有票数 > 数据Id(zxid):保存的最新数据id最大 > 服务器Id(server.id)
    ··· 监听原理
        · 源码实现是观察者模式
        · 1,首先要有一个main线程,在main线程中创建ZooKeeper客户端。
        · 2,ZooKeeper客户端会创建两个线程,listener负责监听,connect负责网络连接通信。
        · 3,connect线程将注册的监听事件发送给ZooKeeper,ZooKeeper将这个监听事件添加到事件列表中。
        · 4,ZooKeeper监听到有数据或路径变化时,就会将这个消息发送给 listener线程。
        · 5,listener线程内部调用了 process()方法。
        · 用途:监听节点数据的变化;监听节点增减的变化。
    ··· 写数据流程
        · client向ZooKeeper中的Server1写数据时,如果Server1不是leader,则把请求转发给 leader。
        · leader会将请求广播给所有server,各个server写成功后就会通知leader。
        · 当leader收到半数以上的server写成功的通知后,就说明写成功了。
        · 成功后leader会通知Server1,Server1再通知client,这时写操作就算成功了。
        
     
  • 相关阅读:
    关于hive开窗函数的问题
    MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标
    win8 安装VC++ 6.0 出现错误的解决方法
    在数组中进行二分查找找出某数在数组中的下标
    编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
    若干个数 以“字符串形式‘从键盘输入,将其转换为 double 型,并求平均数
    使用IO技术,创建一个目录,然后复制一个文件到该目录!实现复制的功能。(在博客园上传的第一份代码)
    easyui datagrid editor可选type
    MVC统计在线人数
    替换SQL字段中的换行符,回车符
  • 原文地址:https://www.cnblogs.com/shendeng23/p/12369666.html
Copyright © 2011-2022 走看看