场景

安装及配置

  1. 解压

    1. tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz
  2. 重命名

    1. mv apache-zookeeper-3.6.0-bin zookeeper
  3. 在/opt/zookeeper/这个目录上创建zkData和zkLog目录

    1. mkdir zkData
    2. mkdir zkLog
  4. 进入/opt/zookeeper/conf这个路径,复制一份 zoo_sample.cfg 文件并命名为 zoo.cfg

    1. cd conf
    2. cp zoo_sample.cfg zoo.cfg
  5. 编辑zoo.cfg文件,修改dataDir路径:

    1. dataDir=/opt/zookeeper/zkData
    2. dataLogDir=/opt/zookeeper/zkLog
  6. zoo.cfg配置文件中的参数详解
    ```shell tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。

initLimit =10:LF初始通信时限,集群中的Follower跟随者服务器与Leader领导者服务器之间,启动时能容忍的最多心跳数 10 * tickTime(10个心跳时间)如果领导和跟随者没有发出心跳通信,就视为失效的连接,领导和跟随者彻底断开。

syncLimit =5:LF同步通信时限,集群启动后,Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime->10秒,Leader就认为Follwer已经死掉,会将Follwer从服务器列表中删除。

dataDir:数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。

dataLogDir:日志文件目录。

clientPort =2181:客户端连接端口,监听客户端连接的端口。

  1. <a name="0dfbe902"></a>
  2. ## 常用命令
  3. 1. 启动Zookeeper
  4. ```shell
  5. ./zkServer.sh start
  1. 查看进程是否启动(QuorumPeerMain:是zookeeper集群的启动入口类,是用来加载配置启动QuorumPeer线程的)

    1. jps
  2. 查看状态

    1. ./zkServer.sh status
  3. 启动客户端

    1. ./zkCli.sh
  4. 退出客户端

    1. quit
  5. 查看根节点下的一级节点

    1. ls /
  6. 查看节点的详细数据

    1. 老版本:ls2 /
    2. 新版本:ls -s /
    • cZxid:创建节点的事务
      每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
      事务ID是ZooKeeper中所有修改总的次序。
      每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
    • ctime:被创建的毫秒数(从1970年开始)
    • mZxid:最后更新的事务zxid
    • mtime:最后修改的毫秒数(从1970年开始)
    • pZxid:最后更新的子节点zxid
    • cversion:创建版本号,子节点修改次数
    • dataVersion:数据变化版本号
    • aclVersion:权限版本号
    • ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点
      则是0。
    • dataLength:数据长度
    • numChildren:子节点数
  7. 创建节点

    1. 创建节点:create /xx
    2. 创建节点并赋值:create /xx xxx
    3. 创建多级节点:create /xx/xx
    4. 创建短暂节点:create -e /xx
    5. 创建排序节点:create -s /xx
    6. 创建短暂并排序节点:create -e -s /xx
  8. 查看节点的值

    1. get /xx
  9. 修改节点的值

    1. set /xx xxx
  10. 删除节点

    1. 删除节点:delete /xx
    2. 递归删除存在子节点的节点:deleteall /xx
  11. 监听节点变化

    1. addwatch /xxx
    2. 如果被监听的节点修改内容后则:WatchedEvent state:SyncConnected type:NodeDataChanged path:/xxx
    3. 如果被监听的节点创建子节点后则:WatchedEvent state:SyncConnected type:NodeCreated path:/xxx/yyy

集群部署

  1. 假设有三台服务器,集群部署Zookeeper(先搞定一台,再克隆两台)
  1. 在/zkData目录下创建myid文件

    1. vim myid
    2. 1(编号,其余两台机器分别写23
  2. 配置zoo.cfg文件

    1. vim zoo.cfg
    2. #######################cluster##########################
    3. server.1=192.168.126.134:2888:3888
    4. server.2=192.168.126.137:2888:3888
    5. server.3=192.168.126.131:2888:3888
    • 解读配置的内容 server.A=B:C:D
      • A:一个数字,表示第几号服务器
        集群模式下配置的/opt/zookeeper/zkData/myid文件里面的数据就是A的值
      • B:服务器的ip地址
      • C:与集群中Leader服务器交换信息的端口
      • D:选举时专用端口,万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选
        出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口
  3. 克隆其余两台服务器
    - 在虚拟机数据目录vms下,创建zk02
    - 将本台服务器数据目录下的.vmx文件和所有的.vmdk文件分别拷贝zk02下
    - 虚拟机->文件->打开 (选择zk02下的.vmx文件)
    - 开启此虚拟机,弹出对话框,选择“我已复制该虚拟机”
    - 进入系统后,修改linux中的ip,修改/opt/zookeeper/zkData/myid中的数值为2
    - 第三台服务器重复如上步骤
  4. 关闭每台机器的防火墙
  1. 临时关闭
  2. systemctl stop firewalld.service
  1. 启动第一台并检查状态
  1. ./zkServer.sh start
  2. ./zkServer.sh status
  3. 得到结果:
  4. ZooKeeper JMX enabled by default
  5. Using config: /opt/zookeeper/bin/../conf/zoo.cfg
  6. Client port found: 2181. Client address: localhost.
  7. Error contacting service. It is probably not running.
  8. 因为没有超过半数以上的服务器,所以集群失败 (防火墙没有关闭也会导致失败)
  1. 当启动第2台服务器时
  1. 查看第1台的状态:Mode: follower
  2. 查看第2台的状态:Mode: leader

关联Java

生产者消费者模型

分布式锁

安装

  1. tar
  2. 命名
  3. zoo.cfg

配置

  1. zoo.cfg
  2. 端口
  3. 指定DirLog
  4. mkDir
  5. pid 序号
  6. mkLog
  7. bin
  8. ./zkServer.sh start
  9. ./zkServer.sh status
  10. ./zkServer.sh stop
  11. ./zkCli.sh
  12. jps

运行命令

  1. ls /
  2. ls /某某
  3. ls /某某/某某某
  4. create /某某
  5. create -e /某某
  6. create -? /某某
  7. delete
  8. deleteAll
  9. get
  10. set
  11. exists

关联Java