杰瑞科技汇

ZooKeeper安装教程步骤详解?

Zookeeper 安装教程

本教程将指导您完成 Zookeeper 的单机安装和伪集群(在同一台机器上模拟多个节点)安装,在生产环境中,您只需要将伪集群中的每个配置项(如 dataDir, clientPort, server.X)应用到不同的真实服务器节点上即可。

ZooKeeper安装教程步骤详解?-图1
(图片来源网络,侵删)

准备工作

  1. 环境要求

    • 操作系统: Linux (推荐 CentOS 7+ 或 Ubuntu 18.04+)
    • Java 环境: Zookeeper 是基于 Java 的,因此必须安装 JDK,版本要求通常为 JDK 8 或更高版本。
    • 网络: 确保节点之间可以互相通信。
  2. 检查并安装 JDK

    • 检查系统是否已安装 Java:
      java -version
    • 如果未安装,可以使用包管理器进行安装(以 CentOS 为例):
      # 安装 OpenJDK 11
      sudo yum install java-11-openjdk-devel -y
    • 安装后,再次验证 java -versionjavac -version,确保安装成功。
  3. 下载 Zookeeper 安装包

    • 访问 Zookeeper 官方下载页面: https://zookeeper.apache.org/releases.html
    • 下载最新的稳定版本(zookeeper-3.8.3),我们使用 tar.gz 格式的压缩包。
    • 使用 wget 命令下载(假设版本为 3.8.3):
      wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3.tar.gz
  4. 创建安装目录

    # 创建一个用于存放软件的目录
    sudo mkdir -p /opt/module
    # 解压安装包到 /opt/module 目录
    tar -zxvf apache-zookeeper-3.8.3.tar.gz -C /opt/module/
    # 创建一个软链接,方便后续使用和升级
    sudo ln -s /opt/module/apache-zookeeper-3.8.3 /opt/module/zookeeper

单机模式 安装

单机模式最简单,通常用于本地开发和测试。

  1. 配置环境变量

    • 编辑 ~/.bashrc 文件:
      vim ~/.bashrc
    • 在文件末尾添加以下内容:
      export ZOOKEEPER_HOME=/opt/module/zookeeper
      export PATH=$PATH:$ZOOKEEPER_HOME/bin
    • 使环境变量生效:
      source ~/.bashrc
  2. 配置 Zookeeper

    • 进入 Zookeeper 的 conf 目录:

      cd $ZOOKEEPER_HOME/conf
    • 复制并重命名配置文件 zoo_sample.cfgzoo.cfg:

      cp zoo_sample.cfg zoo.cfg
    • 编辑 zoo.cfg 文件:

      vim zoo.cfg
    • 主要修改以下两个配置项:

      • dataDir: 指定 Zookeeper 存放数据快照和事务日志的目录,我们需要先创建这个目录。

        # 在 /opt/module/ 目录下创建 data 目录
        sudo mkdir -p /opt/module/data
        # 修改配置文件中的 dataDir
        dataDir=/opt/module/data
      • clientPort: 指定客户端连接 Zookeeper 的端口号,默认为 2181,通常无需修改。

  3. 启动 Zookeeper

    • 使用 zkServer.sh 脚本启动服务:

      # 进入 bin 目录
      cd $ZOOKEEPER_HOME/bin
      # 启动服务
      ./zkServer.sh start
    • 查看启动状态:

      ./zkServer.sh status

      应该会显示 Mode: standalone,表示单机模式启动成功。

  4. 连接 Zookeeper

    • 使用 zkCli.sh 脚本连接到 Zookeeper 服务器:
      ./zkCli.sh -server 127.0.0.1:2181
    • 连接成功后,会进入一个命令行界面,可以执行一些基本命令,
      • ls /: 查看根节点下的子节点。
      • create /test "hello": 创建一个名为 test 的节点,并存储数据 "hello"。
      • get /test: 获取 test 节点的数据。
      • quit: 退出客户端。
  5. 停止 Zookeeper

    ./zkServer.sh stop

