zoukankan      html  css  js  c++  java
  • zookeeper分布式协调服务的使用一

    Zookeeper是一个高性能,分布式的应用协调服务。


    提供服务:

    1、集群成员的管理(Group Membership)

    2、分布式锁(Locking)

    3、选主(Leader Election)

    4、同步(Synchronization)

    5、发布/订阅(Publisher/Subsriber)


    一、数据模型

    • 分层结构
    • 属性结构的中的每个节点叫做Znode
    •  每个Znode都有数据(byte[]类型),也可以有子节点
    • 节点路径: 斜线分割(/zoo/duck);没有相对路径
    • 通过数据结构stat类存储数据的变化,ACL的变化和时间戳
    • 数据发生变化时,版本号递增
    • 可以对Znode中的数据进行读写操作


    二、应用场景

    1、数据发布/订阅

          发布者将数据发布到zk的一个或者一系列的节点上,订阅者进行数据订阅,当有数据变化时,可以及时的得到数据变化的通知。


    2、负载均衡

          本质是利用zookeeper的配置管理功能,步骤为:
          服务提供者把自己的域名及IP端口的映射注册到zk中
          服务消费者通过域名从zk中获取到对应的IP及端口,这个IP及端口有多个,只是获取其中一个
          当服务这当及时,对于的域名与IP的对于就会减少一个映射


    3、命名服务

          在分布式系统中,命名服务(Name Service)也就是重要的应用场景,zk命名服务提供的是资源定位,其本质也是通过zk的集中配置管理和查找


    4、分布式协调/通知

          通过watcher的通知机制实现

          分布式锁

          分布式事务


    5、集群管理

          当前集群中的机器数量

          集群中机器的运行时状态

          集群中节点的上下线操作

          集群节点的统一配置


    6、Master选举

          临时节点

          顺序节点

    7、分布式锁

           排它锁

          共享锁

    8、分布式队列

          FIFO机制


    三、Zookeeper的机制

    1、集群角色

          Leader:为客户端提供读写服务

          Follow:提供读服务,所有写服务需要交给Leader角色,参与选举

          Observe:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求的并发能力


    2、会话(session)

          zk的客户端与zk服务器之间的连接

          通过心跳检测保持客户端连接的存活度

          接受来自服务端的watch事件通知

          可以设置超时间


    3、数据节点(Znode)

          zk树形结构中的数据节点,用于存储数据

          持久节点:一旦创建,除非主动调用删除操作,否者一直存储在zk上

          临时节点:与客户端的回话绑定,一旦客户端回话消失,这个客户端创建的临时节点都会被移除

          SEQUENTIAL Znode:创建节点时,如果设置属性SEQUENTIAL,则会自动在节点名后面追加一个整型数字


    4、版本

          Version:当前Znode的版本

          Gversion:当前Znode的子节点的版本

          Aversion:当前Znode的ACL(访问控制)版本


    5、Watcher

          作用于Znode节点上

          多种事件通知:数据更新,子节点状态等


    6、ACL(Access Control Lists)权限控制

          CREATE:创建子节点的权限

          READ:获取节点数据和子节点列表的权限

          WRITE:更新节点数据的权限

          DELETE:删除子节点的权限

          ADMIN:设置节点ACL的权限

          其中:CREATE和DELETE是针对子节点的权限控制


    四、zookeeper的配置部署(单机配置)

    1、配置环境变量

          在/etc/profile文件中配置zk的环境变量

    1. export JAVA_HOME=/usr/andy/jdk/jdk1.7.0_79  
    2. export ZOOKEEPER_HOME=/usr/andy/zookeeper/zookeeper-3.4.8  
    3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOOKEEPER_HOME/bin:$PATH  
    4. export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$ZOOKEEPER_HOME/lib  

          生效配置:  source /etc/profile 

           

    2、zookeeper配置

    1. # The number of milliseconds of each tick  
    2. tickTime=2000  
    3. # The number of ticks that the initial   
    4. # synchronization phase can take  
    5. initLimit=10  
    6. # The number of ticks that can pass between   
    7. # sending a request and getting an acknowledgement  
    8. syncLimit=5  
    9. # the directory where the snapshot is stored.  
    10. # do not use /tmp for storage, /tmp here is just   
    11. # example sakes.  
    12. dataDir=/usr/andy/zookeeper/zookeeper-3.4.8/data  
    13. dataLogDir=/usr/andy/zookeeper/zookeeper-3.4.8/logs  
    14. # the port at which the clients will connect  
    15. clientPort=2181  
    16. # the maximum number of client connections.  
    17. # increase this if you need to handle more clients  
    18. #maxClientCnxns=60  
    19. #  
    20. # Be sure to read the maintenance section of the   
    21. # administrator guide before turning on autopurge.  
    22. #  
    23. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
    24. #  
    25. # The number of snapshots to retain in dataDir  
    26. #autopurge.snapRetainCount=3  
    27. # Purge task interval in hours  
    28. # Set to "0" to disable auto purge feature  
    29. #autopurge.purgeInterval=1  

          1、将conf下的zoo_sample.cfg修改配置为zoo.cfg

          2、tickTime:默认2000ms,作为基本单元,用它的配属来表示系统内部的时间间隔配置,比如:

                 2*tickTime是客户端回话的超时时间

                 1*tickTime是客户端与zk服务器端的心跳时间

          dataDir:用于配置存储快照文件的目录,如果没有配置dataLogDir,事务日志也会存储在该目录【需要配置】,一般创建data文件夹

          dataLogDir:事务日志母了路径,一般在zookeeper下创建logs文件夹

          clientPort:zk的运行端口,默认2181

    3、启动与关闭

           cd zookeeper-3.4.8/bin

          ./zkServer.sh  [start|start-foreground|stop|restart|status|upgrade|print-cmd]

    [plain] view plain copy 在CODE上查看代码片派生到我的代码片
    1. [root@localhost bin]# ./zkServer.sh  start  
    2. ZooKeeper JMX enabled by default  
    3. Using config: /usr/andy/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg  
    4. Starting zookeeper ... STARTED  
    5. [root@localhost bin]# netstat -anp | grep 2181  
    6. tcp6       0      0 :::2181                 :::*                    LISTEN      14562/java            
    7. [root@localhost bin]#   

    启动成功。


    五、zookeeper集群的配置

          暂略。

  • 相关阅读:
    subString用法
    [转]Apache Commons工具集简介
    MyEclipse发布项目更改项目名
    ubuntu下设置文件权限
    mysql数据库中实现内连接、左连接、右连接
    hibernate中onetomany实例一
    hibernate中manytoone实例一
    FireFox中使用ExtJs日期控件错误的解决方法
    Ext.ux.form.SearchField使用方法
    mysql kill操作
  • 原文地址:https://www.cnblogs.com/lykxqhh/p/5690932.html
Copyright © 2011-2022 走看看