zookeeper 安装与配置

前置工作

准备好三台机器(hadoop101, hadoop102, hadoop103)并配置好静态IP和hosts映射,那么搭建Zookeeper集群的准备工作已经完成了一大半。

集群规划

我们首先明确一下三台机器的角色和配置,确保信息一致。

主机名 myid 角色
hadoop101 1 Follower/Leader
hadoop102 2 Follower/Leader
hadoop103 3 Follower/Leader

提示:Zookeeper集群建议部署奇数个节点(如3个或5个),这样在选举Leader时能更好地形成多数派,提高集群的容错能力。

安装与配置步骤

以下步骤主要在第一台机器 hadoop101 上操作,然后将配置好的文件分发给其他两台机器。

1. 前置检查:Java环境

Zookeeper 运行依赖Java环境(JDK)。请在三台机器上分别执行 java -version 命令,确保已安装 JDK。如果未安装,需要先安装 JDK。

2. 在 hadoop101 上安装和配置
  1. 上传并解压安装包

    将Zookeeper安装包上传到 hadoop101,然后执行以下命令进行解压。

    复制代码
    # 安装包在当前目录,将其解压到 /opt/module 目录
    tar -zxvf apache-zookeeper-<version>-bin.tar.gz -C /opt/module/
    # 为方便操作,重命名文件夹
    cd /opt/module/
    mv apache-zookeeper-<version>-bin zookeeper-<version>
  2. 创建数据和日志目录

    创建一个目录用于存放Zookeeper的数据和日志。

    复制代码
    mkdir -p /opt/module/zookeeper-<version>/zkData
  3. 修改配置文件

    进入 conf 目录,将示例配置文件 zoo_sample.cfg 复制为 zoo.cfg

    复制代码
    cd /opt/module/zookeeper-<version>/conf/
    cp zoo_sample.cfg zoo.cfg

    然后编辑 zoo.cfg 文件:

    复制代码
    vim zoo.cfg

    修改和添加以下内容:

    复制代码
    # 修改数据目录路径
    dataDir=/opt/module/zookeeper-<version>/zkData
    
    # 在文件末尾添加集群配置
    server.1=hadoop101:2888:3888
    server.2=hadoop102:2888:3888
    server.3=hadoop103:2888:3888
  4. 创建 myid 文件

    在刚才创建的 zkData 目录下,创建一个名为 myid 的文件,并写入数字 1(对应 hadoop101 的规划)。

    复制代码
    echo "1" > /opt/module/zookeeper-<version>/zkData/myid
3. 分发配置到其他机器
  1. 分发Zookeeper目录

    hadoop101 上配置好的整个Zookeeper目录分发给 hadoop102hadoop103

    复制代码
    scp -r /opt/module/zookeeper-<version> hadoop102:/opt/module/
    scp -r /opt/module/zookeeper-<version> hadoop103:/opt/module/
  2. 修改其他机器的 myid

    分别登录到 hadoop102hadoop103,修改其 zkData 目录下的 myid 文件内容。

    • hadoop102 上执行:

      复制代码
      echo "2" > /opt/module/zookeeper-<version>/zkData/myid
    • hadoop103 上执行:

      复制代码
      echo "3" > /opt/module/zookeeper-<version>/zkData/myid
4. 配置环境变量 (可选,但推荐)

为了方便在任何目录下执行Zookeeper命令,可以在三台机器上都配置环境变量。

  1. 编辑 /etc/profile 文件:

    复制代码
    vim /etc/profile
  2. 在文件末尾添加:

    复制代码
    export ZOOKEEPER_HOME=/opt/module/zookeeper-<version>
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
  3. 使配置立即生效:

    复制代码
    source /etc/profile

启动与验证

  1. 启动集群

    在三台机器上分别执行启动命令。

    复制代码
    # 在三台机器上分别执行
    zkServer.sh start

    注意 :启动第一台机器时可能会失败或处于 LOOKING 状态,这是正常的。Zookeeper集群需要半数以上节点启动才能正常工作。请确保三台机器都执行了启动命令。

  2. 验证状态

    在三台机器上分别执行状态查看命令。

    复制代码
    # 在三台机器上分别执行
    zkServer.sh status

    如果配置成功,你会看到其中一台机器显示 Mode: leader,另外两台显示 Mode: follower。这表示你的Zookeeper集群已经成功搭建并开始运行了。

写一个 xzk.sh 脚本

请在 hadoop101 的用户目录下创建 bin 目录(如果还没有的话),并在其中创建 xzk.sh 文件。

编写一个统一的脚本可以极大地简化集群管理。

下面是一个完整的 xzk.sh 脚本,它支持 startstopstatus 三个参数,并会在三台机器上自动执行相应的命令。

  1. 创建目录和文件

    复制代码
    mkdir -p ~/bin
    vim ~/bin/xzk.sh
  2. 复制以下内容到文件中

    复制代码
    #!/bin/bash
    
    # Zookeeper 集群管理脚本
    # 用法: xzk.sh start|stop|status
    
    # 定义Zookeeper的安装目录
    ZOOKEEPER_HOME=/opt/module/zookeeper-<version>
    
    # 定义集群主机列表
    HOSTS=("hadoop101" "hadoop102" "hadoop103")
    
    # 定义要执行的命令
    case $1 in
        start)
            CMD="$ZOOKEEPER_HOME/bin/zkServer.sh start"
            echo "========== 正在启动 Zookeeper 集群 =========="
            ;;
        stop)
            CMD="$ZOOKEEPER_HOME/bin/zkServer.sh stop"
            echo "========== 正在停止 Zookeeper 集群 =========="
            ;;
        status)
            CMD="$ZOOKEEPER_HOME/bin/zkServer.sh status"
            echo "========== 正在检查 Zookeeper 集群状态 =========="
            ;;
        *)
            echo "用法: $0 {start|stop|status}"
            exit 1
            ;;
    esac
    
    # 在所有主机上并行执行命令
    for host in "${HOSTS[@]}"
    do
        echo ">>> 正在 $host 上执行: $CMD"
        ssh "$host" "$CMD"
        echo "-----------------------------------------"
    done
    
    echo "========== 操作完成 =========="

    注意 :请务必将脚本中的 <version> 替换为你实际安装的Zookeeper版本号,例如 zookeeper-3.8.4

  3. 赋予脚本执行权限

    复制代码
    chmod 755 ~/bin/xzk.sh

