Zookeeper简介
Zookeeper
zookeeper为分布式应用提供高效可靠的分布式协调服务,统一命名,配置管理和分布式锁等分布式基础服务。没有采用Paxos算法,而采用ZAB(zookeeper Atomic Broadcast)的一致性协议。
1、zookeeper是什么?
它是一个典型的分布式数据一致性的解决方案,分布式应用可以基于它实现,数据发布/订阅,负载均衡,命名服务,分布式协调/通知、集群管理、Master选举、分布式锁、和分布式队列等功能。
Zookeeper分布式一致性特性:
- 顺序一致性:客户端事务请求,会按照顺序严格执行。
- 原子性:只有成功失败,没有部分成功,部分失败的情况。
- 单一视图:客户端连接哪个服务器看到的数据模型都是一样的。
- 可靠性:服务端的状态变更被保留下来
- 实时性:一定时间段内,客户端最终能够从服务器上读取到最新的数据。
2、Zookeeper的设计目标
Zookeeper致力于提供一个高性能、高可用、具有严格顺序访问控制的能力的分布式协调服务。
设计目标:
- 简单的数据模型
- Zookeeper将全量数据存储在内存中,以此来实现提高服务器吞吐、减少延迟的目的。
- 可以构建集群
- 顺序访问
- 高性能:3台机器100%读请求压测结果是12-13W的QPS,
3、Zookeeper的基础概念
集群角色
传统的Master/Slave模式(主备模式),处理写操作的机器成为Master机器,异步复制方式获取最新数据,提供读服务的机器成为Slave机器。
Zookeeper引入了Leader、Follower、Observer三种角色。
集群通过选举程序选举一台机器为Leader服务器,为客户端提供读和写的服务,Follower和Observer都能提供读服务,但Observer不参与选举Leader的过程,也不参与写入操作的“过半成功”策略。
会话(Session)
- zk中,客户端连接是指客户端和服务器之间的一个TCP长连接。
- zk服务器端口默认为2181;
- 客户端启动时,会与服务器建立一个TCP连接,通过该连接,客户端通过心跳检测与服务器保持有效的会话,也能向zk服务器发送请求并接受响应,还能通过该连接接受服务器的Watch事件通知。
- Session的sessionTimeout值用来设置会话超时时间。只要不超过该时间,客户端无论什么原因断开重连,该会话仍然有效。
数据节点(Znode)
- 分布式中的节点通常指集群中的每一台服务器。
- zk中,集群中的机器成为机器节点;数据模型中的数据单元,成为数据节点–Znode。
- zk的所有数据都存储在内存中。
- Znode上保存数据内容和节点属性信息。
版本
zk会为每个Znode维护一个叫作Stat的数据结构,记录三个数据版本:
version:当前Znode的版本。
cversion:当前Znode子节点的版本。
aversion:当前Znode的ACL版本。
Watcher 事件监听器
zk允许用户在指定节点上注册一些Watcher,且在一些特定事件触发的时候,zk服务器会将事件通知到对应的客户端上。
该机制是zk实现分布式协调服务的重要特性。
ACL 权限控制
五种权限:
- CREATE:创建节点的权限。
- READ:获取节点数据和子节点列表的权限。
- WRITE:更新节点数据的权限。
- DELETE:删除子节点的权限。
- ADMIN:设置节点ACL的权限。