Title

zookeeper概念

zookeeper概念

zookeeper 是个分布式协调服务的开源框架,解决分布式集群中应用系统的一致性问题

避免同时操作同一数据造成脏读问题

zookeeper 本质是一个分布式的小型文件存储系统,提供类似文件系统的目录树方式进行数据存储,并且对树中的节点进行有效管理,维护存储数据的状态变化

可以做基于数据的集群管理,如:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等功能

 

zookeeper 特性

  1. 全局数据一致性
  2. 可靠性,消息被一台服务器接收,其他机器上的节点也会接收(删除一个节点的数据,其他节点也被删除该数据)
  3. 顺序性: 一台服务器中 a消息在 b之前发布,其他所有server 的a,b顺序也必须是 a在 b前
  4. 数据更新原子性: 有要吗成功(半数以上节点成功),要吗失败,没有中间状态
  5. 实时性: zookeeper 保证客户端在一个时间间隔内获得服务器更新信息,或者服务器失效信息

 

 

 

事务请求(写操作): 用 leader进行调度处理,保证事务处理的顺序性;

集群内部的各个服务的调度者:对于 create,setData,delete等写操作,转发给 leader,由leader决定编号,执行操作,这个过程叫做一个事务

 

follower:

处理客户端的非事务(读操作)请求,转发事务请求给 leader

参与集群 leader的选举投票

 

如果某个 leader挂了,或者加入一个新的节点,就会投票选举一个新的leader

 

有3种角色:

  1. leader
  2. follower
  3. Observer(观察者)

当访问量比较大的话,可以加入观察者进行横向扩展, 它不会参与任何形式的投票,只是提供非事务的服务,不影响集群事务处理能力的前提下,提升集群处理非事务处理的能力

客户端的响应会更加友好

 

zookeeper集群的搭建

zookeeper 集群搭建指的是zookeeper分布式模式的安装,通常由 2*N+1 台 servers组成,这是为了保证leader的选举(基于 paxos算法的实现

    关于 paxos算法 [ https://blog.csdn.net/u013679744/article/details/79222103 ]

    

 

 

 

Session 会话: 客户端会话,客户端和服务端建立一个 TCP 长连接 org.apache.zookeeper.ClientCnxn

 

zookeeper数据结构

状态属性

说明

czxid

节点创建时的zxid

mzxid

节点最新一次更新发生时的 zxid

ctime

节点创建时的时间戳.

mtime

节点最新一次更新发生时的时间戳.

dataVersion

节点数据的更新次数.

cversion

其子节点的更新次数

aclVersion

节点 ACL(授权信息)的更新次数.

 

ephemeralOwner

如果该节点为 ephemeral 节点, ephemeralOwner 值表示与该节点绑定的 session id. 如果该节点不是 ephemeral 节点, ephemeralOwner 值为 0. 至于什么是 ephemeral 节点

dataLength

节点数据的字节数.

numChildren

子节点个数.

  
  
  

 

顺序号:

创建znode 时设置顺序标识,znode名称后会附加一个值

顺序号是一个单调递增的计数器,由父节点维护

在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

 

控制访问列表: ACL( Access control list)

org.apache.zookeeper.ZooDefs

内置的 ACL schemes:

world: 默认方式,相当于全世界都能访问

auth: 代表已经认证通过的用户(cli中可以通过 addauth digest user:pwd 来添加当前上下文中的授权用户)

digest: 即用户名: 密码这种方式认证,这也是业务系统中最常用的

ip: 使用 ip地址认证

acl支持权限:

create: 能创建子节点

read: 能获取节点数据和列出其子节点

write: 能设置节点数据

delete:能删除子节点

admin: 能设置权限

 

 

 

 

 

Leader 选举:

looking,following ,leading ,observing

 

cap理论:

 

分布式领域 CAP 理论

Consistency(一致性), 数据一致更新,所有数据变动都是同步的;

Availability(可用性), 好的响应性能;

Partition tolerance(分区容忍性) ;可靠性

 

定理:任何分布式系统只可同时满足二点,没法三者兼顾

 

一致性协议 :

BASE/Paxos/Raft/zab 等协议

 

zab算法: https://www.jianshu.com/p/400a44edee88

 

 

 

 

 

 

 

 

     

posted @ 2020-03-14 18:06  .geek  阅读(283)  评论(0编辑  收藏  举报