美文网首页Cache
Redis-如何持久化保证高可用

Redis-如何持久化保证高可用

作者: 夜阑人儿未静 | 来源:发表于2019-04-04 23:15 被阅读0次

RDB--备份数据库状态

Redis通过RDB(快照)完成持久化,即保存某个时间点的全量数据快照
save:阻塞Redis的服务器进程,知道RDB文件被创建完成
bgsave:Fork出一个子进程来创建RDB文件,不阻塞服务器进程,并且实现了Copy-on-Write
---可以通过定时脚本定时调用bgsave指令进行定期备份

redis.conf
配置快照频次

save 900 1             #900秒内如果超过1个key被修改,则发起快照保存
save 300 10           #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000
save ""                  #禁用RDB 

当备份进程出错,主进程停止接收新的写入操作--保护持久化数据一致性

stop-writes-on-bgsave-error  yes

备份是压缩rdb文件,建议关闭,redis是CPU密集型服务器,开启会带来更多的CPU的消耗

rdbcompression  yes

自动化触发RDB持久化的方式
根据redis.conf文件配置里的SAVE m n 定时触发(用的是BGSAVE)
主从复制时,主节点自动触发
执行Debug Reload
执行Shoutdown且没有启动AOF持久化

Copy-on-Write

fork()之后,kernel把父进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向父进程。当父子进程都只读内存时,相安无事。当其中某个进程写内存时,CPU硬件检测到内存页是read-only的,于是触发页异常中断(page-fault),陷入kernel的一个中断例程。中断例程中,kernel就会把触发的异常的页复制一份,于是父子进程各自持有独立的一份。

fork()和exec()

fork是类Unix操作系统上创建进程的主要方法。fork用于创建子进程(等同于当前进程的副本)。
exec函数则装载一个新的程序(可执行映像)覆盖当前进程内存空间中的映像,从而执行不同的任务。

缺点

内存数据全量同步,数据量大会因I/O而影响性能
可能会因为Redis挂掉而丢失从当前值最近一次RDB期间的数据

AOF(Append-Onli-File)--备份数据库接收到的指令

记录下除了查询意外的所有变更数据库状态的指令
以append的形式追加保存到AOF文件中(增量)

redis.conf

appendonly yes   #开启AOF备份

appendfsync  always       #总是写入aof文件,并完成磁盘同步
appendfsync  everysec   #每一秒写入aof文件,并完成磁盘同步
appendfsync  no              #写入aof文件,不等待磁盘同步

通过日志重写解决AOF文件大小不断增加问题
调用fork()创建子进程
子进程把新的AOF写到一个临时文件中,不依赖原文件
主进程持续将新的变动同时写入内存和原文件
主进程获取子进程重写AOF的完成信号,往新的AOF同步增量变动
使用新的AOF文件替换掉旧的AOF文件

Redis数据恢复
先判断AOF是否存在,若存在则直接加载AOF文件完成恢复,若不存在则加载RDB文件完成恢复

RDB与AOF优缺点

RDB

优点:全量数据快照,文件小,恢复快
缺点:无法保存最近一次快照后的数据

AOF

有点:可读性搞,适合保存全量数据,数据不易丢失
缺点:文件体积大,恢复时间长

Redis4.0后采用RDB-AOF混合持久化方式
BGSAVE做镜像全量持久化,AOF做增量持久化

相关文章

  • Redis-如何持久化保证高可用

    RDB--备份数据库状态 Redis通过RDB(快照)完成持久化,即保存某个时间点的全量数据快照save:阻塞Re...

  • 《全栈工程师修炼指南》学习笔记 18

    数据的持久化和一致性 可用性 保证服务对于客户端的可用。服务为了高可用,就要部署多个节点;数据为了高可用,就要存放...

  • Redis 持久化是如何做的?一文聊聊 RDB和AOF对比分析

    这篇文章我们来介绍Redis高可用相关的机制。Redis要想实现高可用,主要有以下方面来保证: 数据持久化 主从复...

  • redis 持久化策略

    企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...

  • Redis-持久化

    Redis-持久化 一、RDB持久化 为了解决服务器进程退出导致数据丢失,Redis提过了RDB持久化功能,可以将...

  • 深入学习Redis:主从复制

    在Redis的持久化中曾提到,Redis高可用的方案包括持久化、主从复制(及读写分离)、哨兵和集群。其中持久化侧重...

  • Redis-高可用

    主从复制 通过slaveof ip port 设置主从关系。 通过psync命令发送已经同步的信息(源id:run...

  • redis-高可用

    主从复制 完全是在从节点配置的,有3种方式(1)配置文件在从服务器的配置文件中加入:slaveof

  • redis-持久化

    ### 0 命令 #### 常用命令 [参考](https://blog.csdn.net/IT_faquir/a...

  • redis-持久化

    1、概述 redis支持两种持久化方式,rdb和aof。rdb是数据库某一时刻的快照,aof是Append Onl...

网友评论

    本文标题:Redis-如何持久化保证高可用

    本文链接:https://www.haomeiwen.com/subject/uimciqtx.html