当前位置: 首页 > 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 hadoop14doecho "---------- zookeeper $i 启动 ------------"ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"done};;
      "stop"){for i in hadoop12 hadoop13 hadoop14doecho "---------- zookeeper $i 停止 ------------"ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"done};;
      "status"){for i in hadoop12 hadoop13 hadoop14doecho "---------- 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 时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。


http://www.mrgr.cn/news/4108.html

相关文章:

  • 05创建型设计模式——原型模式
  • 汇凯贵金属:金子在家怎么清洗才干净
  • 非常nice! IDEA远程Debug调试程序
  • epoll机制中最核⼼的数据结构是什么?
  • 并查集在哪些具体应用中最常用
  • 计算机相关法律法规及违规案例
  • 机器学习在旅游业的革新之旅
  • ubuntu18.04更改系统语言及换源的方法步骤
  • 深入解析css-学习小结
  • C语言 | Leetcode C语言题解之第342题4的幂
  • PostgreSQL的pg_dump中 --inserts参数测试
  • CMOS 逆变器的功耗
  • WPS Office两个严重漏洞曝光,已被武器化且在野利用
  • MCU数据采集模块:核心功能与工作机制深度解析
  • Verilog刷题笔记55
  • Ubuntu清除缓存的方法--防止系统崩溃
  • 麻将手游开发的未来之路:技术与创新并行
  • TOMCAT入门到精通
  • Simple RPC - 04 从零开始设计一个客户端(上)
  • 多重示例详细说明Eureka原理实践