zookeeper = 文件系统 + 通知机制
Zookeeper数据结构: 类似于unix文件系统:树状的
Zookepper特点:- 一个Leader,多个Follower组成的集群
- 半数集群存活,Zookeeper集群就能正常服务,适合部署奇数台服务器
- 数据一致性,每个Server保存一份相同的数据副本,Client无论连接哪个Server,数据都是一致的(顺序一致性,最终一致性)
- 数据更新原子性
- 更新请求顺序执行
- 实时性
服务端: bin/zkServer.sh start 开启 bin/zkServer.sh satus 状态 bin/zkServer.sh stop 停止 客户端: bin/zkCli.sh server - 客户端连接指定的端口 help ls create /sanguo "liubei" -e:短暂节点 -s:带序号 get -s /sanguoZookeeper选举机制:
Epoch的作用:防止老的leader复活后重新成为leader
Zookeeper监听机制:https://www.cnblogs.com/jxwch/p/6526271.html
ZAB协议:
个人理解:
消息广播:类似于二阶段提交协议,但是只要完成了一半的提交,第一阶段proposal,有一半的ack,就可以commit。
崩溃恢复:
两种情况:1.提议后,未提交,leader挂了
2.提交后,leader挂了
要做到: 1. 提议后未提交->杀死
2.提交后->必提交
所以有两部:
1)选举
1.没有未提交事务的。- 保证不会提交未提交事务。
2.选一个zxid最大的。 - 不用检查Proposal的提交和丢弃工作—当然不用检查了,zxid最大又没有未提交事务。
2)同步
1.确认自己所有的已提交的Proposal被过半的服务器Commit
2.要确认Follower接收到自己的事务



