大数据系统架构实践(一):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 的集成与联动,逐步完善整个大数据平台的底座架构。

相关推荐
致Great36 分钟前
MCP出现的意义是什么?让 AI 智能体更模块化
大数据·人工智能·rag
远方16091 小时前
53-Oracle sqlhc多版本实操含(23 ai)
大数据·数据库·sql·oracle·database
金融小师妹2 小时前
基于LSTM-GARCH混合模型的“获利了结”量化解析:黄金单日1.27%跌幅的技术性归因
大数据·人工智能·算法
人大博士的交易之路3 小时前
龙虎榜——20250620
大数据·数学建模·数据挖掘·程序员创富·缠中说禅·龙虎榜
189228048614 小时前
NY339NY341美光固态闪存NW841NW843
大数据·数据库
DavidSoCool4 小时前
Elasticsearch 中实现推荐搜索(方案设想)
大数据·elasticsearch·搜索引擎
lilye664 小时前
精益数据分析(108/126):媒体网站用户参与时间优化与分享行为解析
大数据·数据分析·媒体
TDengine (老段)5 小时前
使用 Prometheus 访问 TDengine ---
大数据·数据库·prometheus·时序数据库·iot·tdengine·涛思数据
枫桥听月6 小时前
16.大数据监控
大数据·prometheus