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的环境变量

 

[html] view plain copy 在CODE上查看代码片派生到我的代码片
  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配置

 

[html] view plain copy 在CODE上查看代码片派生到我的代码片
  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集群的配置

      暂略。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM