Zookeeper-数据(log)和快照(snapshot)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

前面我们介绍介绍了几个常用的代理服务器,本章节我们讲来讲解Zookeeper这个中间件。

前面我们介绍了Zookeeper的事务日志(Txn Log)‌,那他在Linux里面究竟是什么样的呢?

默认我们未修改数据存储目录的情况下,这个目录/tmp/zookeeper/

#这只是个范例,现场环境不一样下面的数量不一定是一样的 
[root@localhost ~]# tree /tmp/zookeeper/
/tmp/zookeeper/
├── myid
├── version-2
│   ├── acceptedEpoch
│   ├── currentEpoch
│   ├── log.200000001
│   ├── log.500000001
│   ├── log.60000001a
│   ├── log.800000075
│   ├── log.900000001
│   ├── log.900000004
│   ├── log.900000006
│   └── snapshot.0
└── zookeeper_server.pid

1 directory, 12 files

myid:标识当前ZooKeeper节点的唯一ID(即myid)。

目录version-2:存储ZooKeeper的数据日志文件目录。

Epoch:简单理解就是前面提到选举的任期,在选举中有最高优先级,因为数据里面就包含它。

log.xxx:包含ZooKeeper的所有写操作记录。文件名中的数字表示事务ID(zxid)

事务日志,默认每个文件最大64M,如果leder完成切换,则会实现日志自动轮询。默认情况下,如果未达到快照触发,事务日志会会一直保留,避免出现快照未生成事务日志被删除的情况。

snapshot.x:快照文件,某个时间段完整的数据。

zookeeper_server.pid:记录ZooKeeper服务进程的PID(进程ID)。ZooKeeper重启脚本就依赖它。 

默认情况下事务日志和快照是在一个目录下的,但是生产环境建议用下面2个参数分开。​​​​​​​

dataDir=/data/zookeeper/snapshot  # 快照存储路径dataLogDir=/data/zookeeper/logs   # 事务日志存储路径(与快照分离)

前面提到的日志文件,是每一次写请求都会更新,而快照是ZooKeeper根据一定的规则达到一定的条件以后自动执行,那它的默认的规则是多少,如果要修改应该如何修改它。

1. 事务数量阈值(snapCount 参数)默认的指标是10w次事务日志才会触发一次快照,由于3个节点的事务是一样的。避免集群中所有节点同时生成快照(性能抖动),实际触发阈值在 [0.5 * snapCount, snapCount] 间随机选择。若 snapCount=100,000,节点可能在处理 50,000 ~ 100,000 次事务时触发快照,这样就可以规避掉执行快照带来的性能抖动。
2. 时间间隔(snapPeriodSec 参数)默认值snapPeriodSec=0(不启用时间触发)。若设置为正整数(如 3600),则每隔指定秒数强制生成快照,无论事务数量是否达标。

3. 快照的保留数量(autopurge.snapRetainCount):这个参数指定了在自动清理过程中要保留最近快照文件的数量。默认情况下,这个值设置为3,意味着Zookeeper会自动保留最新的3个快照,并删除任何更旧的快照。调整这个参数可以帮助管理磁盘空间使用,同时确保有足够的历史快照可用于数据恢复。

总结下来一个ZooKeeper的关于日志和快照合理的配置就会包含下面的参数:​​​​​​​

# 基础配置
dataDir=/data/zookeeper/snapshot  # 快照存储路径
dataLogDir=/data/zookeeper/logs   # 事务日志存储路径(与快照分离)

# 快照与日志参数
snapCount=100000                   # 每 10 万次事务生成快照
autopurge.snapRetainCount=5        # 保留最近 5 个快照
autopurge.purgeInterval=24         # 每日自动清理一次旧快照和日志
preAllocSize=65536                 # 事务日志预分配 64KB

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

zookeeper.service - Apache Zookeeper server Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2025-09-04 19:15:08 CST; 9s ago Docs: http://zookeeper.apache.org Main PID: 9026 (java) Tasks: 31 (limit: 4545) Memory: 66.1M CPU: 814ms CGroup: /system.slice/zookeeper.service └─9026 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=1> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,594] INFO The digest value is empty in snapshot (org.apache.zookeeper.server.DataTree) 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,635] INFO 139 txns loaded in 38 ms (org.apache.zookeeper.server.persistence.FileTxnSnapLo> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,635] INFO Snapshot loaded in 67 ms, highest zxid is 0x8b, digest is 303575219053 (org.apa> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,636] INFO Snapshotting: 0x8b to /log/zookeeper/version-2/snapshot.8b (org.apache.zookeepe> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,638] INFO Snapshot taken in 1 ms (org.apache.zookeeper.server.ZooKeeperServer) 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,643] INFO PrepRequestProcessor (sid:0) started, reconfigEnabled=false (org.apache.zookeep> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,644] INFO zookeeper.request_throttler.shutdownTimeout = 10000 ms (org.apache.zookeeper.se> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,669] INFO Using checkIntervalMs=60000 maxPerMinute=10000 maxNeverUsedIntervalMs=0 (org.ap> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,669] INFO ZooKeeper audit is disabled. (org.apache.zookeeper.audit.ZKAuditProvider) 9月 04 19:15:15 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:15,441] INFO Creating new log file: log.8c (org.apache.zookeeper.server.persistence.FileTxnL> ~ ~ ~ ~ lines 1-21/21 (END)
09-05
zookeeper.service - Apache Zookeeper server Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2025-09-04 19:15:08 CST; 1min 44s ago Docs: http://zookeeper.apache.org Main PID: 9026 (java) Tasks: 31 (limit: 4545) Memory: 66.1M CPU: 912ms CGroup: /system.slice/zookeeper.service └─9026 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.h> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,635] INFO 139 txns loaded in 38 ms (org.apache.zookeeper.server.persistence.FileTxnSnapLog) 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,635] INFO Snapshot loaded in 67 ms, highest zxid is 0x8b, digest is 303575219053 (org.apache.zookeeper.> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,636] INFO Snapshotting: 0x8b to /log/zookeeper/version-2/snapshot.8b (org.apache.zookeeper.server.persi> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,638] INFO Snapshot taken in 1 ms (org.apache.zookeeper.server.ZooKeeperServer) 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,643] INFO PrepRequestProcessor (sid:0) started, reconfigEnabled=false (org.apache.zookeeper.server.Prep> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,644] INFO zookeeper.request_throttler.shutdownTimeout = 10000 ms (org.apache.zookeeper.server.RequestTh> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,669] INFO Using checkIntervalMs=60000 maxPerMinute=10000 maxNeverUsedIntervalMs=0 (org.apache.zookeeper> 9月 04 19:15:09 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:09,669] INFO ZooKeeper audit is disabled. (org.apache.zookeeper.audit.ZKAuditProvider) 9月 04 19:15:15 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:15,441] INFO Creating new log file: log.8c (org.apache.zookeeper.server.persistence.FileTxnLog) 9月 04 19:15:28 lee-virtual-machine zookeeper-server-start.sh[9026]: [2025-09-04 19:15:28,470] INFO Expiring session 0x100003379920000, timeout of 18000ms exceeded (org.apache.zookeeper.server.> ~ ~ lines 1-21/21 (END)
最新发布
09-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值