配置 SSH 免密登录

为了让脚本能够无需密码就登录到其他机器执行命令,你需要配置 hadoop101hadoop102hadoop103 的 SSH 免密登录。

hadoop101 上执行以下命令:

  1. 生成 SSH 密钥对 (如果已有,可以跳过)

    复制代码
    ssh-keygen -t rsa
    # 一路回车即可
  2. 将公钥分发到其他机器

    复制代码
    # 将公钥复制到 hadoop102
    ssh-copy-id hadoop102
    
    # 将公钥复制到 hadoop103
    ssh-copy-id hadoop103

    执行 ssh-copy-id 时,首次连接需要输入 hadoop102hadoop103 的用户密码。

使用 xzk.sh 脚本

配置完成后,你就可以在 hadoop101 上使用这个脚本了。

  • 启动集群

    复制代码
    xzk.sh start
  • 停止集群

    复制代码
    xzk.sh stop
  • 查看集群状态

    复制代码
    xzk.sh status

执行后,你会在终端看到类似以下的输出,显示每台机器上的命令执行情况:

复制代码
========== 正在启动 Zookeeper 集群 ==========
>>> 正在 hadoop101 上执行: /opt/module/zookeeper-3.8.4/bin/zkServer.sh start
Starting zookeeper ... STARTED
-----------------------------------------
>>> 正在 hadoop102 上执行: /opt/module/zookeeper-3.8.4/bin/zkServer.sh start
Starting zookeeper ... STARTED
-----------------------------------------
>>> 正在 hadoop103 上执行: /opt/module/zookeeper-3.8.4/bin/zkServer.sh start
Starting zookeeper ... STARTED
-----------------------------------------
========== 操作完成 ==========

写一个 jpsall.sh 脚本

这个脚本非常实用,可以一眼看清整个集群的进程存活情况。

这个脚本利用了 SSH 免密登录,在 hadoop101 上执行时,会依次远程连接三台机器并运行 jps 命令。

请在 hadoop101~/bin 目录下创建 jpsall.sh 文件。

  1. 创建文件

    复制代码
    vim ~/bin/jpsall.sh
  2. 复制以下内容

    复制代码
    #!/bin/bash
    
    # 定义集群主机列表
    HOSTS=("hadoop101" "hadoop102" "hadoop103")
    
    echo "========== 正在查看集群各节点进程信息 =========="
    
    # 遍历主机列表
    for host in "${HOSTS[@]}"
    do
        echo ">>> 主机: $host"
        # 远程执行 jps 命令
        # 注意:这里假设你已经配置了 hadoop101 到其他节点的 SSH 免密登录
        ssh "$host" "jps"
        echo "-----------------------------------------"
    done
    
    echo "========== 查看完成 =========="
  3. 赋予执行权限

    复制代码
    chmod 755 ~/bin/jpsall.sh

使用方式

配置好权限后,直接在 hadoop101 上输入命令即可:

复制代码
jpsall.sh

预期输出示例

如果你的 Zookeeper 集群已经启动,输出应该类似如下(注意看进程名):

复制代码
========== 正在查看集群各节点进程信息 ==========
>>> 主机: hadoop101
12345 QuorumPeerMain
12346 Jps
-----------------------------------------
>>> 主机: hadoop102
12345 QuorumPeerMain
12346 Jps
-----------------------------------------
>>> 主机: hadoop103
12345 QuorumPeerMain
12346 Jps
-----------------------------------------
========== 查看完成 ==========

关键点 :Zookeeper 启动后的进程名称通常显示为 QuorumPeerMain ,而不是 Zookeeper。只要看到每台机器上都有这个进程,说明集群运行正常。

相关推荐
zhixingheyi_tian2 小时前
hdfs.c 之解析
c语言·hadoop·hdfs
武子康1 天前
大数据-262 实时数仓 - Canal 同步数据实战指南 实时统计
大数据·hadoop·后端
zs宝来了2 天前
ZooKeeper ZAB 协议:选举与广播原理解析
zookeeper·广播·选举·zab·一致性协议
武子康2 天前
大数据-261 实时数仓-建设指南:从架构设计到业务落地 交易订单、订单产品、产品分类、商家店铺、地域组织表
大数据·hadoop·后端
J2虾虾3 天前
Hadoop入门
大数据·hadoop·分布式
橘子编程4 天前
Hive大数据实战指南:从入门到精通
大数据·hive·hadoop
仗剑_走天涯4 天前
hadoop 执行mr任务出现找不到主类或无法加载主类解决方案
hadoop·mr
橘子编程4 天前
Apache Hadoop知识全解析
大数据·hive·hadoop·apache
顧棟5 天前
HDFS2.X升级3.X案例与相关Issue
大数据·hadoop·hdfs