zookeeper基本概念

10月 27, 2015 |

leader选举
一个server启动后,会向集群中的其他server发送一个选举它自己为leader的通知,如果集群中已经有leader,那么其他server会告诉它应该follow现有的leader,如果没有leader,会按照epoch,zxid, sid来选举一个leader,当然采用过半原则。
zab协议:
当集群中的某个server收到写操作时,会将这个操作forward给leader,leader会先发送一个写数据的提议(proposal),如果有过半的服务器应答了这个提议,那么就发送一个提交(commit)指令,来真正地持久化这个事务。
session管理:
zookeeper采用bucket策略来管理session,使用如下的策略(expirationTime / expirationInterval + 1) * expirationInterval, 将一个时间段内过期的session放入一个bucket中,这样可以一次清理一个时间段内的session,减少清理session的额外开销
数据与存储:
当有写操作时,zookeeper会写事务日志(log.400000001,这种文件),在一定的时间间隔后,还会将内存的数据dump到磁盘,产生(snapshot.10000c85d文件),当一个新的server加入集群的时候,如果它的事务记录不是落后leader太大,那么就执行DIFF同步,只同步缺少的事务日志记录,如果落后太多,那么就使用SNAP模式,先同步一个最新的snapshot,然后再应用事务日志。
Observer
不参与提议的讨论,只学习提议的结果,通过INFORM消息同步数据,follower需要先应答leader的提议(proposal)然后处理leader发送的commit两个指令同步数据

Posted in: Zookeeper

Comments are closed.