ZooKeeper提供了什么
1、文件系统 2、通知机制
能做什么
1、命名服务 2、配置管理 3、集群管理 4、分布式锁 5、队列管理
四种类型的znode
1、PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点 客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
持久节点:如 create /test/a “hello”,通过 create参数指定为持久节点 持久顺序节点:通过 create -s参数指定为顺序节点 临时节点:通过 create -e参数指定为顺序节点 临时顺序节点:通过 create -s -e参数指定为临时及顺序节点
Znode里面都存储了什么
Znode包含了存储数据(data)、访问权限(acl)、子节点引用(child)、节点状态信息(stat)
data: znode存储的业务数据信息 acl: 记录客户端对znode节点的访问权限,如IP等。 child: 当前节点的子节点引用 stat: 包含Znode节点的状态信息,比如事务id、版本号、时间戳等等。
Zookeeper通知机制
client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变等。
Zookeeper 的系统架构又是怎么样的
Zookeeper 集群中Server有三种角色,Leader、Follower 和 Observer
- Leader:负责投投票的发起与决议,更新系统状态,写数据
- Follower:用于接收客户端请求并用来返回结果,在选主过程中参与投票
- Observer:可以接受客户端连接,将写请求转发给leader节点,但是不参与投票过程,只同步leader状态,主要存在目的就是为了提高读取效率
将 server 分为三种是为了避免太多的从节点参与过半写的过程,导致影响性能,这样 Zookeeper 只要使用一个几台机器的小集群就可以实现高性能了,如果要横向扩展的话,只需要增加 Observer 节点即可。
Zookeeper 建议集群节点个数为奇数,只要超过一半的机器能够正常提供服务,那么整个集群都是可用的状态。
ZooKeeper 启动时,将从实例中选举一个 leader,Leader 负责处理数据更新等操作,一个更新操作成功的标志是当且仅当大多数 Server 在内存中成功修改数据。每个 Server 在内存中存储了一份数据。
Zookeeper 的数据一致性是依靠ZAB协议完成的。
ZAB 协议
ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为 ZooKeeper 特殊设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
ZAB 协议包括有两种模式,分别是 崩溃恢复和消息广播。
消息广播:当集群中已经有过半的 Follower 服务器完成了和 Leader 服务器的状态同步,那么整个服务框架就可以进人消息广播模式了。当一台同样遵守 ZAB 协议的服务器启动后加人到集群中时,如果此时集群中已经存在一个 Leader 服务器在负责进行消息广播,那么新加人的服务器就会自觉地进人数据恢复模式:找到 Leader 所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。ZooKeeper 设计成只允许唯一的一个 Leader 服务器来进行事务请求的处理。Leader 服务器在接收到客户端的事务请求后,会生成对应的事务提案并发起一轮广播协议;而如果集群中的其他机器接收到客户端的事务请求,那么这些非 Leader 服务器会首先将这个事务请求转发给 Leader 服务器。
崩溃恢复:当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进人恢复模式并选举产生新的 Leader 服务器。当选举产生了新的 Leader 服务器,同时集群中已经有过半的机器与该 Leader 服务器完成了状态同步之后,ZAB 协议就会退出恢复模式。剩下未同步完成的机器会继续同步,直到同步完成并加入集群后该节点的服务才可用。
|