【Redis 神秘大陆】006 灾备方案

六、Redis 灾备方案

6.1 存储方案

6.1.1 基础对比

RDB持久化AOF持久化
原理周期性fork子进程生成持久化文件每次写入记录命令日志
文件类型二进制dump快照文件文本appendonly日志文件
触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次
文件位置配置文件中指定目录日志文件appendonly.aof
写入方式fork后子进程同步写快照,对读写性能影响小,速度高每次写入追加日志
文件格式RDB二进制密集结构AOF日志易读文本格式
数据一致性快照间隔时间内可能丢失部分写实时写入保证数据完整性
故障恢复直接加载快照文件重建数据集,恢复更快根据日志回放还原每个写操作
性能影响fork时可能短暂阻塞客户端每次写带来额外I/O开销
自动回收清理过期快照AOF重写动态缩小日志
扩展作为主从复制基础主从 replicate依赖AOF日志
选择原则冷备,部分大容量场景热备,追求数据安全与一致性

6.1.2 核心配置

RDB

  • save 60 10000:RDB最多丢1分钟的数据,那么尽量就是每隔1分钟都生成一个快照

AOF

  • auto-aof-rewrite-percentage 100: 就是当前AOF大小膨胀到超过上次100%,上次的两倍
  • auto-aof-rewrite-min-size 64mb: 根据你的数据量来定,16mb,32mb
备份方案
  • 写crontab定时调度脚本去做数据备份
  • 【48 小时】每小时都copy一份rdb的备份,到一个目录中去,仅仅保留最近48小时的备份
  • 【月】每天都保留一份当日的rdb的备份,到一个目录中去,仅仅保留最近1个月的备份
  • 【清理】每次copy备份的时候,都把太旧的备份给删了
  • 【灾备】每天晚上将当前服务器上所有的数据备份,发送一份到远程的云服务上去

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

crontab -e0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

redis_rdb_copy_hourly.sh

#!/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_datedel_date=`date -d -48hour +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$del_date

每天copy一次备份

crontab -e0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
redis_rdb_copy_daily.sh#!/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_datedel_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date

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

rsync

快速恢复
场景数据恢复方案
Redis进程挂掉直接基于AOF日志文件进行数据恢复,AOF文件记录了每个写操作的指令,重启Redis进程后,通过重播AOF文件中的指令来恢复数据,最多可能丢失一秒的数据。
Redis进程所在机器挂掉重启机器后,尝试重启Redis进程,尝试直接基于AOF日志文件进行数据恢复。如果AOF文件未破损,可直接重启Redis进程进行恢复。若AOF文件破损,可以使用redis-check-aof工具修复。
当前最新的AOF和RDB文件出现丢失/损坏尝试基于当前机器上最新的RDB数据副本进行数据恢复。如果RDB文件丢失或损坏,可以从其他备份中恢复数据。
当前机器上的所有RDB文件全部损坏从远程的云服务上拉取最新的RDB快照来恢复数据。
发现有重大的数据错误,如某个小时上线的程序导致数据错乱选择某个更早的时间点的RDB数据副本进行恢复,将数据恢复到更早的状态。例如,发现某个时刻的数据错误,可以选择较早的RDB备份进行恢复。

6.2 缓存灾备处理

  1. 主从机制冗余备份【对等副本】
  • 策略:确保缓存系统采用主从机制,即在集群中的某一部分缓存不可用时,可以通过其他节点补充上去,保持系统的稳定运行。
  • 方案:确保缓存系统采用主从机制,并及时修复故障节点,保证系统的冗余备份可用性。
  1. 部分用户降级【部分降级】
  • 策略:如果缓存导致应用可用性下降,可以考虑通过降级方案让一部分用户先用起来,减轻系统压力,等待缓存恢复。
  • 方案:根据系统承受能力,设计降级方案,将一部分用户转移到备用系统或者采用降级功能,保证核心用户的使用体验。
  1. 逐步减少降级量【逐步恢复】
  • 策略:一旦部分用户降级以减少系统压力,可以逐步减少降级量,逐步恢复系统的正常状态。
  • 方案:一旦缓存系统恢复正常,逐步恢复所有用户的使用权限,直至所有用户都能正常使用系统功能。
  1. 后台Worker预热缓存数据【提前预热】
  • 策略:当缓存系统故障后,后台Worker可以负责预热缓存数据,重新建立缓存,以尽快恢复系统的性能。
  • 方案:通过后台Worker程序,根据业务规则和数据特性,预热缓存数据,尽快恢复系统的性能。

