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

目录

下载地址

 本地模式安装

1)安装前准备

2)配置修改

3)操作 Zookeeper

 配置参数解读

 Zookeeper 集群操作

集群规划

解压安装

配置服务器编号

配置 zoo.cfg 文件

集群操作

 Zookeeper 集群启动停止脚本

创建脚本

增加脚本执行权限

Zookeeper 集群启动脚本

Zookeeper 集群停止脚本

Zookeeper 选举机制(面试重点)

首次启动选举

非首次启动选举

关键术语解释


下载地址

官网首页:

Apache ZooKeeper

 本地模式安装

1)安装前准备

1 )安装 JDK
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 时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值