zoukankan      html  css  js  c++  java
  • zookeeper介绍

     
    一、概念
        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为指定被删除的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本时会报错   
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    读《31天学会CRM项目开发》记录4
    乡愁
    C#
    C#
    Redhat 离线安装 Docker (Community from binaries)
    使用FRP做内网穿透
    Windows上的Linux容器
    通过Powershell修改文件默认打开方式
    Office2019 VOL版本 自定义安装组件
    使用 Docker 生成 Let’s Encrypt 证书
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/7088005.html
Copyright © 2011-2022 走看看