笔记 - Zookeeper 3.x(命令、配置、重要图示、脚本、代码实现)

20 篇文章 0 订阅
2 篇文章 0 订阅

笔记 - Zookeeper 3.x(命令、配置、重要图示、脚本、代码实现)

作者: Zzay

目的: 记录Zookeeper相关笔记(常用命令、常用配置、重要图示、常用脚本、代码实现),以方便未来查看使用。


1. 常用命令

以下包含Zookeeper相关的常用命令。(zroot:/opt/module/zookeeper-3.7.0

1.1 Server

  • start/stop 启动/停止 Zookeeper server。

    $ bin/zkServer.sh start/stop
    
  • status 查看当前 server 的状态。

    $ bin/zkServer.sh status
    

1.2 Client

  • zroot/bin/zkCli.sh 启动 Zookeeper 客户端。

    【】# 启动Zookeeper客户端
    $ bin/zkCli.sh -server <serverInfo>
    
    # 启动Zookeeper客户端,并连接到指定的server
    $ bin/zkCli.sh -server <serverInfo>
    
  • help 显示所有操作命令。

  • ls <path> 查看当前 znode 的子节点(可监听)。

    • -w:监听子节点变化。
    • -s:附加次级信息。
    [zk: hadoop102:2181(CONNECTED) 5] ls -s /
    [zookeeper]cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x0
    cversion = -1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 1
    

    附加信息介绍:

    1. czxid:创建结点的事务zxid

      每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务ID。事务ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。

    2. ctime:znode 被创建的毫秒数(从 1970 年开始)。

    3. mzxid:znode 最后更新的事务 zxid

    4. mtime:znode 最后修改的毫秒数(从 1970 年开始)。

    5. pZxid:znode 最后更新的子节点 zxid

    6. cversion:znode 子节点变化号,znode 子节点修改次数。

    7. dataversion:znode 数据变化号。

    8. aclVersion:znode 访问控制列表的变化号。

    9. ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点则是 0。

    10. dataLength:znode 的数据长度。

    11. numChildren:znode 子节点数量。

  • create 普通创建。

    • -s:含有序列。
    • -e:临时(重启或者超时消失)。
  • get <path> 获取结点的值(可监听)。

    • -w:监听节点内容变化。
    • -s:附加次级信息。
  • set 设置结点的具体值。

  • stat 查看结点状态。

  • delete 删除结点。

  • deleteall 递归删除结点。


2. 常用配置

以下包含Zookeeper相关的常用配置。(zroot:/opt/module/zookeeper-3.7.0

  • zroot/conf/zoo.cfg 包括大部分 zookeeper 的相关配置信息。
    • tickTime 通信心跳时间,Zookeeper 服务器与客户端心跳时间,单位毫秒。

      # 通信心跳时间
      tickTime=2000
      
    • initLimit LF 初始通信时限。Leader 和 Follower 初始连接时能容忍的最多心跳数(tickTime的数量)

      # LF初始通信时限
      initLimit=10
      
    • syncLimit LF 通信时限。Leader 和 Follower 之间通信时间如果超过 syncLimit * tickTime,则 Leader 认为 Follower 死亡,并从服务器列表中删除 Follower 。

      # LF通信时限
      syncLimit=5
      
    • **dataDir:**配置临时数据文件的存放路径,是必须自定义的配置。通常我们会在zroot下创建一个文件夹,以存放临时数据文件。

      # 存放临时数据文件
      dataDir=/opt/module/zookeeper-3.7.0/zkData
      
    • clientPort 客户端连接端口,通常不做修改。

      # 客户端连接端口
      clientPort=2181
      
    • server 集群配置: 配置集群中各个 server 的信息 [ server.A=B:C:D ] 。

      • A:一个数字,表示这个 server 是第几号服务器,Zookeeper 启动时读取myid文件,将其中的数据与zoo.cfg的配置信息比较,从而判断该服务器是哪个 server 。
      • B:该 server 的地址(IP 或 配置好的名字)。
      • C:该 server 的 Follower 与集群中的 Leader server 交换信息的端口。
      • D:当集群中的 Leader server 挂机后执行选举时,该 server 与其他 server 相互通信的端口。
      # server信息格式
      server.A=B:C:D
      
      # 举例
      server.2=hadoop102:2888:3888
      server.3=hadoop103:2888:3888
      server.4=hadoop104:2888:3888
      
  • zroot/zkData/myid文件:

    ​ 我们需要在zkData文件夹中创建myid,文件名不能修改,后续系统需要到该文件进行 server 编号匹配。

    ​ 该文件中存放的内容为该服务器的 server 编号。

    # 表示该server的编号为100
    100
    

3. 重要图示

以下包含Zookeeper相关的重要图示。

3.1 概念

  • zookeeper工作机制:

    在这里插入图片描述

  • zookeeper特点:

    在这里插入图片描述

  • zookeeper数据结构:

    在这里插入图片描述

  • 结点类型:

    在这里插入图片描述

3.2 应用场景

  • 统一命名服务:

    在这里插入图片描述

  • 统一配置管理:

    在这里插入图片描述

  • 统一集群管理:

    在这里插入图片描述

  • 服务器动态上下线:

    在这里插入图片描述

  • 软负载均衡:

    在这里插入图片描述

3.3 选举机制

  • Zookeeper选举机制 - 第一次启动:

    在这里插入图片描述

  • Zookeeper选举机制 - 非第一次启动:

    在这里插入图片描述

3.4 监听器

  • 监听器原理:

    注意:注册一次,只能监听一次。想再次监听,需要再次注册。

    • 结点的值变化监听:get -w - NodeDataChanged 。
    • 结点的子结点变化监听(路径变化):ls -w - NodeChildrenChanged 。

    在这里插入图片描述

3.5 C/S通信交互

  • client向server写数据 - 直接发送给Leader结点:

    在这里插入图片描述

  • client向server写数据 - 发送给Follower结点:

    在这里插入图片描述

3.6 分布式锁

  • 分布式锁原理:

    在这里插入图片描述


4. 常用脚本

以下包含使用Zookeeper过程中常用的脚本实现。

  • Zookeeper 集群启动停止脚本:

    #!/bin/bash
    
    case $1 in
    "start"){
    	for i in hadoop102 hadoop103 hadoop104
    	do
            echo ---------- zookeeper $i 启动 ------------
            ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
        done
    };;
    "stop"){
    	for i in hadoop102 hadoop103 hadoop104
    	do
    	    echo ---------- zookeeper $i 停止 ------------ 
        	ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
        done
    };;
    "status"){
    	for i in hadoop102 hadoop103 hadoop104
    	do
    		echo ---------- zookeeper $i 状态 ------------ 
    		ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
    	done
    };;
    esac
    

