智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
   15  
查询码: 00000204
3. zookeeper
作者: 文艺范儿 于 2025年12月10日 发布在分类 / Elastic Stack / 扩展 ,于 2025年12月10日 编辑
zookeeper

3. zookeeper

官网:https://zookeeper.apache.org/

3.1 zookeeper核心概念

1. 分布式协调服务定位

  • 核心功能:分布式应用的协调服务(配置管理、命名服务、分布式锁、集群管理)

  • 数据模型:层次化的命名空间(类似文件系统)

  • 一致性保证:基于ZAB协议的原子广播,保证顺序一致性

2. 关键特性

特性 说明 应用场景

顺序一致性

客户端更新按顺序应用

分布式锁、队列

原子性

更新操作要么成功要么失败

配置更新

单一系统映像

客户端连接到任意服务器看到相同视图

服务发现

可靠性

一旦更新生效则持久化

元数据存储

实时性

客户端在一定时间内看到最新视图

监控系统

3. 集群架构设计

粘贴图片

4. 节点角色说明

Leader:处理所有写请求,发起提案投票

Follower:处理读请求,参与Leader选举投票

Observer:仅处理读请求,不参与投票(扩展读性能)

5. 基本命令

a. 连接与基础命令

连接zookeeper

# 连接本地Zookeeper
zkCli.sh -server localhost:2181

# 连接远程Zookeeper
zkCli.sh -server 10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181

# 连接时指定超时时间
zkCli.sh -server localhost:2181 -timeout 5000


基础操作命令

# 查看帮助
help

# 查看命令历史
history

# 退出客户端
quit

# 连接状态
stat 


b. 节点操作命令

节点创建与查看

# 创建持久节点
create /test "hello zookeeper"
# 创建临时节点(会话结束自动删除)
create -e /temp_node "temporary data"
# 创建顺序节点
create -s /seq_node "sequential data"
# 查看节点
get /test
# 查看节点状态信息
stat /test


节点列表操作

# 列出子节点
ls /
# 递归列出所有子节点
ls -R /
# 列出节点并显示状态信息
ls2 /  # 3.4.x版本
ls -s /  # 3.5.x+版本


节点修改与删除

# 修改节点数据
set /test "updated data"
# 带版本号修改(乐观锁)
set /test "new data" 1
# 删除节点
delete /test
# 递归删除节点及其子节点
deleteall /path


c. 高级功能命令

监听(Watch)机制

# 设置数据变化监听
get /test watch

# 设置子节点变化监听
ls / watch

# 永久监听(3.6.0+)
addWatch /test


ACL权限管理

# 查看节点ACL
getAcl /test

# 设置ACL权限
setAcl /test world:anyone:crwda

# 创建带ACL的节点
create /secure_node "secret" world:anyone:r


认证与授权

# 添加认证
addauth digest username:password

# 使用认证创建节点
create /secure_node "data" digest:username:password:cdrwa

# 查看认证信息
echo srst | nc localhost 2181

d. 四字命令(Four Letter Words)

# 1. 服务器状态监控
# 服务器统计信息
echo stat | nc localhost 2181
# 服务器健康检查
echo ruok | nc localhost 2181
# 连接信息
echo cons | nc localhost 2181
# 环境变量
echo envi | nc localhost 2181

# 2.高级监控命令
# 监控信息
echo mntr | nc localhost 2181
# 服务器跟踪
echo srvr | nc localhost 2181
# 连接跟踪
echo crst | nc localhost 2181
# 观察者信息
echo wchs | nc localhost 2181

3.2 集群部署方案

集群规模规划

节点数量 容错能力 适用场景

3节点

1节点故障

开发测试环境

5节点

2节点故障

生产环境推荐

7节点+

N/2-1节点故障

超大规模集群

1. 环境准备

# 所有节点执行
# 创建专用用户
[root@elk-91 ~]# groupadd zookeeper
[root@elk-91 ~]# useradd -g zookeeper zookeeper

# 创建目录结构
[root@elk-91 ~]# mkdir -p /opt/zookeeper/{data,logs,conf,bin}
[root@elk-91 ~]# mkdir -p /var/log/zookeeper

2. 软件安装

# 以下操作所有节点执行

# 下载安装包(以3.9.4为例)
[root@elk-91 ~]# wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.9.4/apache-zookeeper-3.9.4-bin.tar.gz
[root@elk-91 ~]# tar -zxvf apache-zookeeper-3.9.4-bin.tar.gz -C /opt/zookeeper/
[root@elk-91 zookeeper]# ln -s apache-zookeeper-3.9.4-bin current

# 权限设置
[root@elk-91 ~]# chown -R zookeeper:zookeeper /opt/zookeeper
[root@elk-91 ~]# chown -R zookeeper:zookeeper /var/log/zookeeper

3. 集群配置

## 主配置文件 zoo.cfg,所有节点都要执行

[root@elk-91 ~]# cd /opt/zookeeper/current/conf
[root@elk-91 conf]# mv zoo_sample.cfg zoo.cfg
[root@elk-91 conf]# cat zoo.cfg 
# 增加会话超时容忍度
# 定义最小单元的时间范围tick
tickTime=2000
# 启动时最长等待tick数量
initLimit=10
# 数据同步时最长等待的tick时间进行响应ACK
syncLimit=5

# 指定数据目录
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs

# 监听端口
clientPort=2181
# 网络优化
clientPortAddress=0.0.0.0

maxClientCnxns=60
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
# 开启四字命令允许所有的节点访问
4lw.commands.whitelist=*

# 集群节点配置
server.91=10.0.0.91:2888:3888
server.92=10.0.0.92:2888:3888
server.93=10.0.0.93:2888:3888

节点ID配置

# 在每个节点上创建myid文件,内容为对应的server编号,如果设置错误集群会起不来

# 节点91:
[root@elk-91 ~]# echo "91" > /opt/zookeeper/data/myid

# 节点92:
[root@elk-92 ~]# echo "92" > /opt/zookeeper/data/myid

# 节点93:
[root@elk-93 ~]# echo "93" > /opt/zookeeper/data/myid

4. JVM优化配置

# 创建JVM参数文件,根据实际情况配置,所有节点执行

[root@elk-91 ~]# vi /opt/zookeeper/current/conf/java.env 
[root@elk-91 ~]# cat /opt/zookeeper/current/conf/java.env
export JAVA_HOME=/usr/share/elasticsearch/jdk
export JVMFLAGS="-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"

# 或者更改zkEnv.sh
[root@elk-92 ~]#  grep ^ZK_SERVER_HEAP /opt/zookeeper/current/bin/zkEnv.sh
ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-1000}"
[root@elk-92 ~]# sed -i '/^ZK_SERVER_HEAP/s#1000#2000#'  /opt/zookeeper/current/bin/zkEnv.sh

5. 服务管理与监控

# 创建systemd服务文件,所有节点执行
[root@elk-91 ~]# cat > /etc/systemd/system/zookeeper.service << EOF
[Unit]
Description=Zookeeper Service
After=network.target

[Service]
Type=forking
User=zookeeper
Group=zookeeper
Environment=ZOO_LOG_DIR=/var/log/zookeeper
ExecStart=/opt/zookeeper/current/bin/zkServer.sh start
ExecStop=/opt/zookeeper/current/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/current/bin/zkServer.sh restart
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
[root@elk-91 ~]# systemctl daemon-reload
[root@elk-91 ~]# systemctl enable zookeeper
[root@elk-91 ~]# systemctl start zookeeper

3.3 连接集群

zookeeper可视化管理工具ZkWeb安装部署

# 注意:java环境为8
[root@elk-92 ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

# 下载
[root@elk-92 deploy]# wget https://down-wy2.oss-cn-hongkong.aliyuncs.com/gongju-test/java-tomcat/zkWeb-v1.2.1.jar
# 启动
[root@elk-92 deploy]# nohup java -jar zkWeb-v1.2.1.jar  >> zkweb.log &

访问并添加节点:http://10.0.0.92:8099

粘贴图片

笔记
0人参与


 同类知识

 历史版本

备注 修改日期 修改人
创建版本 2025-12-10 23:26:21[当前版本] 文艺范儿

 附件

附件类型

PNGPNG

文艺知识分享平台 -V 5.2.5 -wcp