————————————————
什么时候新建日志文件:
1、在进行事务日志写入之前,zookeeper会判断是否正在关联一个可写的事务日志文件,如果有则继续追加,如果没有就新建日志文件并管理上
2、上一个日志文件写满了
————————————————
什么时间触发快照:
1、事务日志写入数量达到阈值,每进行一次事务日志记录后,zk都会判断当前是否需要进行数据快照
采用过半随机策略,事务次数在[ snapCount/2 + 1,snapCount ]范围内生成的随机值时,触发数据快照
2、新leader同步数据
如果发生Leader重新选举,新Leader所在机器会检查最近一次快照之后是否有事务日志产生,
有就对最近的一次事务之前的全量数据做一次数据快照
————————————————
事务日志可视化:
./zkTxnLogToolkit.sh ../logs/version-2/log.100000001
包含了session id、cxid(客户端操作序列号)、zxid、操作类型
快照日志可视化:
./zkSnapShotToolkit.sh ../data/version-2/snapshot.0
内容包含以下信息:
cZxid 创建这个节点时的事务ID
ctime 创建节点时间
mZxid 最后修改节点的事务ID
mtime 最后修改节点时间
pZxid 该节点最后更新子节点列表的事务ID
cversion 该节点子节点列表更新版本号,即子节点列表修改次数(不是子节点的值修改)
dataVersion 节点数据版本号
aclVersion 节点访问控制列表版本号
ephemeralOwner 如果为临时节点,则为节点拥有者的sessionID,如果不是临时节点则为0
dataLength 节点数据长度
————————————————
ZooKeeper启动数据初始化和同步:
ZooKeeper 服务器启动期间,需要进行数据初始化工作,就是将磁盘中的日志文件加载到ZooKeeper服务器内存中,主要包括两个过程:从快照日志文件中加载快照数据和根据事务日志进行数据修正。
为什么需要快照日志:
事务日志存的是增量数据
快照日志存的是某个时刻的全量数据
二者合二为一就是最大限度的全量数据
————————————————
数据备份策略:
防止日志文件损坏,可全量备份,开启日志清理后,至少保留3个快照文件
备份时间,一天一备,一小时一备,时间越短数据越新,异地备份,应该把精力放在数据恢复上
数据恢复
恢复数据分为了两种:冷恢复和热恢复
冷恢复就是通过备份的日志文件在 ZooKeeper 启动时初始化和同步,适用于当前集群故障,无法通信的场景
热恢复就是动态的将当前集群的数据同步到目的集群上,前提是当前集群是正常运行,可通信的
如何动态同步,可以利用 Observer 机制.将目的集群中的一个服务设置成当前集群的 Observer,
当前集群的Leader就会把数据动态同步给 Observer了,然后再将目的集群配置启动,
让这个Observer成为目的集群的 Leader 即可.
也可以将目的集群的所有服务都作为当前集群的Observer,可能会消耗一些当前集群 Leader的一些性能,以实际生产情况为准。
使用日志文件恢复数据需要注意,先把目的集群的日志文件清空
(删除 dataDir/version2 和 dataLogDir/version2 )
,将备份日志文件复制到集群中的某个服务即可,目的集群重启后,有备份日志文件的服务将成为 Leader,然后同步数据给 Follower.
前提:目的集群是一个新集群。
如果目的集群是一个已经在用的集群,就不能用日志文件恢复了,需要遍历原集群的数据,然后一条一条地写入到目的集群,该方式消耗性能较大,可能会影响目的集群的正常使用。该方式还有一个缺点就是原集群的 客户端会话不会同步,而日志文件恢复是可以的。
————————————————
Observer 介绍
在 ZooKeeper 集群服务运行的过程中,Observer 服务器与 Follow 服务器具有一个相同的功能,
那就是负责处理来自客户端的诸如查询数据节点等非事务性的会话请求操作.
但与 Follow 服务器不同的是,Observer 不参与 Leader 服务器的选举工作,也不会被选举为Leader服务器
在zoo.cfg配置文件中设置observer
peerType=observer