ZooKeeper运维——数据备份与恢复(事务日志+快照日志,万字总结,你想要的都有

三、事务日志


ZooKeeper适合读多写少的场景,读操作几乎是内存级别的,这得益于ZooKeeper将数据保存在内存中。数据在内存中,就有一个问题,ZooKeeper重启了数据还会在吗?

当然在了,ZooKeeper将数据以事务日志形式持久化到文件中。每个更新请求,必须先将事务日志写到文件中,然后才把数据同步到内存数据库。

1、事务日志存放目录

事务日志文件默认存储在dataDir目录下,因为每次事务请求都是一次磁盘IO操作,事务日志的写入性能直接影响了ZooKeeper对事务请求的吞吐,为了更高的吞吐和低延迟,建议单独为事务日志配置一个目录dataLogDir,以免受其他操作影响。

dataLogDir下会先生成一个子目录version2,2表示ZooKeeper日志格式的版本号,同一版本的日志可以互相迁移恢复数据。version2下才是事务日志文件。

2、文件大小和后缀名

事务日志的文件有两个特点:

  • 文件大小出奇一致:都是67108880KB,即64MB

  • 文件名后缀是一串看似有些规律的数字,而且随着修改时间推移呈递增状态。

(1)磁盘空间预分配

文件大小都是64MB,是因为日志文件的磁盘空间预分配。

事务日志不断追加写入文件的操作会触发底层磁盘IO为文件开辟新的磁盘块,即磁盘Seek,为了避免频繁的文件大小增长带来的磁盘Seek开销,ZooKeeper在创建事务日志文件时就向操作系统预分配了一块比较大的磁盘块,保证了单一事务日志文件所占用的磁盘块是连续的,以此提升事务的写入性能。默认是64MB,空闲部分用空字符(\0)填充。

如果后续检测到文件空间不足4KB,将扩容再次预分配64MB,直到创建新的事务日志文件。

(2)ZXID作为后缀名

文件名后面的一串数字是事务ID:ZXID,并且是写入事务日志文件的第一条事务ZXID。前面讲了,ZXID高32位是当前Leader任期编号,低32位是事务计数器,比如 log.1400000001log.1400000003,都是Leader任期编号为20时产生的事务日志文件。

3、事务日志可视化

事务日志文件中存放的是二进制格式的数据,不能用vim、cat等工具直接打开,需要用apache-zookeeper-3.7.0提供的脚本bin/zkTxnLogToolkit.sh打开:

bin/zkTxnLogToolkit.sh logs/zoo-1/version-2/log.1400000003

事务日志可视化

一行就是一个事务记录,每行从左到右依次是操作时间、客户端session ID、CXID(客户端操作序列号)、ZXID、操作类型(做了什么),如果操作类型是 createSession,后面的30000就是session的超时时间。

4、相关配置项

跟事务日志有关的配置除了dataLogDir外,还有 preAllocSize

(1)dataLogDir

zoo.cfg中默认没有显式配置dataLogDir,事务日志和快照日志共享dataDir。但是强烈建议,单独为事务日志指定dataLogDir

事务日志记录对磁盘性能要求极高,为了保证数据一致性,ZooKeeper在返回客户端请求响应前,必须将本次请求对应的事务日志写入到磁盘中。因此,事务日志写入性能直接决定了ZooKeeper在处理事务请求时的吞吐。

针对同一块磁盘的其他并发读写操作(如ZooKeeper运行时日志输出和操作系统自身的读写等),尤其是数据快照操作,会极大影响事务日志的写性能。因此尽量给事务日志的输出配置一个单独的磁盘或是挂载点,极大提高ZooKeeper整体性能。

(2)preAllocSize

java 系统属性: ZooKeeper.preAllocSize,从字面意思就可以看出,preAllocSize是用来配置事务日志文件预先分配文件大小的参数。默认65536,单位KB,即64MB

5、什么时候创建新日志文件

在进行事务日志写入前,ZooKeeper会判断是否正在关联一个可写的事务日志文件,如果有则继续追加到该文件中,如果没有就需要创建新的日志文件并关联上。

什么时候ZooKeeper没有关联上一个可写的事务日志文件呢?有两种情况:

  • ZooKeeper停止会导致之前关联的事务日志文件断开,重启后第一次事务日志写入,需要创建新的日志文件。

  • 上一个事务日志文件写满了(达到阈值,触发了快照之后),需要创建新的日志文件。

需要注意ZooKeeper服务不要频繁重启,否则会产生很多日志文件,并且有些文件还没有写满,非常浪费磁盘空间。

四、快照日志


快照日志是将ZooKeeper服务器上某个时刻的全量内存数据,写入到指定磁盘文件中。可以这样理解,快照日志文件是存量数据,事务日志文件是增量数据,二者加起来就是最大限度的全量数据。

1、文件存储

和事务日志类似,快照日志存放在dataDir子目录version2中,文件名为snapshot.ZXID,不需要像事务日志文件一样预分配空间。

需要强调快照文件名后缀 ZXID是触发快照的瞬间,提交的最后一个事务ID。如果是事务ZXID5触发快照,那么快照文件名就是snapshot.ZXID5,快照之后的下一个事务的ID是ZXID6&

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Kafka和Zookeeper中,follower的作用不完全相同。 在Kafka中,follower是负责备份数据的角色。Kafka中的follower节点会从leader节点上复制数据,以实现数据的冗余备份。当leader节点出现故障时,一个follower节点可以被提升为新的leader,以保证服务的可用性。 在Zookeeper中,follower节点并不是备份数据的角色。Zookeeper中的follower节点是用来处理客户端请求的,它们需要与leader节点保持同步,以确保数据的一致性。如果leader节点挂掉,Zookeeper会从follower节点中选举出一个新的leader,以保证系统的正常运行。 因此,虽然Kafka和Zookeeper中都存在follower节点,但它们的作用是不同的。 ### 回答2: 在Kafka和Zookeeper中,follower的角色是不同的。 对于Kafka而言,follower是用于备份数据的。Kafka采用分布式的消息系统,数据分布在多个broker中,每个broker可以充当leader或follower。leader负责接收和处理消息的写入和读取请求,而follower则负责备份leader的数据。当leader发生故障或不可用时,follower可以接替成为新的leader,从而保证系统的高可用性和数据的持久性。当leader写入消息后,follower会通过复制机制将数据同步到自己的日志中,以备份leader数据。 而对于Zookeeper来说,follower不是用于备份数据的。Zookeeper是一个高性能的分布式协调服务,用于维护和管理集群状态。Zookeeper的工作原理是基于ZAB(Zookeeper Atomic Broadcast)协议的,其中包含leader和follower两个角色。leader负责处理客户端的请求,并将结果广播给所有的follower。而follower则负责接收并复制leader的消息,以保证数据的一致性。follower在这里的作用主要是作为leader的备份和支持角色,而不是备份Zookeeper中的具体数据。 综上所述,Kafka中的follower用于备份数据,而Zookeeper中的follower主要是作为leader的备份和支持角色,并不直接备份具体的数据。 ### 回答3: 在Kafka和ZooKeeper中,follower角色并不是用来进行备份数据的。 在Kafka中,follower用来复制leader的消息副本,以提供数据的冗余和可靠性。Kafka分为多个broker,每个broker可以充当leader或follower角色。leader是负责接收和处理消息的角色,而follower则是向leader复制消息的角色。同时,Kafka使用了分区(partition)的概念将数据分布到多个broker上,使得消息可以被并行处理。当leader发生故障时,follower会接管成为新的leader,确保系统的可用性和持久性。 而在ZooKeeper中,follower是参与实现一致性协议的角色,用来保持系统的可用性和一致性。ZooKeeper是一个分布式协调服务,用于存储和管理分布式应用程序的配置信息、元数据和状态。ZooKeeper通过选举机制选择一个leader来处理客户端请求,而其他节点则成为follower。当leader发生故障时,follower会通过选举重新选择出一个新的leader。follower在协助leader完成一致性协议的同时,还会作为备份节点存储数据。 因此,follower在Kafka中是用来复制消息副本以实现数据冗余和可靠性,而在ZooKeeper中是参与一致性协议的角色,并作为备份节点存储数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值