手把手搭建 Zookeeper3.4.10三节点高可用集群(含 myid 配置与选举机制详解)

手把手搭建 Zookeeper3.4.10三节点高可用集群(含 myid 配置与选举机制详解)

文章目录

  • [手把手搭建 Zookeeper3.4.10三节点高可用集群(含 myid 配置与选举机制详解)](#手把手搭建 Zookeeper3.4.10三节点高可用集群(含 myid 配置与选举机制详解))
    • [📘 Zookeeper 简介前言](#📘 Zookeeper 简介前言)
      • [🐘 什么是 Apache Zookeeper?](#🐘 什么是 Apache Zookeeper?)
    • [2.1 Zookeeper 安装部署](#2.1 Zookeeper 安装部署)
    • [手把手搭建 Zookeeper三节点高可用集群教程](#手把手搭建 Zookeeper三节点高可用集群教程)

📘 Zookeeper 简介前言

🐘 什么是 Apache Zookeeper?

Apache Zookeeper 是一个开源的分布式协调服务,由 Apache Hadoop 生态衍生而来,最初由 Yahoo! 开发,现已成为构建高可用、强一致性分布式系统的核心组件之一。

在分布式环境中,多个服务实例需要协同工作------例如:谁是主节点?配置如何统一?任务如何分配?节点宕机如何感知?这些问题统称为"分布式协调"。而 Zookeeper 正是为解决这些难题而生。

它提供了一套简单但强大的原语(如临时节点、监听机制、原子操作等),通过类似文件系统的树形数据模型(ZNode)和 ZAB(ZooKeeper Atomic Broadcast)一致性协议,确保集群中所有客户端看到一致的数据视图。

📌 典型应用场景

  • Hadoop HDFS 的 NameNode 高可用(HA)
  • HBase 的 Master 选举与 RegionServer 注册
  • Kafka 的 Broker 注册、Topic 元数据管理
  • 分布式锁、配置中心、服务发现等通用协调需求

Zookeeper 本身不存储业务数据 ,而是作为"分布式系统的神经中枢",帮助上层应用实现可靠协作。

在本实验中,我们将基于三台服务器(masterslave1slave2)部署 Zookeeper 3.4.10 集群,并验证其 Leader-Follower 架构与故障容错能力,为后续搭建 HBase、Kafka 等服务奠定基础。


2.1 Zookeeper 安装部署

Zookeeper 的安装配置分为两种模式:

  • 本地模式:仅包含一台服务器,适用于开发测试。
  • 集群模式 :包含多台服务器(推荐使用奇数台,如 3、5、7 台),具备高可用性和容错能力。

本文选择集群模式 进行部署,在 masterslave1slave2 三台服务器上均部署 Zookeeper。

配置策略:先在 master 节点完成全部配置,再将配置文件分发至其他节点。


2.1.1 准备工作

(1)上传 Zookeeper 安装包

使用 Xftp 连接 master 服务器,将 zookeeper-3.4.10.tar.gz 安装包上传至 /opt/software 目录下。

(2)解压 Zookeeper 安装包

通过 Xshell 登录 master,执行以下命令:

bash 复制代码
[root@master ~]# cd /opt/software/
[root@master software]# tar -zvxf zookeeper-3.4.10.tar.gz -C /opt/module/
[root@master software]# cd ../module/
[root@master module]# ls
hadoop  java  zookeeper-3.4.10
[root@master module]# mv zookeeper-3.4.10/ zookeeper
[root@master module]# ls
hadoop  java  zookeeper
(3)配置环境变量

编辑 /etc/profile 文件:

bash 复制代码
[root@master module]# vi /etc/profile

在文件末尾添加以下内容:

bash 复制代码
# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

保存后执行以下命令使环境变量生效:

bash 复制代码
[root@master module]# source /etc/profile

2.1.2 相关配置修改

(1)修改 zoo.cfg 配置文件

进入 Zookeeper 安装目录的 conf 子目录,复制模板文件:

bash 复制代码
[root@master module]# cd zookeeper/
[root@master zookeeper]# cd conf
[root@master conf]# cp zoo_sample.cfg zoo.cfg
[root@master conf]# vi zoo.cfg

修改以下内容:

  • 设置数据目录(避免使用系统临时目录):

    ini 复制代码
    dataDir=/opt/module/zookeeper/zkData
  • 新增日志目录(可选但推荐):

    ini 复制代码
    dataLogDir=/opt/module/zookeeper/zkLog

在文件末尾 添加集群服务器列表(注意:主机名需提前配置好 DNS 或 /etc/hosts):

ini 复制代码
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

配置项说明

  • tickTime=2000:Zookeeper 服务器与客户端之间的心跳间隔(单位:毫秒)。
  • initLimit=10:Follower 与 Leader 初始连接时允许的最大心跳数(即 10 × 2000 = 20 秒)。
  • syncLimit=5:Follower 与 Leader 同步通信超时阈值(5 × 2000 = 10 秒)。
  • clientPort=2181:客户端连接端口,默认不变。
  • dataDir:存储内存数据库快照的位置,切勿使用 /tmp(Linux 可能自动清理)。
(2)创建 myid 文件

根据 zoo.cfg 中的 dataDir 路径,创建对应目录:

bash 复制代码
[root@master conf]# cd ..
[root@master zookeeper]# mkdir zkData
[root@master zookeeper]# mkdir zkLog

进入 zkData 目录,创建 myid 文件:

bash 复制代码
[root@master zookeeper]# cd zkData
[root@master zkData]# vi myid

在文件中写入当前节点对应的服务器编号(无空格、无空行):

复制代码
1

master 对应 server.1,因此 myid 内容为 1

(3)分发配置到其他节点

由于已配置 SSH 免密登录,可使用 scp 命令将整个 zookeeper 目录和环境变量文件分发到 slave1slave2

bash 复制代码
# 分发 Zookeeper 安装目录
[root@master ~]# scp -r /opt/module/zookeeper root@slave1:/opt/module/
[root@master ~]# scp -r /opt/module/zookeeper root@slave2:/opt/module/

# 分发环境变量(可选,或手动在各节点添加)
[root@master ~]# scp /etc/profile root@slave1:/etc/
[root@master ~]# scp /etc/profile root@slave2:/etc/


⚠️ 分发后需在 slave1slave2 上分别执行 source /etc/profile 使环境变量生效。

(4)修改其他节点的 myid 文件
  • 登录 slave1,将 myid 内容改为 2

    bash 复制代码
    [root@slave1 ~]# echo 2 > /opt/module/zookeeper/zkData/myid



  • 登录 slave2,将 myid 内容改为 3

    bash 复制代码
    [root@slave2 ~]# echo 3 > /opt/module/zookeeper/zkData/myid


🔍 确保每个节点的 myidzoo.cfgserver.xx 严格对应。


2.1.3 Zookeeper 服务的启动与关闭

(1)启动服务

在每台服务器上分别执行:

bash 复制代码
[root@master ~]# zkServer.sh start
[root@slave1 ~]# zkServer.sh start
[root@slave2 ~]# zkServer.sh start



(2)查看服务状态
bash 复制代码
[root@master ~]# zkServer.sh status

正常情况下,三台节点中会有一台显示 Mode: leader,其余两台显示 Mode: follower



(3)关闭服务
bash 复制代码
[root@master ~]# zkServer.sh stop

(其他节点同理)


2.1.4 Zookeeper 选举机制

Zookeeper 集群通过 ZAB(Zookeeper Atomic Broadcast)协议 实现一致性与高可用,其选举机制分为两种场景:

(1)第一次启动(全新集群)
  • 所有节点初始状态为 LOOKING
  • 通过投票选出 myid 最大的节点作为 Leader(若网络分区,则需多数派达成一致)。
  • 选举完成后,Leader 进入 LEADING 状态,Follower 进入 FOLLOWING 状态。
(2)非第一次启动(已有数据)
  • 若 Leader 宕机,剩余 Follower 重新发起选举。
  • 优先选择 ZXID(事务 ID)最大 的节点作为新 Leader(保证数据最新)。
  • 若 ZXID 相同,则比较 myid,选较大者。

💡 Zookeeper 要求集群中超过半数节点存活才能提供服务(例如 3 节点最多容忍 1 台宕机)。


✅ 至此,Zookeeper 集群部署完成,可为 Hadoop、HBase、Kafka 等分布式系统提供协调服务。


手把手搭建 Zookeeper三节点高可用集群教程

大数据应用开发竞赛-03-手把手搭建 Zookeeper三节点高可用集群

希望大家也三连一下视频,你的支持是我创作的最大动力!

相关推荐
字节跳动数据平台20 小时前
5000 字技术向拆解 | 火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
武子康1 天前
大数据-239 离线数仓 - 广告业务实战:Flume 导入日志到 HDFS,并完成 Hive ODS/DWD 分层加载
大数据·后端·apache hive
初次攀爬者2 天前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka
字节跳动数据平台2 天前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术2 天前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康2 天前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康3 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天3 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康5 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
初次攀爬者6 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper