zookeeper
- 解决分布式系统数据一致性
– 多节点一致性
– 有leader
– 以树状结构存储
– 当一台机器挂掉之后,在服务恢复后会自动从leader自动同步数据·一个node默认存储1MB
– 写硬盘日志,在写内存
– 最终一致性
- leader选举 (选举时服务器状态:looking)
选自己
选强者,谁的数据最新.
事务ID(zxid)最大
如果zxid,选myid最大(conf里配的serverId)- 选举时机:(选举期间不能对外提供服务)
- 集群启动,每个节点的myid为自己(相当于第一次都投给自己),zxid一致,各节点之间交换投票数据,选举myid最大的,然后根据过半机制,选举出leader
- Leader挂了
- Follower挂掉,Leader发现于过半的Follower失去链接,重新选举。
- 选举时机:(选举期间不能对外提供服务)
- 过半机制
Follower/2 - 预提交,收到ask,提交(二次提交)
- Leader收到一个事务请求,先把事务日志发送给所有Follower
- Follower收到事务日志后,返回给Leader一个ask
- Leader收到过半的ask后,给所有Follower发送commit命令
备注: 如果Follower接收到事务请求,会转发给Leader处理
- Observer
集群中,如果机器特别多,读的效率会特别高,因为读请求是不需要转发给Leader,但是如果机器多了,会影响写请求的效率,因为涉及到过半提交。
所以会有一个Observer,该节点只会处理客户端的读请求,并且定时从Leader同步数据,增加读取速度