天津市浔绾网

ZooKeeper分布式协调服务设计核心概念及安装配置

2026-04-23 21:51:02 浏览次数:1
详细信息

ZooKeeper 设计核心概念

1. 数据模型(Znode)

2. 会话机制

3. Watch机制

4. 原子广播协议(Zab)

5. 集群角色

6. 一致性保证

ZooKeeper 安装配置

单机模式安装

1. 环境准备
# 下载(以3.8.3为例)
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gz

# 解压
tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz
mv apache-zookeeper-3.8.3-bin /opt/zookeeper
2. 配置单机模式
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

zoo.cfg 基本配置

# 基本时间单位(毫秒)
tickTime=2000

# 数据目录
dataDir=/opt/zookeeper/data

# 客户端连接端口
clientPort=2181

# 最大客户端连接数
maxClientCnxns=60

# 快照保留数量
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
3. 启动服务
# 启动
/opt/zookeeper/bin/zkServer.sh start

# 查看状态
/opt/zookeeper/bin/zkServer.sh status

# 客户端连接
/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

集群模式安装(以3节点为例)

1. 配置 zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper/data
clientPort=2181
initLimit=10
syncLimit=5

# 集群配置 server.id=host:port1:port2
# port1: 集群内部通信端口
# port2: 选举端口
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888

# 开启四字命令
4lw.commands.whitelist=*
2. 创建 myid 文件
# 在每台服务器的 dataDir 目录下
echo "1" > /opt/zookeeper/data/myid  # 节点1
echo "2" > /opt/zookeeper/data/myid  # 节点2  
echo "3" > /opt/zookeeper/data/myid  # 节点3
3. 启动集群
# 每台服务器执行
/opt/zookeeper/bin/zkServer.sh start

# 查看集群状态
/opt/zookeeper/bin/zkServer.sh status

关键配置参数详解

必需配置
参数 说明 建议值
clientPort 客户端连接端口 2181
dataDir 数据目录 独立磁盘
tickTime 基础时间单位(ms) 2000
集群配置
参数 说明 建议值
initLimit Follower初始化连接超时(tick倍数) 10-20
syncLimit Follower同步超时 5
server.id 集群服务器列表 host:port1:port2
性能调优
参数 说明
maxClientCnxns 单客户端最大连接数
jute.maxbuffer 单个数据节点最大数据量(默认1MB)
preAllocSize 事务日志预分配大小

监控与维护

1. 四字命令
# 查看状态
echo stat | nc localhost 2181

# 查看连接
echo cons | nc localhost 2181

# 监控
echo mntr | nc localhost 2181

# 环境
echo envi | nc localhost 2181
2. JMX 监控
# 启动时开启JMX
export JMXLOCALONLY=false
export JMXPORT=9999
export JMXAUTH=false
export JMXSSL=false

# 或添加JVM参数
export SERVER_JVMFLAGS="-Dcom.sun.management.jmxremote 
  -Dcom.sun.management.jmxremote.port=9999
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.authenticate=false"
3. 日志管理
# 修改日志配置 conf/log4j.properties
zookeeper.root.logger=INFO, ROLLINGFILE
log4j.appender.ROLLINGFILE.MaxFileSize=100MB
log4j.appender.ROLLINGFILE.MaxBackupIndex=10

生产环境建议

硬件要求 配置优化
# 生产环境示例配置
tickTime=2000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log  # 事务日志分离
clientPort=2181
maxClientCnxns=100
minSessionTimeout=4000
maxSessionTimeout=40000
snapCount=100000
autopurge.snapRetainCount=10
autopurge.purgeInterval=24
forceSync=yes
skipACL=no
standaloneEnabled=false  # 3.5+支持,禁用单机模式提升稳定性
安全配置
# 启用认证
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl

# 网络隔离
secureClientPort=2281
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=/path/to/keystore
ssl.keyStore.password=password

常用操作命令

# 连接客户端
zkCli.sh -server host:port

# 常用命令
create /path data           # 创建节点
get /path                   # 获取数据
set /path newData          # 设置数据
ls /path                   # 列出子节点
delete /path               # 删除节点
rmr /path                  # 递归删除

注意事项

集群节点数建议为奇数(3、5、7),便于选举 生产环境务必配置事务日志独立目录(dataLogDir) 定期清理快照和事务日志 监控会话数和节点数,避免内存溢出 版本升级时注意兼容性和滚动重启顺序

这样的配置可满足大多数生产环境需求,具体参数需要根据实际业务负载进行调整。

相关推荐