zoukankan      html  css  js  c++  java
  • zookeeper的安装以及shell命令使用

    zookeeper概述:

      zookeeper是一个开源的分布式协调服务,提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布订阅、负载均衡、命名服务、集群管理分布式锁、分布式队列等功能。

      数据一致性分为强一致性和最终一致性,强一致性指的如果数据不一致,就不对外提供数据服务,保证用户读取的数据始终是一致的。数据强一致性只需要通过锁机制即可解决,只有当同步完成以后才对外提供服务。而最终一致性要求数据最终同步即可,没有实时性要求。

      应用场景:维护配置信息、分布式锁服务、集群管理、生成分布式唯一ID

    CAP原则:CAP在分布式系统中主要指的是一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)

      一致性:一致性指的是强一致性

      可用性:系统提供的服务一直处于可用状态,用户的操作请求在指定的响应时间内响应请求,超出时间范围,认为系统不可用

      分区容错性:分布式系统在遇到任何网络分区故障的时候,仍需要能够保证对外提供一致性和可用性服务,除非是整个网络都发生故障。

      在一个分布式系统中不可能同时满足一致性、可用性、分区容错性,最多满足两个,对于分布式互联网应用而言,必须保证P,所以要么满足AP模型、要么满足CP模型

    zookeeper 的三种角色 :

      为了避免zk的单点问题,zk采用集群方式保证zk高可用
      leader
        leader负责处理集群的写请求,并发起投票,只有超过半数的节点同意后才会提交该写请求
      follower
        处理读请求,响应结果。转发写请求到leader,在选举leader过程中参与投票
      observer
        observer可以理解为没有投票权的follower,主要职责是当整个zk集群读请求负载很高时协助follower处理读请求。

        为什么不增加follower节点呢?原因是增加follower节点会让leader在提出写请求提案时,需要半数以上的follower投票节点同意,这样会增加leader和follower的通信压力,降低写操作效率。

    zookeeper 两种模式:

      恢复模式
        当服务启动或领导崩溃后,zk进入恢复状态,选举leader,leader选出后,将完成leader和其他机器的数据同步,当大多数server完成和leader的同步后,恢复模式结束
      广播模式
        一旦Leader已经和多数的Follower进行了状态同步后,进入广播模式。进入广播模式后,如果有新加入的服务器,会自动从leader中同步数据。leader在接收客户端请求后,会生成事务提案广播给其他机器,有超过半数以上的follower同意该提议后,再提交事务。

    zookeeper环境搭建:需要先安装jdk环境

      1)单机环境

        1.上传zookeeper压缩包,并解压:tar -zxvf zookeeper-3.4.9.tar.gz

        2.为 zookeeper 准备配置文件:

          cd conf  cp zoo_sample.cfg zoo.cfg

          在zookeeper根目录下,创建 data 文件夹 mkdir data

          修改zoo.cfg中的data属性 dataDir=/usr/local/zookeeper/zookeeper-3.4.9/data

        3.zookeeper 服务启动
          进入bin目录,启动服务输入命令 ./zkServer.sh start

          关闭服务输入命令 ./zkServer.sh stop

          查看状态 ./zkServer.sh status

      2)集群环境

        1.基于zookeeper-3.4.9复制三份,目录名称分别为zookeeper2181、zookeeper2182、zookeeper2183

          cp -r zookeeper-3.4.9 zookeeper2181

          cp -r zookeeper-3.4.9 zookeeper2182

          cp -r zookeeper-3.4.9 zookeeper2183

        2.修改zookeeper2181服务器对应配置文件

          

        3.在上一步dataDir指定的目录下,创建myid文件,然后在该文件添加上一步server配置的对应A数字

          

        4.zookeeper2182、zookeeper2183参照步骤2/3进行相应配置

        5.分别启动三台服务器,检验集群状态

          ./zkServer.sh start

          登录命令:

          

        6.observer角色及其配置

          

    数据结构:

      

      Znode 节点类型:
        持久化目录节点( PERSISTENT)
          客户端与zookeeper断开连接后,该节点依旧存在
        持久化顺序编号目录节点( PERSISTENT_SEQUENTIAL)
          客户端与zookeeper断开连接后,该节点依旧存在,Zookeeper会给该节点按照顺序编号
        临时目录节点( EPHEMERAL)
          客户端与zookeeper断开连接后,该节点被删除
        临时顺序编号目录节点( EPHEMERAL_SEQUENTIAL)
          客户端与zookeeper断开连接后,该节点被删除,Zookeeper会给该节点按照顺序编号

    zookeeper常用的shell命令:

      登录zookeeper客户端:./zkCli.sh  远程登录:./zkCli.sh -server ip (./zkCli.sh -server 192.168.43.182:2181)

      新增节点:

        

       更新节点:

        

       删除节点:

        

       查看节点:

        

        

       查看节点状态:

        

       查看节点列表:

        

       监听器get path [watch]:

        

       监听器stat path [watch]:

        

       监听器 lsls2 path [watch]:

        

     zookeeper的acl权限控制:

      概述:

        zookeeper类似文件系统,client可以创建节点、更新节点、删除节点,那么如何做到节点的权限的控制呢?

        zookeeper的 access control list 访问控制列表可以做到这一点。

        

       权限模式:

        

      授权的对象:

        授权对象ID是指,权限赋予的实体,例如:IP地址或用户。

      授予的权限:

        

       授权的相关命令:

        

       案例:

        getAcl /node1

        world授权模式:

          命令:setAcl <path> world:anyone:<acl>

          setAcl /node1 world:anyone:drwa

        IP授权模式:

          命令:setAcl <path> ip:<ip>:<acl>

          setAcl /node2 ip:192.168.43.33:cdrwa

          setAcl /node2 ip:192.168.43.33:cdrwa,ip:192.168.43.34:cdrwa

        Auth授权模式:

          命令:addauth digest <user>:<password> #添加认证用户

             setAcl <path> auth:<user>:<acl>

          addauth digest fan:123456  setAcl /node3 auth:fan:cdrwa

        Digest授权模式:

          命令:setAcl <path> digest:<user>:<password>:<acl>

          这里的密码是经过SHA1及BASE64处理的密文,在shell中可以通过以下命令计算出:

            echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

             echo -n fan:123456 | openssl dgst -binary -sha1 | openssl base64  #c2+ooVbyofyH2yzwMEZOmHYO7cE=

          setAcl /node4 digest:fan:c2+ooVbyofyH2yzwMEZOmHYO7cE=:cdwra

          添加了权限之后需要授权才能访问:addauth digest fan:123456

         多种模式授权:

          setAcl /node5 ip:192.168.43.33:cdr,auth:admin:cdrwa

         acl超级管理员:

          zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便访问任何权限的节点

          假设这个超管是:super:admin,需要先为超管生成密码的密文:

            echo -n super:admin | openssl dgst -binary -sha1 | openssl base64  #xQJmxLMiHGwaqBvst5y6rkB6HQs=

           打开zookeeper目录下的/bin/zkServer.sh服务器脚本文件,找到如下一行:

            nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"

          这是脚本中启动zookeeper的命令,默认只有以上两个配置项,我们需要添加一个超管的配置项

            nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" 

          启动zookeeper,输入如下命令添加权限:添加之后,此会话可以访问任何权限的节点

            addauth digest super:admin

  • 相关阅读:
    特性类
    WebGL中的第三个小程序(着色器)
    C#紧耦合的例子
    特性
    python两个目录匹配,粘贴图片
    Leetcode 53
    逻辑回归-1.原理
    多项式回归-4.模型正则化
    python 线程
    python 进程
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12973066.html
Copyright © 2011-2022 走看看