Zookeeper简介、应用和实践

Zookeeper 协议

简介:分布式协调服务,提供诸如统一命名、配置管理等基础服务
越来越多的分布式应用面临数据一致性问题,Zookeeper的设计目标是将那些复杂且容易出错的分布式一致服务封装起来,构建一个高效可靠的原语集,并以一系列简单可用的接口提供给用户使用

设计目标:

  • 简单的数据模型
  • 可构建集群
  • 顺序访问
  • 高性能

基础概念:

  • 集群
  • 会话
  • Znode
  • 版本
  • Watcher
  • ACL create read write delete admin

Zookeeper简单应用场景

  • redis 服务发现和治理
    在redis实际应用中,一般会有一个主节点redis,几个从属节点redis。
    主节点处理用户写请求,从节点向主节点同步数据,处理用户读的请求。

当主节点故障的时候,从节点会通过raft算法选举出新的主节点处理用户写请求。

问题产生:如何在主服务器变更后,更新项目redis读写配置?

原始做法: 修改项目代码里面的redis地址和端口,然后上传代码,再重新部署

Zookeeper解决方法:通过zookeeper监控主从服务器变动,在项目里面引入zookeeper客户端,当主服务器变更的时候,zookeeper客户端会收到通知,在通知回调里,我们可以收到新的主节点地址和端口,根据他写一段redis重启代码,这样就避免了服务器重启

Zookeeper 使用和API

创建 create(final String path, byte data, List acl, CraeteMode createMode)
读取 getChildren(path, watcher, watch, cb, ctx, stat) getData(path, watcher, stat, watch, cb, ctx)
更新 setData(path, data, version)
删除 delete (path ,version)
判断节点是否存在 exists(path, watcher)

ZAB协议

ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议
ZAB不像Paxos算法那样是一种通用的分布式一直算法,他是一种特别为Zookeeper设计的崩溃可恢复的原子广播算法

  • 主备模式,单一主进程处理事务
  • 全局的变更时序,也就是说如果一个状态更新已经发生了,那么所有其依赖的状态变更都应该被提前处理了
  • 支持崩溃恢复

Zookeeper两种基本模式,崩溃恢复和消息广播,还有一种数据恢复模式
Leader服务器收到事务,转化成Proposal,Follow服务器收到事务,转发给Leader

消息广播

类似二阶段提交
区别在于移除了中断逻辑,所有的Follower要么正常反馈Leader提出的事务Proposal,要么抛弃Leader服务器。所以这意味着

  • Leader收到过半的Ack就可以Commit了,不需要等所有的回复
  • 无法处理Leader奔溃退出带来的数据不一致

基于TCP协议,可以做到FIFO
Leader会为每个Proposal分配一个ZXID

Leader为每一个Follower保存一个队列,发送Proposal,然后Follow保存事务日志到磁盘,然后回复ACK,Leader收到过半ACK后广播Commit,然后Follow提交Commit

崩溃恢复

ZAB保证如果一个事务的Proposal在一台机器上被处理成功,那么应该在所有的机器上都处理成功,两种特征

  • ZAB协议需要确保已经在Leader服务器上确认的事务最终被所有的服务器都提交
  • ZAB协议需要确保丢弃那些只在Leader服务器上被提出的事务

谁是Leader:让所有机器中拥有最高的Proposal ZXID的Follower做Leader
步骤分成三步:发现、同步、广播

  • 步骤 F.1.1 Follower F 将自己最后接受的事务Proposal的epoch值CEPOCH(Fp)发送给准Leader L
  • 步骤 L.1.1 当接受到来自过半Follower发送的CEPOCH值后,准Leader发送NEWEPOCH(e’)给过半的Follower
  • 步骤 F.1.2 赋值并且发送ACK(当前Follower的事务集合)
  • Leader选出一个覆盖最全面的Proposal组合

同步阶段

  • 将最全面的Proposal组合同步给所有的Follower
    广播阶段

e为主进程序列号也是主进程周期

Zookeeper 应用场景

数据发布、订阅

  • 实现配置信息的集中式管理和数据的动态更新
  • 应用:数据库、机器列表、选项开关
    负载均衡 DDNS
  • 本地host
  • 全自动的dns,消费者和服务者、注册中心、检测中心
    命名服务
  • 全局唯一ID,mysq auto increment 单机有效,UUID太长、含义不明
  • 用创建顺序节点的方式实现
    分布式协调通知
  • 任务调度
    Master选举
    分布式锁
    分布式队列

在我们系统中的应用

数据库等信息的配置
服务地址的配置
分布式锁

你可能感兴趣的:(Zookeeper简介、应用和实践)