伪集群模式 安装

伪集群模式指在同一台物理机上运行多个 Zookeeper 节点,它们通过不同的端口进行通信,模拟一个完整的集群,这对于学习和测试集群特性非常有用。

  1. 创建必要的目录

    • 为每个节点创建独立的 dataDirlogDir,这里我们创建三个节点(myid=1, 2, 3)。
      # 创建数据目录
      sudo mkdir -p /opt/module/data/zk1
      sudo mkdir -p /opt/module/data/zk2
      sudo mkdir -p /opt/module/data/zk3

    创建日志目录(可选,但推荐)

    sudo mkdir -p /opt/module/logs/zk1 sudo mkdir -p /opt/module/logs/zk2 sudo mkdir -p /opt/module/logs/zk3

  2. 创建 myid 文件

    • myid 文件用于唯一标识每个节点,它的内容就是节点的 ID(一个数字)。
    • 在每个节点的 dataDir 目录下创建 myid 文件:
      echo "1" | sudo tee /opt/module/data/zk1/myid
      echo "2" | sudo tee /opt/module/data/zk2/myid
      echo "3" | sudo tee /opt/module/data/zk3/myid
  3. 为每个节点创建独立的配置文件

    • 复制 zoo_sample.cfg 三次,分别命名为 zoo1.cfg, zoo2.cfg, zoo3.cfg
      cd $ZOOKEEPER_HOME/conf
      cp zoo_sample.cfg zoo1.cfg
      cp zoo_sample.cfg zoo2.cfg
      cp zoo_sample.cfg zoo3.cfg
  4. 修改每个节点的配置文件

    • zoo1.cfg:
      vim zoo1.cfg
      dataDir=/opt/module/data/zk1
      dataLogDir=/opt/module/logs/zk1
      clientPort=2181
      # 集群配置
      server.1=127.0.0.1:2888:3888
      server.2=127.0.0.1:2889:3889
      server.3=127.0.0.1:2890:3890
    • zoo2.cfg:
      vim zoo2.cfg
      dataDir=/opt/module/data/zk2
      dataLogDir=/opt/module/logs/zk2
      clientPort=2182
      # 集群配置
      server.1=127.0.0.1:2888:3888
      server.2=127.0.0.1:2889:3889
      server.3=127.0.0.1:2890:3890
    • zoo3.cfg:
      vim zoo3.cfg
      dataDir=/opt/module/data/zk3
      dataLogDir=/opt/module/logs/zk3
      clientPort=2183
      # 集群配置
      server.1=127.0.0.1:2888:3888
      server.2=127.0.0.1:2889:3889
      server.3=127.0.0.1:2890:3890
    • 配置说明:
      • dataDir: 每个节点必须指向自己的数据目录。
      • clientPort: 每个节点的客户端端口必须不同。
      • server.X: 这是集群的核心配置。
        • X 是节点的 ID,必须与对应 dataDir 下的 myid 文件内容一致。
        • IP_ADDRESS: 节点的 IP 地址(这里是 0.0.1)。
        • PORT1: 用于节点之间通信的端口(Leader 选举和数据同步)。
        • PORT2: 用于 Leader 选举的端口。
  5. 启动所有节点

    • 使用 zkServer.sh 脚本,通过 config 参数指定不同的配置文件来启动每个节点。
      # 启动第一个节点
      $ZOOKEEPER_HOME/bin/zkServer.sh start $ZOOKEEPER_HOME/conf/zoo1.cfg

    启动第二个节点

    $ZOOKEEPER_HOME/bin/zkServer.sh start $ZOOKEEPER_HOME/conf/zoo2.cfg

    启动第三个节点

    $ZOOKEEPER_HOME/bin/zkServer.sh start $ZOOKEEPER_HOME/conf/zoo3.cfg

  6. 检查集群状态

    • 检查每个节点的状态,应该有一个是 leader,另外两个是 follower
      $ZOOKEEPER_HOME/bin/zkServer.sh status $ZOOKEEPER_HOME/conf/zoo1.cfg
      # 输出: Mode: leader

    $ZOOKEEPER_HOME/bin/zkServer.sh status $ZOOKEEPER_HOME/conf/zoo2.cfg

    输出: Mode: follower

    $ZOOKEEPER_HOME/bin/zkServer.sh status $ZOOKEEPER_HOME/conf/zoo3.cfg

    输出: Mode: follower

  7. 连接并测试

    • 可以分别连接到三个节点的客户端,创建数据,验证数据在集群中是同步的。
      # 连接到节点1
      $ZOOKEEPER_HOME/bin/zkCli.sh -server 127.0.0.1:2181

    在节点1上创建一个节点

    [zk: 127.0.0.1:2181(CONNECTED) 0] create /cluster_test "data_from_node1"

    连接到节点2

    $ZOOKEEPER_HOME/bin/zkCli.sh -server 127.0.0.1:2182

    在节点2上获取该节点,应该能看到数据

    [zk: 127.0.0.1:2182(CONNECTED) 0] get /cluster_test data_from_node1

  8. 停止所有节点

    $ZOOKEEPER_HOME/bin/zkServer.sh stop $ZOOKEEPER_HOME/conf/zoo1.cfg
    $ZOOKEEPER_HOME/bin/zkServer.sh stop $ZOOKEEPER_HOME/conf/zoo2.cfg
    $ZOOKEEPER_HOME/bin/zkServer.sh stop $ZOOKEEPER_HOME/conf/zoo3.cfg