5. Curator 框架

以下介绍Curator框架在 Zookeeper 中的应用。

详情请查看官方文档:https://curator.apache.org/index.html

5.1 介绍

  • Curator是一个专门解决分布式锁的框架,解决了原生 Java API 开发分布式时遇到的问题。
  • 原生 Java API 开发分布式存在的问题:
    1. 会话连接是异步的,需要自己去处理。比如使用 CountDownLatch
    2. Watch 需要重复注册,不然就不能生效。
    3. 开发的复杂性还是比较高的。
    4. 不支持多节点删除和创建。需要自己去递归。

5.2 实操案例


6. 面试重点

以下包括在企业面试中关于Zookeeper的常见问题。

  • 生产集群安装多少 zk 合适?
    • 安装奇数台。

    • 生产经验:

      • 10 台服务器:3 台 zk;

      • 20 台服务器:5 台 zk;

      • 100 台服务器:11 台 zk;

      • 200 台服务器:11 台 zk

    • 服务器台数多: 好处,提高可靠性;坏处:提高通信延时。

  • 选举机制细节?

    半数机制,超过半数的投票通过,即通过。

    • 第一次启动选举规则:投票过半数时,服务器 id 大的胜出。
    • 第二次启动选举规则:
      1. EPOCH 大的直接胜出。
      2. EPOCH 相同,事务 id 大的胜出。
      3. 事务 id 相同,服务器 id 大的胜出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值