作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
前面我们介绍介绍了几个常用的代理服务器,本章节我们讲来讲解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
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。