常用命令总结

命令 描述
./zkServer.sh start 启动 Zookeeper 服务。
./zkServer.sh stop 停止 Zookeeper 服务。
./zkServer.sh restart 重启 Zookeeper 服务。
./zkServer.sh status 查看 Zookeeper 服务状态(leader/follower)。
./zkCli.sh -server host:port 连接到指定的 Zookeeper 服务器。
ls /path 列出指定路径下的子节点。
create /path "data" 创建一个持久节点,并附带数据。
create -e /path "data" 创建一个临时节点(客户端断开连接后自动删除)。
get /path 获取指定节点的数据和元数据(如版本号、创建时间等)。
set /path "new_data" 更新指定节点的数据。
delete /path 删除指定的节点(节点必须为空)。
stat /path 查看指定节点的状态信息,但不获取数据。

常见问题

  1. 问题: 启动时报错 Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

    • 原因: 通常是环境变量 ZOOKEEPER_HOME 配置错误,或者 zkServer.sh 脚本中的 JVMFLAGS 等变量有问题。
    • 解决: 检查 ~/.bashrc 中的 ZOOKEEPER_HOME 是否正确指向了安装目录,可以尝试在 zkServer.sh 中手动指定 ZOOKEEPER_HOME 路径再启动。
  2. 问题: 集群启动后,所有节点状态都是 LOOKING,或者一直无法选举出 Leader。

    • 原因:
      • myid 文件内容与 zoo.cfg 中的 server.XX 不匹配。
      • 节点之间的通信端口(2888, 2889 等)被防火墙或其它程序占用。
      • zoo.cfg 中的 server.X 配置格式错误或 IP 地址无法访问。
    • 解决:
      • 仔细核对每个节点的 myid 文件和对应的 server.X 配置。
      • 使用 netstat -tunlp | grep 2888 检查端口是否被占用。
      • 检查防火墙设置,确保节点间可以互相通信。
  3. 问题: 连接客户端时提示 Connection refused

    • 原因: Zookeeper 服务未启动,或者 clientPort 被占用。
    • 解决: 使用 ./zkServer.sh status 检查服务状态,使用 netstat -tunlp | grep 2181 检查端口占用情况。

希望这份详细的教程能帮助您成功安装和配置 Zookeeper!

分享:
扫描分享到社交APP
上一篇
下一篇