6.3 过期策略【重点】

策略介绍

https://help.aliyun.com/zh/redis/support/how-does-apsaradb-for-redis-evict-data-by-default

  • volatile-lru(默认):从已设置过期时间(Expire)的Key中,删除最近最少使用的Key(LRU算法),且不会考虑Key是否已经过期。
  • volatile-lfu:从已设置过期时间(Expire)的Key中,删除最不常用的Key(LFU算法)。
  • volatile-random:从已设置过期时间(Expire)的Key中,随机删除一些Key。
  • volatile-ttl:从已设置过期时间(Expire)的Key中,根据存活时间(TTL)从小到大排序进行删除。
  • allkeys-lru:从所有Key中,删除最近最少使用的Key(LRU算法)。
  • allkeys-lfu:从所有Key中,删除最不常用的Key(LFU算法)。
  • allkeys-random:从所有Key中,随机删除一些Key。
  • noeviction:不删除任何Key,当内存达到上限时,将无法写入新数据,数据库会返回错误信息。

数据删除策略

惰性删除:主节点在处理读取命令时会检查键是否超时,如果超时则执行删除命令,并异步发送删除命令给从节点。从节点不会主动删除超时数据,而是依赖主节点发送的删除命令。

img

定时删除:Redis主节点通过内部定时任务循环采样一定数量的键,当发现采样的键超时时,执行删除命令,并将删除命令同步给从节点。

img


当你发现这些内容对你有帮助时,为了支持我的工作,不妨给一个免费的⭐Star,这将是对我最大的鼓励!感谢你的陪伴与支持!一起在技术的路上共同成长吧!点击链接:GitHub | Gitee

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【深度学习神经网络基础】(十)—— 反向传播网络中计算输出节点增量与计算剩余节点增量

目录 简述 二次误差函数 交叉熵误差函数 计算剩余节点增量 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正&#xf…

刷穿力扣006-剑指offer一数组——02寻找目标值-二维数组

刷穿力扣006-剑指offer<一>数组——02寻找目标值-二维数组 基本面试题都是我带大家刷的力扣热题100和剑指offer的75道题&#xff0c;建议刷两遍&#xff01;&#xff08;ps:想找工作实习的同学&#xff0c;文末有面试八股和简历模板&#xff09; 题目&#xff1a; 语言…

计算机网络 TCP/IP体系 物理层

一. TCP/IP体系 物理层 1.1 物理层的基本概念 物理层作为TCP/IP网络模型的最低层&#xff0c;负责直接与传输介质交互&#xff0c;实现比特流的传输。 要完成物理层的主要任务&#xff0c;需要确定以下特性&#xff1a; 机械特性&#xff1a;物理层的机械特性主要涉及网络…

华为春招内幕:2024年最全Spring Dependency Injection面试题大全,深入掌握DI技术!99%的应聘者都推荐收藏!

在2024年&#xff0c;随着软件开发领域对高效和灵活的编程实践的需求日益增长&#xff0c;依赖注入&#xff08;DI&#xff09;作为一种关键的设计模式&#xff0c;在现代软件开发中扮演着至关重要的角色。华为&#xff0c;作为全球领先的技术创新公司&#xff0c;对其软件工程…

【Altium Designer 20 笔记】PCB层

Top Overlay & Bottom Overlay (顶部丝印层和底部丝印层)&#xff1a; 用于标记元件、连接和其他重要信息。丝印层是 PCB 表面的一层&#xff0c;上面印上文字、图标或标记。 Top Solder & Bottom Solder (顶部阻焊层和底部阻焊层)&#xff1a; 阻焊层、开窗层、绿油层…

Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. 起步依赖3. 自动配置3.1 JacksonPrope…

K8S认证工程师(CKA)考试速通经验分享(含答案)

昨天参加了Linux Foundation推出的Certified Kubernetes Administrator(CKA)考试&#xff0c;今天收到邮件通知通过啦&#xff5e;分数是93/100分 证书这个样子 ➡️随着应用现代化成为IT/互联网行业大趋势&#xff0c;企业的系统架构逐渐向微服务、容器化转型&#xff0c;好处…

