当前位置: 首页 > news >正文

Hadoop 中的大数据技术:Zookeeper安装 (2)

目录

下载地址

 本地模式安装

1)安装前准备

2)配置修改

3)操作 Zookeeper

 配置参数解读

 Zookeeper 集群操作

集群规划

解压安装

配置服务器编号

配置 zoo.cfg 文件

集群操作

 Zookeeper 集群启动停止脚本

创建脚本

增加脚本执行权限

Zookeeper 集群启动脚本

Zookeeper 集群停止脚本

Zookeeper 选举机制(面试重点)

首次启动选举

非首次启动选举

关键术语解释


下载地址

官网首页:

Apache ZooKeeper

 本地模式安装

1)安装前准备

1 )安装 JDK
Linux环境安装 JDKicon-default.png?t=N7T8https://blog.csdn.net/qq_45115959/article/details/141403400?spm=1001.2014.3001.5502
2 )拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下
3 )解压到指定目录
[lzl@hadoop12 software]$ tar -zxvf apache-zookeeper-3.5.7-
bin.tar.gz -C /opt/module/
4 )修改名称
[lzl@hadoop12 module]$ mv apache-zookeeper-3.5.7 -bin/
zookeeper-3.5.7

2)配置修改

1 )将 /opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
[lzl@hadoop12 conf]$ mv zoo_sample.cfg zoo.cfg
2 )打开 zoo.cfg 文件,修改 dataDir 路径:
[lzl@hadoop12 zookeeper-3.5.7]$ vim zoo.cfg

修改如下内容:
dataDir=/opt/module/zookeeper-3.5.7/zkData
3 )在 /opt/module/zookeeper-3.5.7/ 这个目录上创建 zkData 文件夹
[lzl@hadoop12 zookeeper-3.5.7]$ mkdir zkData

3)操作 Zookeeper

