您现在的位置是:首页 >技术杂谈 >Zookeeper网站首页技术杂谈

Zookeeper

三毛啦啦啦 2024-07-19 00:01:01
简介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 选举时集群不可用。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。