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

二、ZooKeeper 集群部署搭建

作者:IvanCodes
日期:2025年5月24日
专栏:Zookeeper教程

在这里插入图片描述

我们这次教程将以 hadoop01 (192.168.121.131), hadoop02 (192.168.121.132), hadoop03 (192.168.121.133) 三台Linux服务器为例,搭建一个ZooKeeper 3.8.4集群。

一、下载ZooKeeper软件包 (在 hadoop01 操作)

  1. 访问官方发布页面
    • 首先,请打开您的浏览器,访问 Apache ZooKeeper官方发布页面

在这里插入图片描述

  1. 定位并下载指定版本
    • 在打开的页面中,找到 “Download” 部分。
    • 您需要选择 Apache ZooKeeper 3.8.4 版本。点击对应的下载链接。通常,您会看到一个建议的下载镜像链接。

在这里插入图片描述

  • 从上图所示的镜像站点下载 二进制包 (binary package),文件名通常为 apache-zookeeper-3.8.4-bin.tar.gz
  • 将下载好的 apache-zookeeper-3.8.4-bin.tar.gz 文件上传到 hadoop01 服务器的 /export/softwares 目录下 (如果该目录不存在,请先创建:mkdir -p /export/softwares)。

二、解压与准备 (在 hadoop01 操作)

  1. 解压ZooKeeper安装包
    • 目标安装路径为 /export/server

hadoop01 上执行:

cd /export/softwares
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /export/server/
cd /export/server
mv apache-zookeeper-3.8.4-bin zookeeper

三、配置环境变量 (所有节点:hadoop01, hadoop02, hadoop03)

为了方便全局使用ZooKeeper命令,需要在所有三个节点上配置环境变量。

hadoop01, hadoop02, hadoop03分别执行以下命令:

echo 'export ZOOKEEPER_HOME=/export/server/zookeeper' >> /etc/profile
echo 'export PATH=$PATH:/export/server/zookeeper/bin' >> /etc/profile
source /etc/profile

如何查看环境变量是否配置成功? (在任一节点执行)

echo $ZOOKEEPER_HOME
# 应输出 /export/server/zookeeper
echo $PATH
# 应能看到 /export/server/zookeeper/bin 在路径中
zkServer.sh version
# 如果PATH配置正确,此命令会显示ZooKeeper版本信息

四、同步ZooKeeper至其他节点 (在 hadoop01 操作)

hadoop01 上完成解压后,将配置好的 /export/server/zookeeper 目录同步到 hadoop02hadoop03。(其他节点此时也应已完成步骤三的环境变量配置)。

hadoop01 上执行:

scp -r /export/server/zookeeper root@hadoop02:/export/server/
scp -r /export/server/zookeeper root@hadoop03:/export/server/

提示:确保 hadoop01hadoop02hadoop03 有SSH免密登录权限,或在执行 scp 时按提示输入密码。

五、创建数据目录与配置myid (各节点分别操作)

ZooKeeper集群中每个节点都需要一个唯一的ID号 (myid),存储在其数据目录下的 myid 文件中。

hadoop01 上执行:

mkdir -p /export/data/zookeeper
echo "1" > /export/data/zookeeper/myid

hadoop02 上执行:

mkdir -p /export/data/zookeeper
echo "2" > /export/data/zookeeper/myid

hadoop03 上执行:

mkdir -p /export/data/zookeeper
echo "3" > /export/data/zookeeper/myid

六、修改核心配置文件zoo.cfg (在 hadoop01 操作后分发)

ZooKeeper的主要配置文件是 zoo.cfg。我们先在 hadoop01 上创建并修改,然后分发到其他节点以保持配置一致。

hadoop01 上执行:

cd /export/server/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

使用文本编辑器 vim 修改 /export/server/zookeeper/conf/zoo.cfg 文件,确保内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/data/zookeeper
clientPort=2181
# autopurge.snapRetainCount=3
# autopurge.purgeInterval=1server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
4lw.commands.whitelist=stat,ruok,conf,srvr,mntr

在这里插入图片描述

