Zookeeper 分布式的服务框架,解决分布式集群中应用系统的一致性问题。
基于类似文件系统的目录节点树方式的数据存储
1. 维护和监控存储数据状态的变化
2. 通过监控数据状态的变化,达到基于数据的集群管理
Zookeeper通过一种和文件系统类似的层级命名空间,来让分布式进程协同工作。命名空间由数据寄存器(Znodes)组成
Zookeeper的数据是存储在内存中的
Zookeeper中的角色
- Leader 负责进行投票的发起和决议,更新系统状态
- Learner
2.1 Follower 接受客户请求,并向客户端返回结果
2.2 observer 接受客户端连接,将写入请求转发,Leader不参与投票,只同步Leader的状态
(observer的目的是为了扩展系统,提高读取速度) - Client 代表请求发送方
工作原理:原子广播(Zab协议)
Zab协议:
1. 恢复模式:(选主)服务启动或Leader奔溃
2. 广播模式:(同步)保证Leader与Server有相同的系统状态
3. 事务ID:Zxid epoch(高32位)逆增计数(低32位)【64位的数字】
每个Leader都有一个新的epoch表示当前属于哪一个Leader
- Server工作过程的三种状态:
LOOKING:不知道Leader是谁,正在搜索
LEADING:当前Server即为选举的Leader
FOLLOWING:Leader已选举出,当前Server与之同步