-
重点:选举机制
当集群创建成功后,zookeeper集群中所有节点会进行选举, 选举出的主节点leader
选举端口号(3888),原则是1/2原则
主节点选举成功后,朱从节点之间会进行心跳检测
ticktime=2000(2秒)
主节点会开辟线程和从节点执行数据同步,主节点主要负责数据写入,从节点只负责读。
-
事务机制
元数据中含有每次数据发生更改的记录
cZxid = 0x100000002
ctime = Mon Aug 09 14:13:44 CST 2021
mZxid = 0x100000002
mtime = Mon Aug 09 14:13:44 CST 2021
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5 //该数据长度
numChildren = 0 //该节点是否含有子节点
-
顺序一致性
由于zookeeper有事务特性,都是基于半数理论不是强一致性,而是顺序一致性。
类:mysql主从结构 读binlog日志来完成同步,属于最终一致性。
-
存储
主节点存储数据在内存中,但是zookeeper提供了快照机制–持久化,定期将内存中的数据写入硬盘中 ,数据恢复是先读取快照,再进行事务回访,保证事务的完整性
类似于redis 中的RDB文件和AOF文件
-
存活机制
zookeeper主从之间进行心跳检测,发起tcp协议进行沟通当大多数节点ping不通主节点时,follower就会认为leader已经阵亡,重新发起选举。选举结束后,节点进入日志同步
-
关于同步方面:
- 从节点进行leader同步时会把<任期,当前最大日志>带给leader
- leader 会缓存一个自己已经最终提交的日志区间,有一个默认系数
(最小缓存日志ID,最大提交日志)
2.1:如果从节点小于最小缓存日志的ID,直接全量同步
2.2:如果在区间内就增量需要增量的部分
2.3:如果大于leader的最大提交日志,通知从节点移除超出部分