配置项重点:

  • dataDir=/export/data/zookeeper:指向您在步骤五中创建的数据目录。
  • server.X=hostname:peerPort:leaderPort
    • X 对应各节点的 myid 文件内容。
    • hostname 使用您的实际主机名 (hadoop01, hadoop02, hadoop03)。
    • 2888 是集群内节点间通信端口。
    • 3888 是Leader选举端口。
  • 客户端将通过 clientPort=2181 连接。

分发修改好的 zoo.cfg 文件 (在 hadoop01 上执行):

scp /export/server/zookeeper/conf/zoo.cfg root@hadoop02:/export/server/zookeeper/conf/
scp /export/server/zookeeper/conf/zoo.cfg root@hadoop03:/export/server/zookeeper/conf/

七、启动ZooKeeper集群服务 (所有节点均需操作)

每一个节点 (hadoop01, hadoop02, hadoop03) 上启动ZooKeeper服务。

hadoop01, hadoop02, hadoop03分别执行

zkServer.sh start

提示:建议逐个启动,并在每个节点启动后间隔几秒,以便集群有时间进行初始化和选举。

八、验证集群状态

  1. 查看Java进程 (在任一节点执行):
jps

正常情况下,会看到一个名为 QuorumPeerMain 的Java进程。
在这里插入图片描述

  1. 查看节点角色 (在每个节点分别执行):
zkServer.sh status

此命令将显示当前节点是 Mode: leader 还是 Mode: follower。一个正常的3节点集群会有一个Leader和两个Follower。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、常用ZooKeeper服务命令

这些命令通常在 ZOOKEEPER_HOME/bin 目录下,如果环境变量设置正确,可以直接执行。

# 启动ZooKeeper服务
zkServer.sh start
# 停止ZooKeeper服务
zkServer.sh stop
# 查看ZooKeeper服务状态(角色)
zkServer.sh status
# 重启ZooKeeper服务
zkServer.sh restart
# 在前台启动ZooKeeper服务(日志会直接输出到控制台)
zkServer.sh start-foreground

部署完成! ZooKeeper 集群现已配置完毕并准备就绪

http://www.xdnf.cn/news/8591.html

相关文章:

  • 《深入Python:新手易踩的语法雷区与进阶启示》
  • STM32CubeMX的初使用GPIO的端口配置
  • 虚幻基础:AI
  • Baklib内容中台的主要构成是什么?
  • 大般涅槃经卷第三十五
  • windows11 安装 jupyter lab
  • ARM笔记-嵌入式系统基础
  • untiy实现汽车漫游
  • JVM(Java虚拟机)
  • MSP430通用电机控制代码(Motor)设计与实现
  • vue3 发票税率 计算
  • 人工智能杂谈(十二)大模型与小模型的应用场景及未来发展趋势
  • 电子电路:在导电过程中,铜线中的电子为什么不会消失?
  • MySQL 中表的约束 -- 空属性,默认值,主键,自增长,唯一键,外键
  • Python如何赋能自动驾驶地图构建?从点云处理到实时导航
  • 基于51单片机和8X8点阵屏、独立按键的滑动躲闪类小游戏
  • 从0到上线:微服务架构下的全栈开发实战指南
  • VILT模型阅读笔记
  • SSG vs SSR vs ISG 页面渲染策略对比
  • 为什么在设置 model.eval() 之后,pytorch模型的性能会很差?为什么 dropout 影响性能?| 深度学习
  • 第十节第九部分:jdk8新特性:方法引用、特定类型的方法引用、构造器引用(不要求代码编写后同步简化代码,后期偶然发现能用这些知识简化即可)
  • 鸿蒙UI开发——badge角标的使用
  • 从神经生物学到社会心理学:游戏沉迷机制的深度解构
  • Jest入门
  • 利用 XML 外部实体注入(XXE)读取文件和探测内部网络
  • redis缓存实战-19(使用 Pub/Sub 构建简单的聊天应用程序)
  • C++:整数奇偶排序
  • iOS知识复习
  • 项目中使用到了多个UI组件库,也使用了Tailwindcss,如何确保新开发的组件样式隔离?
  • linux debug技术