美文网首页
ZooKeeper(二)ZooKeeper基础

ZooKeeper(二)ZooKeeper基础

作者: 7ColorLotus | 来源:发表于2020-06-22 16:27 被阅读0次
    • zookeeper的安装
      1. 下载
        进入要下载的版本的目录,选择.tar.gz文件下载
        下载链接:http://archive.apache.org/dist/zookeeper/
        下载后copy的linux服务器中,文件传输安装yum install -y lrzsz
      2. 解压 tar -zxf zookeeper-3.4.10.tar.gz -C /usr/myapp
      3. 配置
        cd /root/soft/zookeeper-3.4.10
        mkdir data
        mkdir logs
        // 在conf目录下新建zoo.cfg文件,写入以下内容保存:
        tickTime=2000
        dataDir=/root/soft/zookeeper-3.4.10/data
        dataLogDir=/root/soft/zookeeper-3.4.10/logs
        clientPort=2181
        
      4. 启动和停止
        // 进入bin目录
        ./zkServer.sh start
        ./zkServer.sh stop
        ./zkServer.sh restart
        ./zkServer.sh status
        
      5. 伪集群,在一台机器上安装多个zk,配置不同的端口
      tickTime=2000
      dataDir=/usr/myapp/zookeeper1/data
      dataLogDir=/usr/myapp/zookeeper1/logs
      clientPort=2181
      initLimit=5
      syncLimit=2
      server.1=192.168.220.128:2888:3888
      server.2=192.168.220.128:4888:5888
      server.3=192.168.220.128:6888:7888
      写入zk id 到zk的data目录
         echo '1' > data/myid
         
         // 其他两个安装目录依次类推
      
      1. 集群,在不同的机器上安装zooKeeper做集群
      tickTime=2000
      dataDir=/usr/myapp/zookeeper-3.4.5/data
      dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
      clientPort=2181
      initLimit=5
      syncLimit=2
      server.1=192.168.220.128:2888:3888
      server.2=192.168.220.129:2888:3888
      server.3=192.168.220.130:2888:3888
          
      // 写入zk id 到zk的data目录
      echo '1' > data/myid
      
      1. tips: 安装之前一定要确保机器上有jdk
    • zookeeper配置文件
      1. clientPort:客户端连接server的端口,即对外服务端口,一般设置为2181
      2. dataDir:存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir,事务日志的写性能直接影响zk性能
      3. tickTime:zk中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如session的最小超时时间是2*tickTime.
      4. dataLogDir:事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能(No java System peroperty)
      5. globalOutstandingLimit:最大请求堆积数。默认是1000.ZK运行的时候,尽管SERVER已经没有空闲来处理更多的客户端请求了,但是还是允许客户端请求提交到服务器上来,以提高吞吐性能。淡然为了妨害Server内存溢出,这个请求堆积数还是需要限制下的。(Java System property:zookeeper.globalOutstandingLimit)
      6. preAllocSize:预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。(Java System Property:zookeeper.preAllocSize)
      7. snapCount:每进行snapCount次事务日志输出后,触发一次快照(snapshot),此时,ZK会生成一个snapshot文件,同时创建一个新的事务日志文件log.。默认是100000.(真正的代码实现中,会进行一定的随机数处理,以避免所有服务器在同一时间进行快照而影响性能)(Java System property:zookeeper.snapCount)
      8. traceFile:用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能(Java Sytem property:?requestTraceFile)
      9. maxClentCnxns:单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不做任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制
      10. clientPortAddress:对于多网卡机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听clientPort指定的端口。NEW IN 3.3.0
      11. minSessionTimeoutmaxSessionTimeout:Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的session超时时间在2tickTime~20tickTime之歌范围 New in 3.3.0
      12. syncLimit:在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么久认为这个F已经不在线。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题
      13. leaderServers:默认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为no,这样一来,会大大提高写操作的西能。(Java System Property: zookeeper.leaderServers)
      14. server.x=[hostname]:[nnnnn]:这里的X是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其他通信,第二个端口用于Leader选举过程中的投票通信
      15. cnxTimeout:Leader选举过程中,打开一次连接的超时时间,默认是5S。(Java System Property:zookeeper.cnxTimeout)
    • ZK的特性
      1. 会话(Session):客户端与服务端的一次回话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输

      2. 数据节点
        1> 数据节点数据模型:zookeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”
        2> 特性:

        a, 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据
        b, 通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化
        

        3> 节点类型:

        a, 持久节点:跟客户端断开后,数据(ZNODE)还在
        b, 临时节点:跟客户端断开后,数据(ZNODE)不存在
        c, 持久顺序节点:
        d, 临时顺序节点:
        e,实现分布式锁的基础:对于持久节点和临时节点,同一个znode下,节点的名称是唯一的!
        

        4> 节点状态属性

        a, czxid(long):节点被创建的Zxid值
        b, mzxid(long):字节被修改的Zxid值
        c, pzxid(long):字节点最后一次呗修改时的事务id
        注:a,b,c事务ID可以识别出请求的全局顺序
        d, ctime(long):节点被创建的时间
        e, mtime(long):节点最后一次被修改的时间
        f, version(long):节点被修改的版本号
        g, cversion(long):节点的所拥有子节点被修改的版本号
        h, aversion(long):节点的ACL被修改的版本号
        注:f,g,h基于CAS理论保证分布式数据原子性操作
        i, emphememralOwner(long):如果此节点为临时节点,那么它的值为这个节点拥有者的回话ID;否则它的值为0
        j, dataLength(int):节点数据域的长度
        k, numChildren(int):节点拥有的子节点个数
        
        
      3. 版本

      4. Watcher:事件监听器,客户端可以再节点上注册监听器,当特定的时间发生后,ZK会通知到感兴趣的客户端;
        1> eventType: NodeCreated, NodeDeleted, NodeDataChanged, NodeChildrenChange

      5. ACL:ZK采用ACL(access control lists)策略控制权限,5种权限:create,read,write,delete,admin
        1> ACL机制:表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(curda)
        2> zookeeper提供了如下几种机制scheme:

           a, world:它下面只有一个id,叫anyone,world:anyone代表任何人,zookeeper中对所有人有权限的节点就是属于world:anyone的
           b, auth:它不需要id,只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authentication,也支持username/password形式的
           authentcation)
           c, digest:它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
           d, ip:它对应的id为客户机的IP地址,设置的时候可以设置一个IP段,比如:192.168.1.0/16,表示匹配前16个bit的IP段
        
      6. 集群角色


        ZooKeeper集群角色.png

    相关文章

      网友评论

          本文标题:ZooKeeper(二)ZooKeeper基础

          本文链接:https://www.haomeiwen.com/subject/pvzxfktx.html