zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

zookeeper介绍

zookeeper 介绍
2023-09-14 08:57:35 时间

 
一、概念
    Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务 ,比如同步,配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端跑在java上,提供java和C的客户端API。
 
什么是分布式系统:
    多台计算机构成,计算机之间通过网络通信,彼此进行交互,并实现共同目标。
 
分布式系统存在什么问题:
    计算机间会很混乱,不可控,这时候就需要一个协调者,zookeeper就可以充当这个协调者。
 
二、zookeeper功能结构介绍
   协调: 多个节点一起完成的一个动作 
   作用:
    1.集群成员管理 Group membership
    2.Locking
    3.选主  Leader Election
    4.同步  Synchronization
    5.发布/ 订阅 Publisher/Subscriber
 
zookeeper数据模型
    分层结构  
    树形结构中的每个节点叫做Znode  
    每个Znode都有数据 byte[]类型 ,也可以有子节点  
    节点路径  
        -斜线分隔 /Zoo/Duck   
        -没有相对路径  
    通过数据结构stat来存储数据的变化 ACL的变化和时间戳   
    数据发生变化时,版本号会递增   
    可以对Znode中的数据进行读写操作
 
三、应用场景
    1.数据发布/订阅
    数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点上,订阅者进行数据订阅,当数据有变化时,可以及时得到数据的变化通知
 
    2.负载均衡
    本质是利用zookeeper的配置管理功能,涉及的步骤为:
      1)服务提供者把自己的域名及IP端口的映射注册到zk中 
      2)服务消费者通过域名从zk中获取到对应的IP及端口,这个IP及端口有多个,只是获取其中一个 
      3)当服务提供者宕机时,对应的域名与IP的对应就会减少一个映射 
      4)阿里的dubbo服务框架就是基于zk来实现服务路由和负载
 
    3.命名服务
     在分布式系统中,命名服务(Name Service)也是很重要的应用场景,通过zk也可以实现类似于J2EE中的JNDI的效果;分布式环境 ,命名服务更多是资源定位,并不是真正的实体资源,其本质也是用到zk的集中配置管理和查找
 
    4.分布式协调/通知  
        通过watcher和通知机制实    
        -分布式锁  
        -分布式事物
 
    5.集群管理 
    -当前集群中的机器数量 
    -集群中机器的运行时状态 
    -集群中节点的上下线操作
    -集群节点的统一配置
    
    6.Master选举 
    -临时节点 
    -顺序节点
 
    7.分布式锁 
    -排他锁 
    -共享锁
 
    8.分布式队列   
      FIFO
 
四、zookeeper基本概念
    1.集群角色  
    -Leader:为客户端提供读和写服务   
    -Follower:提供读服务,所有写服务都需要转交给Leader角色,参与选举  
    -Observer:提供读服务,不参与选举过程,一般是为了增强zk集群的读请求并发能力
 
    2. 会话 session   
    -Zk的客户端与zk的服务端之间的连接 
    -通过心跳检测保持客户端连接的存活   
    -接收来自服务端的watch事件通知
    -可以设置超时时间
 
    3.数据节点(Znode)
     不是机器的意思而是Zk树形结构中的数据节点,用于存储数据  
    -持久节点:一旦创建,除非主动调用删除操作,否则一直存储在zk上
    -临时节点:与客户端的会话绑定,一旦客户端会话失效,这个客户端创建的所有临时节点都会被移除  
    -SEQUENTIAL Znode:创建节点时,如果设置属性SEQUENTIAL,则会自动在节点名后面追加一个整型数字
 
    4.版本  
    -Version:当前Znode的版本  
    -Cversion:当前Znode的子节点的版本  
    -Aversion:当前Znode的ACL(访问控制)版本
 
    5.Watcher 
    作用于Znode节点
    多种事件通知:数据更新,子节点状态等
 
    6. ACL  
    Access Control Lists  类似于linux/unix的权限控制   CREATE和DELETE是针对子节点的权限控制
    -CREATE:创建子节点的权限  
    -READ:获取节点数据和子节点列表的权限  
    -WRITE:更新节点数据的权限  
    -DELETE:删除子节点的权限  
    -ADMIN:设置节点ACL的权限
 
 
 
五、zookeeper单机模式—安装部署
    注意:单机模式不能用在生产环境上,因为无论从系统可靠性还是读写性能上都不能满足生产的需求   
    Zk是基于java语言开发,因此单机模式的资源需求跟普通的java程序差不多,1个he的CPU和1G内存就足够
 
1.环境准备
    -Jdk1.6及以上
    -机器配置: 2核/2G
2.安装
    -zk下载地址: http://www.apache.org/dyn/closer.cgi/zookeeper/
    -解压文件  
        Windows下采用winzip或者winwar都行  
        Linux下采用tar –zxvf zookeeper-3.4.6.tar.gz  
    -配置环境变量  
        ZOOKEEPER_HOME=/home/zookeeper-3.4.6  
        PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
3.zookeeper目录介绍
bin  
    -.sh linux环境  
    -.cmd windows环境  
conf  
    -zoo_sample.cfg为样例配置文件,需要修改为自己的名称,一般为zoo.cfg
    -Log4j.properties为日志配置文件
Contrib:一些用于操作zk的工具包 
lib:zk依赖的某些包  
Recipes:zk某些用法的代码示例  
Dist-maven:maven编译后的发布目录
 
4.运行前配置
   把conf下的zoo_sample.cfg修改为zoo.cfg
   
Zoo.cfg
    -tickTime:默认3000ms,作为一种基本单元,可用它的倍数来表示系统内部的时间间隔配置,比如:
         2*tickTime是客户端会话的超时时间 
         1*tickTime是客户端与zk服务器端的心跳时间
    -dataDir:无默认配置,必需配置;用于配置存储快照文件的目录,如果没有配置dataLogDir,那么事物日志也会存储在此目录            
    -clientPort:zk的运行端口,默认是2181 
5.启动
    -Windows:直接双击zkServer.cmd  
    -Linux:sh zkServer.sh start   
 
六、客户端命令行
    -Linux:bin/zkCli.sh  
    -Windows:bin/zkCli.cmd   
    不带任何参数默认连接到localhost:2181  
    zkCli.cmd –server ip:port连接到指定的服务器地址
    
    命令行输入help或其他人任何字符查看所有命令列表及语法
 
1.读取  
    ls path [watch]  
    -Path表示指定数据节点的节点路径  
    -列出指定节点下的所有子节点  
    -只能查看第一级的所有子节点   
    -刚安装时 ls / 下只有默认的zookeeper保留节点 
    -Watch表示监听path的子节点的变化
2.创建
    create [-s] [-e] path data acl   
    -创建zookeeper节点
    -  -s或者-e表示创建的是顺序或临时节点,不加默认创建的是持久节点  
    -Path为节点的全路径,没有相对节点的表示方式  
    -Data为当前节点内存储的数据 
    -Acl用来进行权限控制,缺省情况下不做任何权限控制
3.读取  
    get path [watch] 
    -获取指定节点的数据内容和属性信息  
    -Path表示指定数据节点的节点路径
4.更新  
    set path data [version]   
    -更新指定节点的数据内容  
    -Path表示被更新的节点路径  
    -data为更新的数据  
    -Version为指定被更新的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本时会报错  
5.删除  
    delete path [version]   
    -删除指定节点  
    -Path表示被删除的节点  
    -Version为指定被删除的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本时会报错