redis持久化与恢复
所属分类 redis
浏览量 1330
两种持久化方式 RDB AOF
由于实时性 ,目前 AOF 用的比较多,恢复优先使用 AOF。
RDB是旧的模式,现在基本上使用 AOF
RDB 特点:
1 RDB 是一种快照模式,保存的是 key value 数据内容。
2 有2方式,同步 save 模式和异步 bgsave 模式。save可以保证数据一致性,而 bgsave 不能。
3 save 触发时机:客户端显式触发,shutdown自动触发; bgsave 客户端显式触发,配置由定时任务触发,在 slave 节点触发。
4 save 导致 redis 同步阻塞,基本已经废弃。bgsave 不会导致阻塞,但有缺点:fork 时,内存开销大增,内存不够时,将使用虚拟内存,导致阻塞,所以,需要保证空闲内存足够。
5 shutdown 时,如果没有开启 AOF,则自动执行 bgsave。
6 每次的 RDB 文件都是替换的。
使用 LZF 算法 压缩 RDB,默认开启,会消耗cpu
RDB 缺点
1 无法秒级持久化。
2 新老版本 RDB 文件不兼容。
RDB 优点
1 文件紧凑,适合备份,全量复制场景。例如每 6 小时执行 bgsave进行备份。
2 加载 RDB 恢复数据远远快于 AOF。
AOF 特点
1 默认文件名 appendonly.aof。和 RDB 一样,保存在配置的目录下。
2 每次都会保存写命令,数据实时性高。
3 每次都会记录写命令,文件会很大,因此需要进行优化(重写机制)。
4 每次保存的写命令都放在一个缓冲区,根据不同的策略同步到磁盘 。
缓冲区同步策略,由参数 appendfsync 控制,3种
1 always:调用系统 fsync 函数,直到同步到硬盘返回,严重影响redis性能。
2 everysec:先调用 OS write 函数, 写到缓冲区,然后 每秒执行一次 OS fsync 函数。 推荐使用这种方式。
3 no: 只执行 write OS 函数,具体同步硬盘策略由 OS 决定,不推荐,数据不安全,容易丢失数据。
重写机制
1 fork 子进程(类似 bgsave)
2 主进程写入2个缓冲区,原有的 缓存区,专门为子进程准备的重写缓冲区
3 子进程写入新的 AOF 文件中,批量 默认 32m,写完后通知主进程。
4 主进程把重写缓冲区的数据写到新 AOF 文件中。
5 将新的 AOF 文件替换老文件。
恢复过程
优先加载 AOF,当没有 AOF 时才加载 RDB。当 AOF 或者 RDB 存在错误,则加载失败。
性能优化要点
RDB 或者 AOF 重写时,需要进行 fork 操作,这是一个重量级操作。
fork会拷贝一些数据,虽然不会拷贝主进程所有的物理空间,但会复制主进程的空间内存页表。
对于 10GB 的 Redis 进程,需要复制大约 20MB 的内存页表,因此 fork 操作耗时跟进程总内存量息息相关
一个正常的 fork 耗时大概在 20毫秒左右。
可以在 Info stats 统计中查询 latestforkusec 获取最近一次 fork 操作耗时,单位微秒。
优化措施
1 优先使用物理机或者高效支持 fork 的虚拟化技术,避免使用 Xen。
2 控制 redis 实例最大内存,尽量控制在 10GB 以内。
3 合理配置 Linux 内存分配策略,避免内存不足导致 fork 失败。
4 降低 fork 频率,如适度放宽 AOF 自动触发时机,避免不必要的全量复制。
子进程通过 fork 操作产生,占用内存大小等同于父进程,理论上需要两倍的内存完成持久化操作,
但 Linux 有 copy on write 机制,父子进程会共享相同的物理内存页,
当父进程处理写操作时,会把要修改的页创建对应的副本,而子进程在 fork 操作过程中,共享整个父进程内存快照。
AOF 重写时会消耗大量硬盘 IO,可以开启配置 no-appendfsync-on-rewrite,默认关闭。
表示在 AOF 重写期间不做 fsync 操作。
使用 SSD 代替机械硬盘
单机配置多个 Redis 实例 ,配置不同实例分盘存储 AOF 文件
开启 AOF 持久化时,常用的同步硬盘的策略是 everysec(每秒同步),用于平衡性能和数据安全性,
对于这种方式,redis 使用另一条线程每秒执行 fsync 同步硬盘,当系统资源繁忙时,将造成 Redis 主线程阻塞。
如果系统 fsync 缓慢,将会导致 Redis 主线程阻塞影响效率。
发生 AOF 阻塞时,会输入日志。用于记录 AOF fsync 阻塞导致拖慢 Redis 服务的行为。
每当 AOF 追加阻塞事件发生时,在 info Persistence 统计中,aofdelayedfsync 指标会累加,查看这个指标方便定位 AOF 阻塞问题。
AOF 同步最多运行 2 秒的延迟,当延迟发生时说明硬盘存在性能问题,可通过监控工具 iotop 查看,定位消耗 IO 的进程。
性能问题检查点
fork 耗时
子进程 CPU,内存,硬盘开销
AOF 同步阻塞
单机多实例部署
上一篇
下一篇
aerospike工具aql
监控系统相关资料整理
gossip简单介绍
OpenTracing入门
kubernetes2018
开源监控系统介绍