大数据系统架构实践(一):Zookeeper集群部署

大数据系统架构实践(一):Zookeeper集群部署

文章目录


随着微服务架构和分布式系统的快速发展,系统中各个服务之间的协调和状态管理成为架构设计的重要一环。Zookeeper 作为 Apache 生态下的核心组件,提供了高可用的分布式协调服务,在 Hadoop、Kafka、HBase 等大数据平台中都扮演着不可替代的角色。

在本系列中,我们将围绕 Zookeeper 在大数据系统中的作用与部署实践展开介绍。本篇作为第一篇,将聚焦于 Zookeeper 的核心概念、常见应用场景及基础部署方式,为后续深入理解其在分布式架构中的地位打下基础。

一、Zookeeper简介

Zookeeper 是一个开源的分布式协调服务,主要用于维护配置信息、命名服务、分布式同步和集群管理。它的设计初衷是为分布式系统提供一致性保障,并简化复杂的协调任务。

Zookeeper 的 核心特性 包括:

  • 强一致性:所有客户端都能读取到最新的数据状态
  • 原子性:一次操作要么成功,要么失败
  • 顺序性:所有更新按照顺序执行
  • 高可用性:通过集群部署实现故障容错与快速恢复

Zookeeper 使用类 Unix 文件系统的层级数据模型,节点称为 ZNode 。每个 ZNode 都可以存储数据,并可具有子节点。常见节点类型:

  • 持久节点(Persistent)
  • 临时节点(Ephemeral)
  • 顺序节点(Sequential)

这种结构为服务注册、分布式锁、选举等提供了基础。

二、部署前准备

Zookeeper 是一个典型的强一致性系统,采用的是 ZAB(Zookeeper Atomic Broadcast)协议,其核心思想是多数派写成功即认为成功。因此:

  • Zookeeper 集群必须部署在奇数台服务器上(3、5、7...)
  • 最小推荐部署为 3 台节点,此时允许容忍 1 台节点宕机仍可继续提供服务
  • 如果使用 2 台节点,当 1 台挂掉时,剩下的无法形成多数,整个集群将无法写入

因此,3 节点集群在资源和高可用性之间提供了合理平衡,是生产环境中最常见的部署方式。

多数派投票原则:n = 2f + 1,f 是允许容忍的故障节点数量。3 台机器允许 1 台故障,5 台允许 2 台故障。

✅ 三台服务器的配置与角色

节点名称 主机名 ip地址 说明
master master 192.168.100.1 集群节点之一,参与选举
slave1 slave1 192.168.100.2 集群节点之一,参与选举
slave2 slave2 192.168.100.3 集群节点之一,参与选举

✅ JDK 依赖环境

Zookeeper 是用 Java 编写的,运行前请确保已安装 JDK 1.8 或以上版本

三、部署Zookeeper集群

1. 下载并解压安装包

bash 复制代码
# 下载地址(以3.4.10版本为例)
https://archive.apache.org/dist/zookeeper/

# 解压移动
tar xf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 /usr/local/zookeeper

2. 配置zoo.cfg

bash 复制代码
cat > /usr/local/zookeeper/conf/zoo.cfg <<-EOF
tickTime=10000  # 心跳时间,ms
dataDir=/usr/local/zookeeper/data  # 数据存储路径
clientPort=2181  # 端口号
initLimit=5  # Follower初始化连接Leader的超时时间限制
syncLimit=2  # Follower与Leader之间同步响应的最大延迟时间
server.1=master:2888:3888  # server.x 对应的是 myid 值
server.2=slave1:2888:3888 
server.3=slave2:2888:3888
maxClientCnxns=1000  # 允许的最大连接数
maxSessionTimeout=300000  # 会话的最大超时时间,ms
EOF

3. 设置日志目录

编辑日志配置文件,指定日志输出目录

bash 复制代码
mkdir -p /usr/local/zookeeper/logs

vim /usr/local/zookeeper/conf/log4j.properties
# 修改如下变量:
# zookeeper.log.dir=/usr/local/zookeeper/logs
# zookeeper.tracelog.dir=/usr/local/zookeeper/logs

vim /usr/local/zookeeper/bin/zkEnv.sh
# 设置 ZOO_LOG_DIR=/usr/local/zookeeper/logs

4. 集群编号

每台节点的 myid 是其在 zoo.cfg 中的 server ID,并将目录同步至其他节点

bash 复制代码
mkdir -p /usr/local/zookeeper/data
echo "3" > /usr/local/zookeeper/data/myid
scp -rp /usr/local/zookeeper root@slave2:/usr/local/  &>/dev/null
echo "2" > /usr/local/zookeeper/data/myid
scp -rp /usr/local/zookeeper root@slave1:/usr/local/  &>/dev/null
echo "1" > /usr/local/zookeeper/data/myid

5. 启动zookeeper集群

bash 复制代码
# master
/usr/local/zookeeper/bin/zkServer.sh start
# slave1
ssh slave1 "/usr/local/zookeeper/bin/zkServer.sh start"
# slave2
ssh slave2 "/usr/local/zookeeper/bin/zkServer.sh start"

5. 验证集群状态

bash 复制代码
# 检查端口是否监听
netstat -tnlp | grep 2181
# 查看进程是否正常
ps -ef | grep QuorumPeerMain
# 查看集群状态
/usr/local/zookeeper/bin/zkServer.sh status

总结

🚀 本文介绍了 Zookeeper 的核心概念与应用场景,并基于 3 台服务器完成了 Zookeeper 集群的部署与配置。通过设置 zoo.cfg 配置文件、myid 标识、日志目录和启动脚本,我们搭建了一个基本的高可用协调服务,为后续大数据系统提供稳定的元数据和状态支持。

⚠️ 值得注意的是,Zookeeper 的 Leader 是通过选举产生的,部署过程中不应人为指定具体节点为 Leader 或 Follower,所有节点都是平等参与选举的角色。

📌 当前部署方式适用于 Hadoop、Kafka、HBase 等组件依赖的协调服务环境,是分布式系统架构的基础支撑。

✅ 下一篇文章中,我们将继续构建大数据系统核心组件 ------ Hadoop 分布式文件系统(HDFS)与资源调度框架(YARN),并实现其与 Zookeeper 的集成与联动,逐步完善整个大数据平台的底座架构。

相关推荐
yurenshi16681 小时前
自媒体多账号管理工具 4 款实测:聚媒通 / 融媒宝 / 新榜小豆芽 / 矩阵通横向对比,快速选型
大数据·矩阵·媒体
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
@insist1232 小时前
系统规划与管理师-流程评价与持续改进核心知识-终章
大数据·人工智能·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
TechEdu2026063 小时前
[计算机科学]大数据硬件架构与软件架构概览
大数据·计算机科学
爱莉希雅&&&3 小时前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
FII工业富联科技服务3 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输4 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
Spey_Events4 小时前
【核心议题发布】聚焦深度维修与 AI 智慧革新!2026中国民用航空维修智造展——议题重磅发布!
大数据·人工智能
czzxxxxxx4 小时前
创客匠人AI智能体:知识付费从“重人力”走向“自动化”的拐点
大数据·人工智能
大大大大晴天4 小时前
Hudi技术内幕:Clustering原理与实践
大数据