并行计算基础以及相关C语言API介绍

并行计算概念 并行计算是一种利用多个计算资源&#xff08;如多个处理器、计算单元或计算机集群&#xff09;同时执行多个计算任务的方法&#xff0c;旨在提高计算机系统的处理能力和效率。它通过将原始计算任务分解为多个子任务&#xff0c;让多个处理单元同时执行这些子任务…

spring03:bean的自动装配

spring03&#xff1a;bean的自动装配 文章目录 spring03&#xff1a;bean的自动装配前言&#xff1a;一、 在xml中显示的配置&#xff1a;分析&#xff1a; People类&#xff1a;Cat类&#xff1a;Dog类&#xff1a;1. 在xml中显示的配置&#xff1a; 二、 隐式的自动装配bean【…

量子密钥分发系统设计与实现(一):系统基本架构讨论

经过一段时间讨论&#xff0c;我们了解到量子密钥分发设备是当前量子保密通信系统的基础。从本文开始&#xff0c;我将开启量子密钥分发系统设计与实现系列&#xff0c;详细讨论量子密钥分发设备如何从0到1的搭建。 1.QKD系统总体讨论 QKD系统的核心功能就是为通信双方提供理论…

聊聊最近两星期的学习吧!

今天是4月14号。 自从我3月份回到学校之后&#xff0c;我每天都有记录自己的学习时长。今天晚上&#xff0c;我在复盘我自己学习时长的时候&#xff0c;我发现&#xff0c;在整个四月份&#xff0c;我平均每天的有效学习时长只有6h&#xff0c;而且到今天为止&#xff0c;整个四…

写作对于技术人来说是最好的投资

上周日参加了腾讯云开发者社区和墨问西东组织的技术创作特训营活动&#xff0c;今天复盘一下。 虽说是技术创作特训营&#xff0c;现场到场的超过半数也都是技术人&#xff0c;但是分享的内容并不局限于技术人。 这次分享包括四个部分的内容&#xff0c;四个部分内容是一个体…

Excel使用 CONCATENATE 函数或“”符号拼接多列数据

如果你想在Excel中拼接多列数据&#xff0c;你可以使用Excel的函数来实现。其中一个常用的函数是CONCATENATE函数或者更简洁的&符号。以下是如何使用这些方法拼接多列数据的示例&#xff1a; 假设有以下的数据&#xff1a; ABCJohnDoe25JaneSmith30BobBrown35 1. **使用…

mvn spring-boot:run运行报错

[ERROR] No plugin found for prefix ‘spring-boot’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/itkey/.m2/repository), public (https://maven.aliyun.com/reposito…

Python基于循环神经网络的情感分类系统设计与实现,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

spring02:DI(依赖注入)

spring02&#xff1a;DI&#xff08;依赖注入&#xff09; 文章目录 spring02&#xff1a;DI&#xff08;依赖注入&#xff09;前言&#xff1a;一、构造器注入&#xff08;constructor&#xff09;二、set注入&#xff1a;分析&#xff1a; 1. Student类&#xff1a;2. Addres…

编程入门(二)【计算机基础三】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言五、常用软件的相关介绍六、操作系统的相关介绍七、Window11系统的基本操…

关于fail-fast机制和集合中删除元素报错这件事

我们由简到繁来叙述这件事 集合中删除元素报错 这个是很很基础但每一个程序员开发之路上都会遇到的报错&#xff0c;即ConcurrentModificationException 现象&#xff1a;在加强for循环中&#xff0c;使用集合本身的方法去删除了某个元素&#xff0c;比如 for (String obj:…

The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

运行报奇怪错误&#xff0c;然后加一句android:exported“true”&#xff0c;就可以了 &#xff0c;如下 <activity android:name".MainActivity" android:exported"true"><intent-filter><action android:name"android.intent.action…

Ansible离线安装

目录 概述失败成功离线安装包 概述 Ansible rpm离线安装 失败 yum -y install ansible --downloadonly --downloaddir./ansible [rootVM-16-2-centos ~]# yum -y install ansible --downloadonly --downloaddir./ansible 已加载插件&#xff1a;fastestmirror, langpacks Re…