一、日志压缩
-
在实际的系统中,不能让日志无限增长。Raft采用对整个系统进行snapshot来解决,snapshot之前的日志都丢弃。
-
每个副本独立的对自己的系统状态进行snapshot,并且只能对已经提交的日志记录进行snapshot。
二、Snapshot中包含以下内容
-
日志元数据
-
最后一条已提交的log entry的log index和term。
- 这两个值在snapshot之后的第一条log entry的AppendEntries RPC的完整性检查的时候会被用上。
-
系统当前状态。
三、发送快照的时机
- 当Leader要发给某个日志落后太多的Follower的log entry被丢弃,Leader会将snapshot发给Follower。
- 当新加进一台机器时,也会发送snapshot给它。
- 发送snapshot使用InstalledSnapshot RPC。
四、快照注意点
- 做snapshot不要做的太频繁,会消耗磁盘带宽
- 做snapshot不要太不频繁,否则一旦节点重启需要回放大量日志,影响可用性。
- 推荐当日志达到某个固定的大小做一次snapshot。
- 做一次snapshot可能耗时过长,会影响正常日志同步。
- 可以通过使用copy-on-write技术避免snapshot过程影响正常日志同步。