2023-08-12  阅读(49)
原文作者: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日志文件恢复数据。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文