1 )启动 Zookeeper
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh start
2 )查看进程是否启动
[lzl@hadoop12 zookeeper-3.5.7]$ jps
4020 Jps
4001 QuorumPeerMain
3 )查看状态
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Mode: standalone
4 )启动客户端
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkCli.sh
5 )退出客户端:
[zk: localhost:2181(CONNECTED) 0] quit
6 )停止 Zookeeper
[lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh stop

 配置参数解读

Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下:
1 tickTime = 2000 :通信心跳时间, Zookeeper 服务器与客户端心跳时间,单位毫秒
2 initLimit = 10 LF 初始通信时限
Leader Follower 初始连接 时能容忍的最多心跳数( tickTime 的数量)
3 syncLimit = 5 LF 同步通信时限
Leader Follower 之间通信时间如果超过 syncLimit * tickTime Leader 认为 Follwer
掉,从服务器列表中删除 Follwer
4 dataDir 保存 Zookeeper 中的数据
注意:默认的 tmp 目录,容易被 Linux 系统定期删除,所以一般不用默认的 tmp 目录。
5 clientPort = 2181 :客户端连接端口,通常不做修改。

 Zookeeper 集群操作

  1. 集群规划
    • 在 hadoop12、hadoop13 和 hadoop14 三个节点上部署 Zookeeper。
    • 思考:如果是 10 台服务器,建议部署奇数台 Zookeeper,如 3 或 5 台,以确保选举机制的有效性。
  2. 解压安装
    1. 在 hadoop12 解压 Zookeeper 安装包至 /opt/module/ 目录。
    [lzl@hadoop12 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
    1. 修改 apache-zookeeper-3.5.7-bin 目录名为 zookeeper-3.5.7
    [lzl@hadoop12 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
  3. 配置服务器编号
    1. 在 /opt/module/zookeeper-3.5.7/ 创建 zkData 目录。
    [lzl@hadoop12 zookeeper-3.5.7]$ mkdir zkData
    1. 在 /opt/module/zookeeper-3.5.7/zkData 目录下创建 myid 文件。
    [lzl@hadoop12 zkData]$ vi myid
    • 在文件中添加与 server 对应的编号(注意不要有多余的空白字符)。
      2
    1. 拷贝配置好的 Zookeeper 到其他机器上,并在 hadoop13、hadoop14 上修改 myid 文件的内容为 3、4。
    [lzl@hadoop12 module ]$ xsync zookeeper-3.5.7
  4. 配置 zoo.cfg 文件
    1. 重命名 /opt/module/zookeeper-3.5.7/conf/ 目录下的 zoo_sample.cfg 为 zoo.cfg
    [lzl@hadoop12 conf]$ mv zoo_sample.cfg zoo.cfg
    1. 打开 zoo.cfg 文件并配置数据存储路径及集群信息。
    [lzl@hadoop12 conf]$ vim zoo.cfg
    • 修改数据存储路径配置。
      dataDir=/opt/module/zookeeper-3.5.7/zkData
    • 增加集群配置。
      server.2=hadoop12:2888:3888
      server.3=hadoop13:2888:3888
      server.4=hadoop14:2888:3888
    1. 同步 zoo.cfg 配置文件至其他节点。
    [lzl@hadoop12 conf]$ xsync zoo.cfg
  5. 集群操作
    1. 分别启动 Zookeeper。
    [lzl@hadoop12 zookeeper-3.5.7]$ bin/zkServer.sh start
    [lzl@hadoop13 zookeeper-3.5.7]$ bin/zkServer.sh start
    [lzl@hadoop14 zookeeper-3.5.7]$ bin/zkServer.sh start
    1. 查看状态。
    [lzl@hadoop12 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: follower
    [lzl@hadoop13 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: leader
    [lzl@hadoop14 zookeeper-3.5.7]# bin/zkServer.sh status
    JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Mode: follower

 Zookeeper 集群启动停止脚本

  1. 创建脚本

    • 在 hadoop12 的 /home/lzl/bin 目录下创建脚本。
      [lzl@hadoop12 bin]$ vim zk.sh
    • 编写脚本内容。
      #!/bin/bash
      case $1 in
      "start"){
          for i in hadoop12 hadoop13 hadoop14
          do
              echo "---------- zookeeper $i 启动 ------------"
              ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
          done
          };;
      "stop"){
          for i in hadoop12 hadoop13 hadoop14
          do
              echo "---------- zookeeper $i 停止 ------------"
              ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
          done
          };;
      "status"){
          for i in hadoop12 hadoop13 hadoop14
          do
              echo "---------- zookeeper $i 状态 ------------"
              ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
          done
          };;
      esac
  2. 增加脚本执行权限

    [lzl@hadoop12 bin]$ chmod u+x zk.sh
  3. Zookeeper 集群启动脚本

    [lzl@hadoop12 module]$ zk.sh start
  4. Zookeeper 集群停止脚本

    [lzl@hadoop12 module]$ zk.sh stop

Zookeeper 选举机制(面试重点)

Zookeeper 的选举机制是为了确保集群中始终有一个 Leader 存在,以便进行数据更新和协调工作。下面是 Zookeeper 的选举机制详解,分为首次启动选举和非首次启动选举两种情况。

首次启动选举

  1. 服务器1启动

    • 发起一次选举。服务器1投自己一票。此时服务器1票数为1票,由于不足半数以上(3票),选举无法完成,服务器1状态保持为 LOOKING。
  2. 服务器2启动

    • 再发起一次选举。服务器1和2分别投自己一票并交换选票信息。
    • 此时服务器1发现服务器2的 myid 比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。
    • 此时服务器1票数为0票,服务器2票数为2票,没有半数以上结果,选举无法完成,服务器1,2状态保持 LOOKING。
  3. 服务器3启动

    • 发起一次选举。此时服务器1和2都会更改选票为服务器3。
    • 此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。
    • 此时服务器3的票数已经超过半数,服务器3当选 Leader。服务器1,2更改状态为 FOLLOWING,服务器3更改状态为 LEADING。
  4. 服务器4启动

    • 发起一次选举。此时服务器1,2,3已经不是 LOOKING 状态,不会更改选票信息。
    • 交换选票信息结果:服务器3为3票,服务器4为1票。
    • 此时服务器4服从多数,更改选票信息为服务器3,并更改状态为 FOLLOWING。
  5. 服务器5启动

    • 同服务器4一样,成为 FOLLOWER。

非首次启动选举

  1. 触发条件

    • 服务器初始化启动。
    • 服务器运行期间无法和 Leader 保持连接。
  2. 现有 Leader 场景

    • 如果集群中本来就存在一个 Leader,则新加入的服务器会直接和当前 Leader 进行连接,并同步状态,然后成为 FOLLOWER。
  3. 无 Leader 场景

    • 假设 Zookeeper 由5台服务器组成,SID 分别为 1、2、3、4、5,ZXID 分别为 8、8、8、7、7,并且此时 SID 为 3 的服务器是 Leader。某一时刻,3 和 5 服务器出现故障,因此开始进行 Leader 选举。
    • (EPOCH,ZXID,SID )
      • SID 为 1、2、4 的机器投票情况:(1,8,1)、(1,8,2)、(1,7,4)
    • 选举 Leader 规则:
      • EPOCH 大的直接胜出
      • EPOCH 相同,事务 ID 大的胜出
      • 事务 ID 相同,服务器 ID 大的胜出

关键术语解释

  • SID (Server ID):用来唯一标识一台 ZooKeeper 集群中的机器,每台机器不能重复,与 myid 一致。
  • ZXID (Zxid):是一个事务 ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的 ZXID 值不一定完全一致,这和 ZooKeeper 服务器对于客户端“更新请求”的处理逻辑有关。
  • EPOCH:每个 Leader 任期的代号。没有 Leader 时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。

相关文章:

  • 国产数据库第一股|万字长文初探达梦 DM8
  • 信号发生器的运行模式有哪些(举例:泰克示波器)
  • Manim动画:相机的移动(MovingCameraScene)
  • 马走日-深度优先搜索
  • Java MessagePack序列化工具(适配Unity)
  • 动态规划(一)
  • 如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试
  • Linux权限管理
  • kvm压缩虚拟机磁盘
  • 了解Android
  • DVWA综合靶场漏洞讲解
  • python 异常处理
  • 在Windows11强制开启copilot
  • 独立站PrestaShop安装
  • 获取当前路由器的外网IP(WAN IP)
  • 电脑硬盘坏了怎么恢复数据?
  • 蓝桥杯2021第十二届蓝桥杯青少年组省赛试题真题
  • Vue3重置reactive变量造成循环引用导致JSON.stringify语法报错
  • python之matplotlib (1 介绍及基本用法)
  • vin查询汽车品牌-vin查询汽车品牌接口-车辆信息查询接口
  • 人民日报整版调查:中小学春秋假,如何放得好推得开?
  • 两部门发布山洪灾害气象预警:北京西部、河北西部等局地山洪可能性较大
  • 技术派|伊朗展示新型弹道导弹,美“萨德”系统真的拦不住?
  • AI智能体,是不是可以慢一点? | ToB产业观察
  • 杭温高铁、沪苏湖高铁明起推出定期票和计次票,不限车次执行优惠折扣
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元