ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的实际应用场景
ZooKeeper作为分布式协调服务,在企业级应用中有着广泛的应用场景:
服务注册与发现:作为服务注册中心,管理微服务实例的注册和发现。
配置管理:集中管理分布式应用的配置信息,实现配置的动态更新。
分布式锁:实现分布式环境下的互斥访问,保证数据一致性。
领导者选举:在分布式系统中选举出一个领导者,负责协调其他节点的工作。
分布式队列:实现分布式环境下的队列功能,保证消息的顺序处理。
命名服务:为分布式系统中的资源提供唯一的命名标识。
个人见解:ZooKeeper的技术价值
ZooKeeper的出现为分布式系统提供了一种可靠的协调服务,其技术价值主要体现在:
简化分布式协调:ZooKeeper提供了一套简单而强大的API,简化了分布式协调的实现。
保证数据一致性:通过ZAB(ZooKeeper Atomic Broadcast)协议,保证了数据的一致性。
高可用性:通过集群部署,提供了高可用性的服务。
可靠性:ZooKeeper的设计保证了即使在节点故障的情况下,也能正常提供服务。
生态系统:作为Hadoop生态系统的重要组件,与Hadoop、HBase等技术集成良好。
1.zookeeper安装
1 | wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz |
1.解压完成后修改配置文件,创建并修改存储数据的目录
1 | vi zoo.cfg |

