ZooKeeper分布式协调服务详解:从原理到实战部署
摘要本文系统讲解ZooKeeper分布式协调服务的核心概念、工作原理、数据一致性保障机制以及完整的集群部署实践。作为Hadoop生态系统的核心组件掌握ZooKeeper是理解分布式系统架构的关键一步。关键词ZooKeeper、分布式协调、Zab协议、Paxos算法、集群部署第一章 环境规划与准备一、规划内容在搭建ZooKeeper集群之前完整的环境规划是成功的关键。分布式系统的复杂性决定了我们必须从拓扑结构、主机规划、软件版本到数据目录进行全方位设计。1. 集群拓扑Master/Slave架构ZooKeeper集群采用经典的主从架构角色数量职责Leader1主导写操作协调事务提交流程Follower多个处理读请求参与选举与投票决策核心特点每个Server保存一份完整的数据副本全局数据保持一致性视图写请求必须由Leader处理读请求可分散到任意节点2. 主机规划在/etc/hosts文件中配置IP映射确保节点间可通过主机名通信# 编辑hosts文件 [roothadoop1 ~]# vi /etc/hosts # 添加以下配置 172.16.206.16 master 172.16.206.26 masterback 172.16.206.27 slave1 172.16.206.29 slave23. 软件规划清单软件版本功能说明CentOS7.x基础Linux操作系统JDK1.8Java运行环境支撑Hadoop生态ZooKeeper3.4.6分布式系统协调服务Hadoop2.7.2分布式计算框架依赖ZooKeeperHive2.2.0大数据仓库工具HBase1.2.6分布式NoSQL数据库4. 数据目录规划建议提前规划以下目录结构数据目录/opt/zookeeper/data- 存储事务日志和快照日志目录/opt/zookeeper/logs- 存储运行日志配置目录/opt/zookeeper/conf- 配置文件存放二、Windows IP映射开发环境在Windows本地开发时修改C:\Windows\System32\drivers\etc\hosts文件添加相同的IP映射方便通过SSH工具或浏览器访问集群节点。第二章 基础环境配置一、网络配置1. 常用网络命令reset # 清屏 ifconfig # 查看IP地址若无效执行yum install net-tools hostname # 查看当前主机名 hostnamectl set-hostname hadoop1 # 永久修改主机名 ping www.baidu.com # 测试外网连通性 dhclient # 临时获取IP地址2. 虚拟机联网模式选择模式适用场景特点桥接模式与宿主机同网段虚拟机获得独立IP可被局域网直接访问NAT模式开发环境推荐共享宿主机IP通过端口映射实现访问仅主机模式生产环境隔离完全隔离外部网络确保系统安全3. 永久联网配置NAT模式# 进入网络配置目录 cd /etc/sysconfig/network-scripts/ # 编辑网卡配置文件ens33为常见网卡名根据实际情况调整 vi ifcfg-ens33 # 修改以下关键配置 BOOTPROTOstatic # 改为静态IP ONBOOTyes # 开机启动 IPADDR172.16.206.16 # 设置静态IP NETMASK255.255.255.0 # 子网掩码 GATEWAY172.16.206.1 # 网关地址 DNS18.8.8.8 # DNS服务器Windows中ipconfig/all查看 # 重启网络服务 systemctl restart network4. 防火墙管理systemctl start firewalld.service # 启动防火墙 systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld # 禁止开机启动集群环境建议关闭 firewall-cmd --state # 查看防火墙状态二、时钟同步NTP分布式系统中时间同步是数据一致性的前提。ZooKeeper依赖时间戳进行事务排序节点间时间偏差会导致严重问题。1. 临时同步验证# 向时间服务器同步需安装ntpdate yum install ntpdate -y ntpdate 192.168.1.128 # 看到类似以下输出表示成功 # 5 Mar 22:26:19 ntpdate[8171]: step time server 192.168.1.128 offset 3045.561204 sec2. 同步Internet时间ntpdate time.nuri.net # 亚洲NTP服务器 # 或 ntpdate cn.pool.ntp.org # 中国NTP服务器池4. 搭建集群内部NTP服务器选一台节点作为时间服务器yum install ntp ntpdate -y # 编辑NTP配置 vi /etc/ntp.conf # 添加外部时间源 server 0.asia.pool.ntp.org server 1.asia.pool.ntp.org server 2.asia.pool.ntp.org server 3.asia.pool.ntp.org # 启动服务 systemctl start ntpd systemctl enable ntpd # 查看同步状态 ntpq -p三、SSH免密登录集群节点间需要频繁通信配置免密登录是必要步骤。# 1. 生成密钥对所有节点执行 ssh-keygen -t rsa # 一路回车密钥将保存在 ~/.ssh/ 目录 # 2. 查看生成的密钥 ls ~/.ssh/ # id_rsa私钥 id_rsa.pub公钥 # 3. 分发公钥到所有节点包括自己 ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3 # 4. 测试免密登录 ssh hadoop2 # 无需输入密码即成功四、JDK安装与配置# 1. 检查系统自带JDK java -version rpm -qa | grep java # 2. 如有OpenJDK建议卸载 rpm -e --nodeps java-1.8.0-openjdk* # 3. 下载Oracle JDK 1.8 # 官网http://www.oracle.com/technetwork/java/javase/downloads/index.html # 4. 解压安装 tar -zxvf jdk-8uXXX-linux-x64.tar.gz -C /opt/ # 5. 配置环境变量 vi /etc/profile # 添加以下内容 export JAVA_HOME/opt/jdk1.8.0_XXX export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 6. 生效配置 source /etc/profile java -version第三章 ZooKeeper核心原理目录导航ZooKeeper概述ZooKeeper工作原理数据一致性与Paxos算法ZooKeeper数据模型其他重要概念ZooKeeper部署实践Part 01 ZooKeeper概述01、ZooKeeper简介Apache ZooKeeper是Apache软件基金会的顶级项目官网描述为致力于开发和维护实现高度可靠的分布式协调的开源服务器简单来说ZooKeeper是一个为分布式应用提供一致性服务的协调工具。它的设计目标是将复杂且容易出错的分布式一致性服务封装起来提供简单易用的接口。典型应用场景HadoopNameNode HA高可用、YARN资源调度HBaseMaster选举、元数据管理KafkaBroker注册、Topic分区Leader选举SolrCloud集群状态管理、配置分发02、ZooKeeper术语体系运行模式节点数量适用场景生产可用性单机模式1个节点本地学习、功能验证❌ 不推荐伪分布式模式1节点多进程开发测试环境❌ 不推荐全分布式模式3奇数节点生产环境部署✅ 推荐2. 集群角色详解• Leader负责处理所有写请求并协调事务• Follower处理读请求并参与投票选举• Observer可选仅处理读请求不参与投票核心特性每个Server保存一份数据副本全局数据保持一致性视图更新请求按顺序执行来自同一Client数据更新具有原子性要么全成功要么全失败3. 事务与一致性理解事务前必须先理解一致性一致性的核心是看见——谁能看见能否看见什么时候看见一致性级别分类级别定义示例强一致性写入成功后所有读取操作都能立即获取最新数据ZooKeeper默认模式弱一致性写入成功后部分读取操作可能无法立即获取最新数据部分缓存系统最终一致性写入成功后经过一定延迟后所有读取操作都能获取最新数据DNS、CassandraZooKeeper采用强一致性确保分布式环境下的数据可靠性。4. 原子广播机制Zab协议ZabZooKeeper Atomic Broadcast协议是ZooKeeper的核心保证各Server间数据同步两种工作模式恢复模式RecoveryLeader选举 数据同步广播模式Broadcast正常处理客户端请求工作流程zxid事务ID64位数字高32位是epochLeader周期低32位是递增计数每个事务proposal都携带zxid保证全局顺序性5. Znode节点类型ZooKeeper的数据模型是层次化的命名空间类似Linux文件系统但每个节点称为Znode。Znode类型类型标识生命周期子节点PERSISTENT默认永久有效需手动删除✔️ 允许EPHEMERAL-e随会话结束自动删除✖️ 不允许PERSISTENT_SEQUENTIAL-s永久有效且自动编号✔️ 允许EPHEMERAL_SEQUENTIAL-e -s临时有效且自动编号✖️ 不允许Part 02 ZooKeeper工作原理01、数据写入流程写请求处理详细步骤Client向Follower发送写请求Follower将请求转发给LeaderLeader接收请求发起投票Proposal所有Follower进行投票ACKLeader统计投票过半数同意则提交CommitLeader执行写入通知Follower同步Follower完成同步后返回结果给Client02、Follower核心功能Follower节点承担四项关键职责与Leader通信发送PING心跳、REQUEST请求、ACK确认、REVALIDATE会话验证处理Leader消息解析并执行Leader指令接收Client请求读请求直接处理写请求转发给Leader返回结果将操作结果返回给ClientFollower处理的消息类型消息类型功能描述PING心跳检测保持连接活跃PROPOSALLeader发起的投票提案COMMIT确认事务提交UPTODATE通知同步已完成REVALIDATE返回会话验证结果SYNC触发强制数据同步03、Leader选举流程当集群启动或Leader崩溃时Zab协议进入恢复模式触发Leader选举我来先查看您提供的参考文章了解其内容和风格。获取网页1 个网页我已经查看了参考文章它是一篇关于ZooKeeper分布式协调的教程文章结构清晰内容详实。参考您上传的PPT课件和参考文章的风格我为您撰写一篇适合发布在CSDN的完整技术文章。ZooKeeper分布式协调服务详解从原理到实战部署摘要本文系统讲解ZooKeeper分布式协调服务的核心概念、工作原理、数据一致性保障机制以及完整的集群部署实践。作为Hadoop生态系统的核心组件掌握ZooKeeper是理解分布式系统架构的关键一步。关键词ZooKeeper、分布式协调、Zab协议、Paxos算法、集群部署第一章 环境规划与准备一、规划内容在搭建ZooKeeper集群之前完整的环境规划是成功的关键。分布式系统的复杂性决定了我们必须从拓扑结构、主机规划、软件版本到数据目录进行全方位设计。1. 集群拓扑Master/Slave架构ZooKeeper集群采用经典的主从架构表格角色数量职责Leader1个负责所有写操作协调事务提交Follower多个处理读请求参与Leader选举和事务投票核心特点每个Server保存一份完整的数据副本全局数据保持一致性视图写请求必须由Leader处理读请求可分散到任意节点2. 主机规划在/etc/hosts文件中配置IP映射确保节点间可通过主机名通信bash复制# 编辑hosts文件 [roothadoop1 ~]# vi /etc/hosts # 添加以下配置 172.16.206.16 master 172.16.206.26 masterback 172.16.206.27 slave1 172.16.206.29 slave23. 软件规划清单表格软件版本说明CentOS7.xLinux操作系统JDK1.8基础运行环境Hadoop生态基于Java开发ZooKeeper3.4.6分布式协调服务核心Hadoop2.7.2分布式计算框架依赖ZKHive2.2.0数据仓库工具HBase1.2.6分布式列式数据库4. 数据目录规划建议提前规划以下目录结构数据目录/opt/zookeeper/data- 存储事务日志和快照日志目录/opt/zookeeper/logs- 存储运行日志配置目录/opt/zookeeper/conf- 配置文件存放二、Windows IP映射开发环境在Windows本地开发时修改C:\Windows\System32\drivers\etc\hosts文件添加相同的IP映射方便通过SSH工具或浏览器访问集群节点。第二章 基础环境配置一、网络配置1. 常用网络命令bash复制reset # 清屏 ifconfig # 查看IP地址若无效执行yum install net-tools hostname # 查看当前主机名 hostnamectl set-hostname hadoop1 # 永久修改主机名 ping www.baidu.com # 测试外网连通性 dhclient # 临时获取IP地址2. 虚拟机联网模式选择表格模式适用场景特点桥接模式与宿主机同网段虚拟机拥有独立IP局域网内可直接访问NAT模式推荐开发环境共享宿主机IP通过端口映射访问仅主机模式生产环境隔离完全隔离外网保证安全性3. 永久联网配置NAT模式bash复制# 进入网络配置目录 cd /etc/sysconfig/network-scripts/ # 编辑网卡配置文件ens33为常见网卡名根据实际情况调整 vi ifcfg-ens33 # 修改以下关键配置 BOOTPROTOstatic # 改为静态IP ONBOOTyes # 开机启动 IPADDR172.16.206.16 # 设置静态IP NETMASK255.255.255.0 # 子网掩码 GATEWAY172.16.206.1 # 网关地址 DNS18.8.8.8 # DNS服务器Windows中ipconfig/all查看 # 重启网络服务 systemctl restart network4. 防火墙管理bash复制systemctl start firewalld.service # 启动防火墙 systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld # 禁止开机启动集群环境建议关闭 firewall-cmd --state # 查看防火墙状态生产环境建议集群内部节点建议关闭防火墙或通过firewall-cmd开放2181、2888、3888等ZooKeeper端口。二、时钟同步NTP分布式系统中时间同步是数据一致性的前提。ZooKeeper依赖时间戳进行事务排序节点间时间偏差会导致严重问题。1. 临时同步验证bash复制# 向时间服务器同步需安装ntpdate yum install ntpdate -y ntpdate 192.168.1.128 # 看到类似以下输出表示成功 # 5 Mar 22:26:19 ntpdate[8171]: step time server 192.168.1.128 offset 3045.561204 sec2. 同步Internet时间bash复制ntpdate time.nuri.net # 亚洲NTP服务器 # 或 ntpdate cn.pool.ntp.org # 中国NTP服务器池3. 定时自动同步bash复制crontab -e # 添加以下行每分钟同步一次 */1 * * * * /usr/sbin/ntpdate time.nuri.net4. 搭建集群内部NTP服务器选一台节点作为时间服务器bash复制yum install ntp ntpdate -y # 编辑NTP配置 vi /etc/ntp.conf # 添加外部时间源 server 0.asia.pool.ntp.org server 1.asia.pool.ntp.org server 2.asia.pool.ntp.org server 3.asia.pool.ntp.org # 启动服务 systemctl start ntpd systemctl enable ntpd # 查看同步状态 ntpq -p其他节点指向该服务器同步即可。三、SSH免密登录集群节点间需要频繁通信配置免密登录是必要步骤。bash复制# 1. 生成密钥对所有节点执行 ssh-keygen -t rsa # 一路回车密钥将保存在 ~/.ssh/ 目录 # 2. 查看生成的密钥 ls ~/.ssh/ # id_rsa私钥 id_rsa.pub公钥 # 3. 分发公钥到所有节点包括自己 ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3 # 4. 测试免密登录 ssh hadoop2 # 无需输入密码即成功四、JDK安装与配置bash复制# 1. 检查系统自带JDK java -version rpm -qa | grep java # 2. 如有OpenJDK建议卸载 rpm -e --nodeps java-1.8.0-openjdk* # 3. 下载Oracle JDK 1.8 # 官网http://www.oracle.com/technetwork/java/javase/downloads/index.html # 4. 解压安装 tar -zxvf jdk-8uXXX-linux-x64.tar.gz -C /opt/ # 5. 配置环境变量 vi /etc/profile # 添加以下内容 export JAVA_HOME/opt/jdk1.8.0_XXX export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 6. 生效配置 source /etc/profile java -version第三章 ZooKeeper核心原理目录导航ZooKeeper概述ZooKeeper工作原理数据一致性与Paxos算法ZooKeeper数据模型其他重要概念ZooKeeper部署实践Part 01 ZooKeeper概述01、ZooKeeper简介Apache ZooKeeper是Apache软件基金会的顶级项目官网描述为致力于开发和维护实现高度可靠的分布式协调的开源服务器简单来说ZooKeeper是一个为分布式应用提供一致性服务的协调工具。它的设计目标是将复杂且容易出错的分布式一致性服务封装起来提供简单易用的接口。典型应用场景HadoopNameNode HA高可用、YARN资源调度HBaseMaster选举、元数据管理KafkaBroker注册、Topic分区Leader选举SolrCloud集群状态管理、配置分发02、ZooKeeper术语体系1. 三种部署模式表格模式节点数适用场景生产可用性单机模式1台本地学习、功能测试❌ 不可用伪分布式模式1台多进程开发测试❌ 不可用全分布式模式3台奇数生产环境✅ 推荐2. 集群角色详解plain复制┌─────────────────────────────────────────┐ │ ZooKeeper 集群架构 │ ├─────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌─────────┐ │ │ │ Leader │◄────►│Follower │ │ │ │ (主) │ │ (从) │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ └────────┬───────┘ │ │ ▼ │ │ ┌─────────┐ │ │ │Follower │ │ │ │ (从) │ │ │ └─────────┘ │ │ │ │ • Leader处理所有写请求协调事务 │ │ • Follower处理读请求参与投票选举 │ │ • Observer可选只读不参与投票 │ └─────────────────────────────────────────┘核心特性每个Server保存一份数据副本全局数据保持一致性视图更新请求按顺序执行来自同一Client数据更新具有原子性要么全成功要么全失败3. 事务与一致性理解事务前必须先理解一致性一致性的核心是看见——谁能看见能否看见什么时候看见一致性级别分类表格级别定义示例强一致性写成功后所有读操作立即可见ZooKeeper默认模式弱一致性写成功后部分读操作可能不可见某些缓存系统最终一致性写成功后经过一段时间所有读操作可见DNS、CassandraZooKeeper采用强一致性确保分布式环境下的数据可靠性。4. 原子广播机制Zab协议ZabZooKeeper Atomic Broadcast协议是ZooKeeper的核心保证各Server间数据同步两种工作模式恢复模式RecoveryLeader选举 数据同步广播模式Broadcast正常处理客户端请求工作流程plain复制启动或Leader崩溃 ──► 进入恢复模式 ──► 选举新Leader │ ▼ 多数Follower完成状态同步 │ ▼ 进入广播模式 ──► 处理客户端请求zxid事务ID64位数字高32位是epochLeader周期低32位是递增计数每个事务proposal都携带zxid保证全局顺序性5. Znode节点类型ZooKeeper的数据模型是层次化的命名空间类似Linux文件系统但每个节点称为Znode。Znode类型表格类型标识生命周期子节点PERSISTENT默认永久存在需手动删除允许EPHEMERAL-e随Session结束自动删除❌ 不允许PERSISTENT_SEQUENTIAL-s永久 自动编号允许EPHEMERAL_SEQUENTIAL-e -s临时 自动编号❌ 不允许Part 02 ZooKeeper工作原理01、数据写入流程写请求处理plain复制┌─────────┐ 1.写请求 ┌─────────┐ │ Client │ ────────────────► │Follower │ └─────────┘ └────┬────┘ │ │ 2.转发 ▼ ┌─────────┐ │ Leader │ └────┬────┘ │ ┌──────────────┼──────────────┐ │ │ │ ▼ ▼ ▼ 3.发起投票 4.Follower投票 5.统计结果 (Proposal) (ACK) (Commit) │ │ │ └──────────────┴──────────────┘ │ ▼ 6.写入数据 7.通知Follower同步 │ ▼ ┌─────────┐ │Follower │──► 8.返回结果给Client └─────────┘详细步骤Client向Follower发送写请求Follower将请求转发给LeaderLeader接收请求发起投票Proposal所有Follower进行投票ACKLeader统计投票过半数同意则提交CommitLeader执行写入通知Follower同步Follower完成同步后返回结果给Client02、Follower核心功能Follower节点承担四项关键职责与Leader通信发送PING心跳、REQUEST请求、ACK确认、REVALIDATE会话验证处理Leader消息解析并执行Leader指令接收Client请求读请求直接处理写请求转发给Leader返回结果将操作结果返回给ClientFollower处理的消息类型表格消息类型作用PING心跳检测维持连接活性PROPOSALLeader发起的投票提案COMMIT事务提交确认UPTODATE同步完成通知REVALIDATE会话验证结果SYNC强制数据同步03、Leader选举流程当集群启动或Leader崩溃时Zab协议进入恢复模式触发Leader选举plain复制┌─────────────────────────────────────────────────────────┐ │ Leader选举流程 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 1. 每个Server启动后进入LOOKING状态推荐自己为Leader │ │ │ │ 2. 交换投票信息(myid, zxid) │ │ • myid服务器唯一标识 │ │ • zxid最新事务ID越大表示数据越新 │ │ │ │ 3. 比较规则 │ │ • 先比较zxidzxid大的优先 │ │ • zxid相同比较myidmyid大的优先 │ │ │ │ 4. 每轮投票后统计获得半数以上选票的Server成为Leader │ │ │ │ 5. 新Leader等待Follower连接进行数据同步 │ │ │ │ 6. 同步完成后集群进入广播模式开始对外服务 │ │ │ └─────────────────────────────────────────────────────────┘选举示例5节点集群节点A(zxid100, myid1)、B(zxid100, myid2)、C(zxid101, myid3)第一轮投票各投自己第二轮节点发现C的zxid最大改投CC获得3票过半成为LeaderPart 03 数据一致性与Paxos算法01、一致性保障原则分布式系统中保持数据一致性的核心思路如果各节点的初始状态一致每个节点执行相同的操作序列那么最终能得到一致的状态。Master-Slave模式的问题单点Master存在性能瓶颈Master故障会导致服务中断多Master又面临数据冲突02、Paxos算法Paxos算法是解决分布式一致性问题的经典方案ZooKeeper的选举机制受其启发。核心思想┌────────────────────────────────────────┐│ Paxos投票机制 │├────────────────────────────────────────┤│ ││ • 同一时刻只有一个写操作被批准 ││ • 并发的写操作竞争选票 ││ • 获得过半数选票n/2的写操作生效 ││ • 未获胜的写操作进入下一轮投票 ││ ││ 优势任何节点挂掉≤n/2不影响一致性 ││ │└────────────────────────────────────────┘为什么ZooKeeper集群通常为奇数集群规模容错能力最小存活节点资源效率3节点1节点故障2节点高4节点1节点故障3节点较低与3节点相同5节点2节点故障3节点高6节点2节点故障4节点较低与5节点相同Part 04 ZooKeeper数据模型01、数据模型结构ZooKeeper采用树形层次结构与Linux文件系统类似每个Znode包含三部分05、Watcher监听机制ZooKeeper提供事件监听功能实现发布/订阅模式Session会话stat版本、权限、时间戳等元数据data关联的数据内容最大1MBchildren子节点列表# 1. 连接ZooKeeper服务器 bin/zkCli.sh -server 192.168.58.99:2181 # 2. 查看根节点子节点 ls / ls /zookeeper # 3. 创建节点必须携带数据 create /hello world create /app1 application1 # 4. 获取节点数据和状态 get /hello # 5. 创建临时节点-e参数 create -e /temp temporary_data # 6. 创建顺序节点-s参数 create -s /seq/item data # 实际创建/seq/item0000000001 # 7. 删除节点 delete /hello # 无子节点时 deleteall /app1 # 递归删除含子节点 # 8. 设置监听watch ls /hello true # 监听子节点变化和删除 get /hello true # 监听数据变化和删除03、节点状态详解执行get /hello返回的完整信息[zk: localhost:2181(CONNECTED) 1] get /hello world # 节点数据 cZxid 0x1e00000075 # 创建时的事务ID ctime Tue Aug 21 23:42:08 PDT 2018 # 创建时间戳 mZxid 0x1e00000075 # 最后修改的事务ID mtime Tue Aug 21 23:42:08 PDT 2018 # 最后修改时间戳 pZxid 0x1e00000075 # 最后子节点修改的zxid cversion 0 # 子节点版本号修改次数 dataVersion 0 # 数据版本号 aclVersion 0 # ACL版本号 ephemeralOwner 0x0 # 临时节点所属会话ID0x0表示持久节点 dataLength 5 # 数据长度 numChildren 0 # 子节点数量04、zxid与Session机制zxidZooKeeper Transaction Id64位整数全局唯一且递增高32位epochLeader周期号每次选举1低32位计数器单调递增作用标识事务顺序保证全局一致性Client与Server间的TCP长连接会话有超时时间默认tickTime * 2会话结束会自动删除该Client创建的所有临时节点支持会话恢复断线重连后恢复Watcher事件类型NodeCreated节点创建NodeDeleted节点删除NodeDataChanged数据修改NodeChildrenChanged子节点列表变化Part 05 其他重要概念01、Observer角色为解决集群扩展性问题ZooKeeper引入Observer特性LeaderFollowerObserver处理读请求✅✅✅处理写请求✅转发转发参与投票✅✅❌参与选举✅✅❌优势增加Observer可线性扩展读性能不影响写性能不参与投票02、ZooKeeper核心特性总结适合读多写少的场景特性说明顺序一致性同一Client的请求按发送顺序执行原子性事务要么全成功要么全失败单一视图无论连接哪个Server数据视图一致可靠性事务一旦提交状态变更永久保留实时性保证客户端最终能读到最新数据非即时03、ZooKeeper在Hadoop中的应用组件应用场景HDFS HANameNode主备切换、元数据同步YARNResourceManager HAHBaseMaster选举、RegionServer注册、元数据管理KafkaBroker注册、Controller选举、Topic配置Part 06 ZooKeeper部署实践01、安装前准备Hadoop分布式集群环境搭建是入门者的常见痛点环境配置问题往往导致集群无法正常启动。因此正式部署前的规划至关重要。02、配置文件详解ZooKeeper配置非常简单各节点zoo.cfg内容相同仅myid文件不同。03、集群操作命令# 1. 启动ZooKeeper所有节点执行 [roothadoop1 ~]# zkServer.sh start [roothadoop2 ~]# zkServer.sh start [roothadoop3 ~]# zkServer.sh start # 2. 查看启动状态 [roothadoop1 ~]# zkServer.sh status # 输出示例 # ZooKeeper JMX enabled by default # Using config: /opt/zookeeper/bin/../conf/zoo.cfg # Mode: follower # 或 Mode: leader # 3. 停止服务 zkServer.sh stop # 4. 重启服务 zkServer.sh restart # 5. 前台启动调试时使用 zkServer.sh start-foreground启动成功标志一个节点显示Mode: leader其他节点显示Mode: follower04、客户端连接测试# 连接集群 zkCli.sh -server hadoop1:2181,hadoop2:2181,hadoop3:2181 # 验证集群状态 [zk: hadoop1:2181(CONNECTED) 0] ls / [zookeeper] [zk: hadoop1:2181(CONNECTED) 1] create /test hello Created /test [zk: hadoop1:2181(CONNECTED) 2] get /test hello总结本文从环境规划、基础配置到核心原理、部署实践系统性地讲解了ZooKeeper分布式协调服务掌握ZooKeeper是理解Hadoop生态系统乃至分布式系统架构的重要基础。建议读者在理解原理的基础上动手搭建3节点集群通过实际操作加深对分布式协调服务的理解。