2023-08-12
原文作者:Ressmix 原文地址:https://www.tpvlog.com/article/207

上一章,我讲解了Redis的两种持久化方式的基本配置,那么在生产环境中,Redis的持久化到底该如何运用呢?企业级的数据备份和各种灾难下的数据恢复,又是怎么做的呢?

本章,我就通过实战演练,讲一讲企业级Redis灾备方案。

一、持久化配置策略

Redis的持久化配置,就两种——RDB和AOF,在生产环境配置下,主要就是关注它们的一些核心参数。我们来一一看下。

1.1 RDB

RDB的配置,用Redis默认提供的配置方案就够了,这里不再赘述。

1.2 AOF

生产环境,一定要把AOF持久化打开,持久化策略用默认的appendfsync everysec就可以了。

二、数据备份策略

我们知道,RDB非常适合做冷备,每次生成之后,就不会再有修改了。所以,一种最简单实用的数据备份方案就是利用crontab:

  1. 写crontab定时脚本做数据备份;
  2. 小时级备份:每小时复制一份RBD拷贝到某个目录中,该目录中仅保留最近48小时的备份;
  3. 日级别备份:每天复制一份当日的RBD拷贝到某个目录中,该目录中仅保留最近1个月的备份;
  4. 每天晚上将上述所有的数据备份,发送一份到远程的云服务上去。

我这里给出这些crontab的脚本,供大家参考。

2.1 小时级备份

脚本位置:/usr/local/redis/copy/redis_rdb_copy_hourly.sh
备份文件位置:/usr/local/redis/snapshotting/[当前小时]/

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

然后执行命令crontab -e,输入以下内容:

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

2.2 日级别备份

脚本位置:/usr/local/redis/copy/redis_rdb_copy_daily.sh
备份文件位置:/usr/local/redis/snapshotting/[当前日期]/

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

然后执行命令crontab -e,输入以下内容:

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

三、数据恢复策略

数据恢复分为很多种情况,我们先来看下各种情况下的恢复策略。

  1. Redis进程挂掉:重启Redis进程即可,直接基于AOF日志文件恢复数据,默认情况下最多丢失1s数据;
  2. AOF和RDB文件出现了丢失/损坏:从云端找一个最新的小时级RDB备份文件,复制到Redis的RBD目录中去,可以恢复到某一个小时的数据。

3.1 恢复步骤

由于Redis启动时默认优先从AOF文件恢复数据,所以如果直接将云端RDB文件拷贝到Redis目录下,很可能启动后是没有数据的。正确的操作步骤应该如下:

  1. 停止Redis;
  2. 修改配置文件,关闭AOF持久化,同时删除Redis的AOF日志文件;
  3. 拷贝RDB备份文件到Redis目录下,然后启动Redis;
  4. 通过redis-cli命令行config set appendonly yes 热修改启动AOF持久化,此时AOF日志文件中的数据就和RBD文件中的一致了;
  5. 最后,停止Redis,修改Redis配置文件,开启AOF持久化。

四、总结

本章,我主要介绍了生产环境的Redis灾备方案,核心是Redis的数据恢复步骤,基于RBD文件恢复Redis数据时,一定要记得先关闭掉aof持久化,因为Redis默认优先从AOF日志文件恢复数据。

阅读全文