2.配置完成后,启动zookeeper
1 | ./bin/zkServer.sh start ./conf/zoo.cfg |
3.启动成功后,通过客户端连接zookeeper
1 | ./bin/zkCli.sh -server 10.0.0.1:2181 |
zookeeper常用命令:
ls /path : 查看特定节点下面的子节点
create /path data: 创建一个节点。并给节点绑定数据
注意: 默认是持久性节点
create -s /parent/childPath :在父节点下面创建持久性顺序子节点
create -e /path data :创建临时性节点
create -e -s /path data: 创建临时顺序节点
get /path :获得节点上绑定的数据信息
set/ path data: 修改节点上绑定的数据。
delete /path :删除节点
ls /path true:在查看的时候。给节点设置监听: 监听本节点数据的修改和删除。同时监听子节点的添加和删除
get /path true: 监听本节点数据的修改和删除。同时监听子节点的添加和删除
2. zookeeper分布式集群搭建
生产环境下最少3个节点
| 节点 | IP | data |
|---|---|---|
| zookeeper1 | 10.0.0.1 | /home/zookeeper/zkdata |
| zookeeper2 | 10.0.0.2 | /home/zookeeper/zkdata |
| zookeeper3 | 10.0.0.3 | /home/zookeeper/zkdata |
1.创建存储数据的文件夹
1 | mkdir zkdata |
myid的内容是服务器表示 1|2|3|
2.修改zookeeper的cfg文件
1 | tickTime=2000 |
server.X :x为服务器的唯一标识。
10.0.0.1:服务器所在的ip地址
2888:数据同步使用的端口号
3888:选举使用的端口号
3.分别启动zookeeper
1 | ./bin/zkServer.sh start ./conf/zoo.cfg |
查看zookeeper的状态:
1 | ./bin/zkServer.sh status ./conf/zoo.cfg |
4.任意连接一个zookeeper操作
3.zookeeper开机自启动脚本
进入到/etc/init.d/目录下,创建zookeeper文件,复制以下内容:
1 |
|
权限管理:
1 | chmod a+x zookeeper |
4.ZooKeeper的核心概念
1. 数据模型
ZooKeeper使用树形结构来组织数据,类似于文件系统:
- 节点(Node):ZooKeeper中的数据单元,类似于文件系统中的文件或目录。
- 路径(Path):每个节点都有一个唯一的路径,如
/app/config。 - 数据(Data):节点可以存储少量数据,通常不超过1MB。
- 版本(Version):每个节点都有一个版本号,每次修改都会递增。
2. 节点类型
ZooKeeper支持以下几种节点类型:
- 持久节点(Persistent):创建后一直存在,直到被显式删除。
- 临时节点(Ephemeral):创建者会话结束后自动删除。
- 顺序节点(Sequential):创建时会自动在路径后添加一个递增的序号。
3. 会话(Session)
客户端与ZooKeeper服务器之间的连接称为会话:
- 会话超时:如果客户端在一定时间内没有发送心跳,会话会被视为过期。
- 会话恢复:客户端可以在会话过期前重新连接,恢复会话状态。
4. 监视(Watch)
ZooKeeper支持对节点的监视:
- 数据监视:监视节点数据的变化。
- 子节点监视:监视子节点的变化。
- 一次性触发:监视是一次性的,触发后需要重新注册。
5. ZAB协议
ZooKeeper使用ZAB(ZooKeeper Atomic Broadcast)协议来保证数据一致性:
- 崩溃恢复:当领导者节点故障时,选举新的领导者。
- 原子广播:保证所有变更操作的顺序一致性。
5.ZooKeeper性能优化
1. 配置优化
- 调整内存:根据集群规模和负载,调整JVM内存大小。
- 配置日志:合理配置日志级别和滚动策略,避免日志过大。
- 调整快照频率:根据数据量和变更频率,调整快照生成频率。
2. 集群优化
- 合理规划集群规模:通常3-5个节点即可满足大多数场景的需求。
- 网络优化:确保集群节点之间网络通畅,延迟低。
- 磁盘优化:使用SSD存储,提高读写性能。
3. 客户端优化
- 连接池:使用连接池管理客户端连接,减少连接开销。
- 会话管理:合理设置会话超时时间,避免频繁重连。
- 批量操作:使用批量API减少网络往返次数。
- 监视管理:合理使用监视,避免过度注册监视。
4. 应用优化
- 数据结构设计:合理设计ZooKeeper的数据结构,避免过深的层次。
- 数据量控制:每个节点的数据量控制在1MB以内,避免存储大量数据。
- 避免频繁写操作:ZooKeeper更适合读多写少的场景。
6.ZooKeeper的发展趋势
1. 技术演进
ZooKeeper作为一个成熟的分布式协调服务,一直在不断演进:
- 版本更新:从3.0到3.6+,ZooKeeper不断添加新特性和改进性能。
- 安全性增强:加强了安全特性,如SASL认证、SSL传输等。
- 可扩展性:改进了集群的可扩展性,支持更大规模的部署。
- 云原生支持:加强了对容器编排平台的支持,如Kubernetes。
2. 与新兴技术的融合
- Service Mesh:与Istio等Service Mesh框架集成,提供服务发现和配置管理功能。
- 边缘计算:支持边缘节点的协调和管理。
- Serverless:为Serverless架构提供状态管理和协调服务。
3. 未来发展方向
- 智能化:引入AI技术,实现集群的智能管理和故障预测。
- 易用性:进一步简化API和配置,提高用户体验。
- 性能优化:持续优化性能,处理更高的并发请求。
- 生态系统:构建更丰富的生态系统,与更多的工具和框架集成。
7.总结与个人感悟
ZooKeeper作为一个分布式协调服务,已经在企业级应用中得到了广泛的应用。它的出现为分布式系统提供了一种可靠的协调机制,简化了分布式应用的开发和管理。
技术价值
- 简化分布式协调:ZooKeeper提供了一套简单而强大的API,简化了分布式协调的实现。
- 保证数据一致性:通过ZAB协议,保证了数据的一致性和可靠性。
- 高可用性:通过集群部署,提供了高可用性的服务。
- 生态系统:作为Hadoop生态系统的重要组件,与Hadoop、HBase等技术集成良好。
应用价值
- 加速分布式应用开发:ZooKeeper的简单易用,加速了分布式应用的开发。
- 提高系统可靠性:通过分布式协调,提高了系统的可靠性和稳定性。
- 支持业务创新:作为基础服务,ZooKeeper支持了各种业务创新,如微服务架构、分布式系统等。
个人感悟
作为一名技术人员,我认为ZooKeeper的成功在于它的专注和可靠性。它专注于解决分布式协调的核心问题,提供了简单而强大的解决方案。这种专注和可靠性使得ZooKeeper成为分布式系统中不可或缺的组件。
在未来的技术发展中,随着分布式系统的不断普及,ZooKeeper将会继续发挥重要的作用。对于我们来说,学习和掌握ZooKeeper不仅是了解一种技术,更是理解分布式系统设计原理的重要途径。
ZooKeeper的设计理念和实现方式也值得我们学习,它展示了如何构建一个高性能、可靠、易用的分布式系统。这种学习不仅可以帮助我们更好地使用ZooKeeper,还可以启发我们在其他领域的设计和开发。