第四行:15-8-12 下午04时15分56秒 session 0x14f20ea71c10000 cxid 0x0 zxid 0x3 closeSession null
这里是说xxx时间有一个sessionid为0x14f20ea71c10000、cxid为0x0、zxid为0x3、类型为closeSession
快照文件的处理在FileSnap类中,与事务日志文件一样快照文件也一样有SNAP_MAGIC、VERSION、dbId这些,这作用也只是用来标识这是一个快照文件;Zookeeper的数据在内存中是以DataTree为数据结构存储的,而快照就是每间隔一段时间Zookeeper就会把整个DataTree的数据序列化然后把它存储在磁盘中,这就是Zookeeper的快照文件,快照文件是指定时间间隔对数据的备份,所以快照文件中数据通常都不是最新的,多久抓一个快照这也是可以配置的snapCount配置项用于配置处理几个事务请求后生成一个快照文件;
与事务日志文件一样快照文件也是使用ZXID作为快照文件的后缀,在FileTxnSnapLog类中的save方法中生成文件并调用FileSnap类序列化DataTree数据并且写入快照文件中;
1.2 快照文件目录
快照文件可视化
与日志文件一样Zookeeper也为快照文件提供了可视化的工具org.apache.zookeeper.server包中的SnapshotFormatter类,接下来就使用该工具输出该事务日志文件,并解释该数据;
SnapshotFormatter工具的使用方法: java -cp ../../zookeeper-3.4.6.jar;../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.17
快照分析
快照文件就很容易看得懂了,这就是Zookeeper整个节点数据的输出;
第一行:ZNode Details (count=11):
ZNode节点数总共有11个
/cZxid = 0x00000000000000
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x00000000000000
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x00000000000016
cversion = 7
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x00000000000000
dataLength = 0
这么一段数据是说,根节点/:
cZxid:创建节点时的ZXID
ctime:创建节点的时间
mZxid:节点最新一次更新发生时的zxid
mtime:最近一次节点更新的时间
pZxid:父节点的zxid
cversion:子节点更新次数
dataVersion:节点数据更新次数
aclVersion:节点acl更新次数
ephemeralOwner:如果节点为ephemeral节点则该值为sessionid,否则为0
dataLength:该节点数据的长度
快照文件的末尾:
Session Details (sid, timeout, ephemeralCount): 0x14f211584840000, 4000, 0 0x14f211399480001, 4000, 0
这里是说当前抓取快照文件的时间Zookeeper中Session的详情,有两个session超时时间都是4000毫秒ephemeral节点为0;
Ubuntu 14.04安装分布式存储Sheepdog+ZooKeeper
CentOS 6安装sheepdog 虚拟机分布式储存