您现在的位置是:首页 >技术杂谈 >Zookeeper网站首页技术杂谈
Zookeeper
简介Zookeeper
什么是 Zookeeper
Zookeeper 是一种分布式协调服务。在分布式环境中协调和管理服务是一个复杂的过程。Zookeeper 通过其简单的架构和 API 解决了这个问题。Zookeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
Zookeeper 是一个基于观察者设计模式的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知在 Zookeeper 上注册的那些观察者。
Zookeeper = 文件系统 + 通知机制
Zookeeper 特点
- 一个领导者(Leader),多个跟随者(Follower)组成的集群
- 半数以上存活,适合安装奇数台服务器
- 全局数据一致
- 来自同一个客户端的多个请求顺序执行
- 数据更新原子性
数据结构
- 类似于 Unix 文件系统
- 每个节点称作一个 ZNode
- 每个 ZNode 默认能存储 1MB 的数据
应用场景
- 统一命名服务
- 统一配置管理
- 统一集群管理
- 服务器节点动态上下线
- 软负载均衡
选举机制(第一次启动)
- 投自己
- 改为服务器 myid 更大的
- 如果没有达到半数以上,状态保持 LOOKING
- 某个服务器的选票达到半数以上,当选 Leader
- 其他改为 Follower
- 后加入的自动变为 Follower
选举机制(非第一次启动)
选举优先级:Leader任期代号 > 事务ID > 服务器ID
常用命令
ls / // 查看路径
create /sanguo "simayi" // 创建节点
set /sanguo "xishi" // 设置节点值
get -s /sanguo // 查看节点
get -w /sanguo // 监听节点数据变化(每次注册只能收到一次监听)
ls -w /sanguo // 监听节点增减变化(每次注册只能收到一次监听)
delete /sanguo // 删除无子节点的节点
deleteall /sanguo // 删除有子节点的节点
节点类型
- 短暂有序号
- 短暂无序号
- 持久有序号
- 持久无序号
监听器-常见的监听
- 节点数据的变化
- 节点增减的变化
实现分布式锁
Curator 框架解决了很多 Zookeeper 客户端底层的细节开发工作,比如锁重入、反复注册监听、锁路径不存在、重试策略等等。
生产集群安装 zk 台数参考
- 10 台服务器 3台 zk
- 20 台服务器 5台 zk
- 100台服务器 11台 zk
- 200台服务器 11台 zk
zk 台数越多,可靠性越高,通信延迟越长
Paxos 算法
- 一种基于消息传递且具有高度容错性的一致性算法
- 解决的问题:快速、正确的在一个分布式系统中对某个数据值达成一致,并且保证不论发生任何异常,都不会破坏整个系统的一致性。
- 包括 提议者、接受者、学习者
ZAB 协议
- 借鉴了 Paxos 算法
- 是特别为 Zookeeper 设计的支持崩溃恢复的原子广播协议
- 只能有一个 Leader
- 两种模式:消息广播、崩溃恢复
- 两阶段提交:广播事务阶段、广播提交阶段
CAP 理论
- 一致性 Consistency
- 可用性 Available
- 分区容错性 Partition Tolerance
最多能同时满足两项,CP 或者 AP
Zookeeper 满足的是 CP,在极端情况下,Zookeeper 可能会丢弃一些请求。进行 Leader 选举时集群不可用。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。