Zookeeper学习小总结
zookeeper是什么:
zookeeper = 文件系统 + 通知机制
Zookeeper数据结构:
类似于unix文件系统:树状的
Zookepper特点:
- 一个Leader,多个Follower组成的集群
- 半数集群存活,Zookeeper集群就能正常服务,适合部署奇数台服务器
- 数据一致性,每个Server保存一份相同的数据副本,Client无论连接哪个Server,数据都是一致的(顺序一致性,最终一致性)
- 数据更新原子性
- 更新请求顺序执行
- 实时性
Zookeeper命令集合:
服务端:
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 /sanguo
Zookeeper选举机制:
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接收到自己的事务