持久化方案

持久化方案 - 图1


注意事项

aof 破损修复

  • 在 redis append 数据到 AOF 文件出现错误,会导致 AOF 文件破损
  • redis-check-aof --fix 使用工具来来修复破损的AOF文件

aof 和 rdb 同时工作

  1. redis 自己触发的 RDB snapshotting 操作和 AOF rewrite 操作不会同时执行就不会执行 RDB snapshotting
  2. 如果 RDB 在执行 snapshotting ,此时用户执行 BGREWRITEAOF 命令,那么用户触发的 AOF rewrite 操作会堵塞到 RDB快照 生成之后执行

持久化故障恢复过程

  • 默认

redis 启动
存在 AOF? —-存在—-> 加载 AOF -> 启动成功或失败
| ^
不存在 |
| |
存在 RDB? ——-存在——> 加载 RDB————|
| |
不存在 |
| |
—————————————————————-

  • 开启了混合持久化(aof-use-rdb-preamble),直接读取 appendonly.aof 进行数据重放 反正也是优先 aof 数据重放

容灾备份方案

RDB非常适合做冷备,每次生成之后,就不会再有修改了
数据备份方案
(1)写crontab定时调度脚本去做数据备份
(2)每小时都copy一份rdb的备份,到一个目录中去,仅仅保留最近48小时的备份
(3)每天都保留一份当日的rdb的备份,到一个目录中去,仅仅保留最近1个月的备份
(4)每次copy备份的时候,都把太旧的备份给删了
(5)每天晚上将当前服务器上所有的数据备份,发送一份到远程的云服务上去

每小时copy一次备份,删除48小时前的数据

crontab

  • crontab 编辑定时任务

    crontab -e

  • 内容, 每小时执行一次任务

    0 sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

shell 脚本

redis_rdb_copy_hourly.sh

  1. #!/bin/sh
  2. cur_date=`date +%Y%m%d%k`
  3. rm -rf /usr/local/redis/snapshotting/$cur_date
  4. mkdir /usr/local/redis/snapshotting/$cur_date
  5. cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
  6. del_date=`date -d -48hour +%Y%m%d%k`
  7. rm -rf /usr/local/redis/snapshotting/$del_date

每天copy一次备份,删除一个月前的数据

crontab

  • crontab 编辑

    crontab -e

  • 内容,每天执行一次脚本

    0 0 * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh

shell 脚本

redis_rdb_copy_daily.sh

  1. #!/bin/sh
  2. cur_date=`date +%Y%m%d`
  3. rm -rf /usr/local/redis/snapshotting/$cur_date
  4. mkdir /usr/local/redis/snapshotting/$cur_date
  5. cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
  6. del_date=`date -d -1month +%Y%m%d`
  7. rm -rf /usr/local/redis/snapshotting/$del_date

每天一次将所有数据上传一次到远程的云服务器上去

  • todo