ZooKeeper 学习笔记
ZooKeeper 学习笔记基于 3 台云服务器集群实战整理文中 IP 均为示例已脱敏版本3.8.6华为云镜像安装文档目录docs/zookeeper-学习笔记.md博客发布时拷贝docs/目录即可示例 IP 对照表节点公网 IPSSH 示例内网 IPmyidServer 1203.0.113.1110.0.1.111Server 2203.0.113.1210.0.1.122Server 3203.0.113.1310.0.1.133公网 IP 使用 RFC 5737 文档保留地址203.0.113.0/24内网使用10.0.1.0/24示例段发布时请替换为你自己的环境。一、ZooKeeper 是什么白话分布式系统的「协调员」——帮多台机器达成共识、存元数据、做选主。常见用途用途说明注册中心Dubbo 把 Provider 地址写进 ZKConsumer 来查配置中心多节点共享一份配置分布式锁 / 选主集群里谁当 LeaderKafka旧版老版本 Kafka 用 ZK 存 Broker/Topic 元数据Kafka 3.x 已可 KRaft 去 ZK本集群仍用 ZK比喻ZK 像电话簿 公告栏各服务来这里登记地址、订阅变化。二、本集群环境2.1 三台机器名称公网 IPSSH私网 IPmyidServer 1203.0.113.1110.0.1.111Server 2203.0.113.1210.0.1.122Server 3203.0.113.1310.0.1.133记忆Consumer 在Server 2Provider 多在Server 1。2.2 安装路径项目路径程序/opt/zookeeper数据/var/lib/zookeeper配置/opt/zookeeper/conf/zoo.cfg节点 ID/var/lib/zookeeper/myid三台分别为 1、2、3服务systemctl start/stop/status zookeeper2.3 连接串10.0.1.11:2181,10.0.1.12:2181,10.0.1.13:2181客户端连任意一台即可一台挂了连其他的集群对外仍可用。三、核心概念3.1 节点类型ZNode类型说明持久节点创建后一直存在除非主动删除临时节点会话断开自动删除Dubbo Provider 下线时常用顺序节点名字后面带递增序号3.2 集群角色角色作用Leader处理写请求、协调一致性Follower参与投票可读可转发写Observer只读、不参与选主本集群未用写走 Leader读任意节点可能略滞后一般可接受。3.3 会话Session客户端与 ZK 建立长连接 心跳心跳超时 → 会话失效 →临时节点被删Dubbo 里 Provider 地址消失3.4 Watcher监听客户端可监听节点变化数据变、子节点变Dubbo Consumer订阅Provider 列表变化Provider 上下线能感知四、关键配置 zoo.cfg三台相同# 心跳与超时示例思路以实际文件为准 tickTime2000 initLimit10 syncLimit5 dataDir/var/lib/zookeeper clientPort2181 # 集群成员server.myid内网IP:2888:3888 server.110.0.1.11:2888:3888 server.210.0.1.12:2888:3888 server.310.0.1.13:2888:3888端口用途2181客户端连接2888Follower 连 Leader数据同步3888选举 Leader五、常用命令5.1 服务管理systemctl status zookeeper systemctl start zookeeper systemctl stop zookeeper systemctlenablezookeeper5.2 客户端 shell本集群用 Kafka 自带脚本/opt/kafka/bin/zookeeper-shell.sh10.0.1.11:2181进入后ls/ls/servicesls/services/dubbo-spring-provider get /services/dubbo-spring-providerstat/services/dubbo-spring-provider5.3 Dubbo 相关路径示例路径含义/services/dubbo-provider原生 Java API Provider 应用级注册/services/dubbo-spring-providerSpring Boot Provider 应用级注册/dubbo/org.demo.DemoService/providers/接口级 Provider URL 列表查 Provider 地址/opt/kafka/bin/zookeeper-shell.sh10.0.1.11:2181\ls/services/dubbo-spring-provider期望输出类似[10.0.1.11:20881, 10.0.1.13:20881]六、与 Dubbo / Kafka 的关系┌─────────────┐ 注册/发现 ┌─────────────┐ │ Dubbo │ ◄──────────────► │ ZooKeeper │ │ Provider/ │ 写地址、订阅 │ 注册中心 │ │ Consumer │ └─────────────┘ └─────────────┘ ┌─────────────┐ 元数据可选 ┌─────────────┐ │ Kafka │ ◄──────────────► │ ZooKeeper │ │ Broker │ 旧架构依赖 ZK │ │ └─────────────┘ └─────────────┘Dubbo强依赖 ZK本课程做服务注册与发现Kafka 3.xBroker 元数据可独立本环境 ZK 仍独立部署Dubbo 专用为主七、运维要点三台 myid 必须不同1、2、3与server.N对应zoo.cfg 三台要一致仅myid文件不同用内网 IP做集群通信省流量、低延迟2181 一般不对公网开放仅内网 SSH 调试停 ZK 前注意依赖它的Dubbo 无法发现服务Server 2 曾出现旧 Kafka 内置 ZK 占 2181需先停冲突进程八、故障排查 checklist现象可能原因Dubbo Consumer 找不到 ProviderProvider 未启动 / 未注册 ZK / ZK 挂了ls /services/...为空Provider 未 export 或应用名不对集群无法选主网络不通、myid 错误、少于半数节点存活2181 被占用其他进程如旧 Kafka ZK冲突九、一句话总结ZooKeeper 分布式协调与注册中心存地址、通知变化、保证集群一致在本项目中主要是Dubbo 的「电话簿」。