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

相关推荐
芯希望4 分钟前
芯伯乐XBL6019 60V/5A DC-DC升压芯片的优质选择
大数据·人工智能·物联网·dc-dc·电子元器件·电源管理ic·xblw芯伯乐
青云交4 小时前
Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害数值模拟与预警中的应用(388)
java·大数据·flink·分布式计算·预警系统·数值模拟·气象灾害
蓝倾9765 小时前
唯品会以图搜图(拍立淘)API接口调用指南详解
java·大数据·前端·数据库·开放api接口
lifallen6 小时前
HBase的异步WAL性能优化:RingBuffer的奥秘
大数据·数据库·分布式·算法·性能优化·apache·hbase
WLJT1231231237 小时前
冷冻食材,鲜美生活的新选择
大数据
2301_769006788 小时前
祝贺!1464种期刊被收录,CSCD 核心期刊目录更新!(附下载)
大数据·数据库·人工智能·搜索引擎·期刊
iGarment9 小时前
服装外贸系统:高效管理,全流程优化方案
大数据·云计算
武汉格发Gofartlic10 小时前
HFSS许可证常见问题及解决方案
大数据·运维·人工智能·数据分析·自动化
数据猿视觉10 小时前
宁商平台税务升级之路:合规为纲,服务为本
大数据·人工智能·microsoft