当前位置: 首页 > news >正文

【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

相关文章:

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

六、Redis 灾备方案 6.1 存储方案 6.1.1 基础对比 RDB持久化AOF持久化原理周期性fork子进程生成持久化文件每次写入记录命令日志文件类型二进制dump快照文件文本appendonly日志文件触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次文件位置配置文件中指…...

【Java基础】17.异常处理

文章目录 前言一、异常的概念1.异常的3种类型2.支持异常处理的关键字和类 二、Exception 类的层次三、内置异常类1.非检查性异常2.检查性异常类 四、异常处理1.捕获异常2.多重捕获块3.throws/throw 关键字1.throw 关键字2.throws 关键字 3.finally关键字 五、编译时异常处理方式…...

【python】flask结合SQLAlchemy,在视图函数中实现对数据库的增删改查

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

APIGateway的认证

APIGateway的支持的认证如下: 我们从表格中可以看到,HTTP API 不支持资源策略的功能,另外是通过JWT的方式集成Cognito的。 对于REST API则是没有显示说明支持JWT认证,这个我们可以通过Lambda 自定义的方式来实现。 所以按照这个…...

MacOS Github Push项目 精简版步骤

大白菜教程:小白菜 macOS github提交代码-CSDN博客 步骤1:git init步骤2: touch .gitignore 创建ignore文件 open .gitignore 打开ignore文件 编写ignore文件.idea/ 是文件夹的意思.git/ 也是自动生成的文件夹 也不上传.DS_St…...

Eclipse的基本使用讲解(建项目,建包,建类,写代码(基本语法))新手入门必备

目录 一.介绍eclipse 二.操作Eclipse 1.选择工作空间 2.建项目,建包,建类 1.建项目(两种) 2.建包 3.建类 三.写代码(基本语法) 1.代码操作 2.代码规范 3.代码注释 一.介绍eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其…...

3D模型处理的并行化

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息,并分享我发现的一些小技巧,例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 那么我们为什么要诉诸并行计算呢? 使用数据有时会出现…...

盲人安全导航技巧:科技赋能让出行更自如

作为一名资深记者,长期关注并报道无障碍领域的发展动态。今日,我将聚焦盲人安全导航技巧,探讨这一主题下科技如何赋能视障人士实现更为安全、独立的出行。一款融合了实时避障、拍照识别物体及场景功能的盲人出行辅助应用叫做蝙蝠避障&#xf…...

问,由于java存在性能上,以及部分功能上的缺点,请问如何正确使用C,C++,Go,这三个语言,提升Java Web项目的性能?

拓展阅读:版本任你发,我用java8 我明白Java虽然在许多方面表现出色,但在某些特定场景下可能会遇到性能瓶颈或功能限制。为了提升Java Web项目的性能,可以考虑将C、C和Go这三种语言用于特定的组件或服务。以下是如何正确使用这些语…...

【信号与系统 - 9】傅里叶变换的性质习题

1 习题 已知 f ( t ) f(t) f(t) 的傅里叶变换为 F ( j w ) F(jw) F(jw) ,求如下信号的傅里叶变换 (1) t ⋅ f ( 3 t ) t\cdot f(3t) t⋅f(3t) 解: f ( 3 t ) ↔ 1 3 F ( j w 3 ) f(3t)\leftrightarrow \frac{1}{3}F(j\frac{w}…...

C#探索之路基础夯实篇(5):语法糖概念解析

C#探索之路基础夯实篇(5):语法糖概念解析 文章目录 C#探索之路基础夯实篇(5):语法糖概念解析1、概念定义2、Lua中的语法糖3、C#中的语法糖4、C中的语法糖5、优缺点辨析6、适用范围7、总结 从之前一开始接触lua的时候开始,开始第一次接触到语法…...

SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品,支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据,已应用于数百家企业生产,也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主要解决数据集成领域的常见问题:…...

深入理解汇编:平栈、CALL和RET指令详解

​视频学习下载地址:​​https://pan.quark.cn/s/04e6946a803a​​ 汇编语言以其接近硬件的特性和高效的执行速度,在系统编程、性能优化和逆向工程中占有不可或缺的地位。本文将深入探讨汇编语言中的平栈操作以及​​CALL​​​和​​RET​​指令&#…...

DP4 最小花费爬楼梯

原题链接:最小花费爬楼梯_牛客题霸_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 dp。 开一个dp数组和a数组。dp[i]表示在当前这一格所需要的费用,a数组其实就是题目中的cost数组。 因为最后要求到顶楼的最低费用&a…...

OpenXR API概览与核心组件解析

在虚拟现实(VR)和增强现实(AR)领域,OpenXR API提供了一个重要的开放标准,使得开发者能够跨多种硬件和软件平台创建兼容的应用。本文将详细解释OpenXR中的核心组件和数据结构,并探讨它们如何共同…...

安装指定版本的ant-design-vue和指定版本的@ant-design/icons-vue 图标组件包

前言: 最近在完成公司的项目时,为了兼容其他的版本,需要安装指定版本的ant-design-vue和ant-design/icons-vue 图标组件包,安装成功之后,分享如下: 安装命令: ant-design-vue: 不…...

Zynq7000系列中的休眠模式

休眠模式是在系统层面定义的,它包括将APU置于待机模式,并将多个控制器保持在无时钟的复位状态。 进入休眠模式可以大大降低功耗。在休眠模式下,大多数功能时钟组都会被关闭或断电。唯一需要保持活动的设备是一个CPU、窥探控制单元&#xff08…...

在redhat7/8平台上部署ELK7.17.18的技术方案

部署环境说明 为节省资源直接使用1台测试机模拟3节点elasticsearch服务集群做部署,在该主机上同时部署了3个elasticsearch实例、1个logstash实例、1个kibana实例、1个filebeat实例。对于生产环境,以上实例服务应该做分布式部署。 ELK-TEST1 192.168.10…...

(Chat For Al,创新Al,汇语Al助手,AiTab新标签,万能助手,LLaVA)分享6个好用的ChatGPT

目录 1、Chat For AI 2、创想AI 3、汇语AL助手...

MySQL-锁篇

文章目录 表级锁和行级锁了解吗?有什么区别?行级锁使用有什么注意事项?InnoDB有哪几类行锁?共享锁和排他锁是什么?意向锁有什么用? 锁是一种常见的并发事务的控制方式 表级锁和行级锁了解吗?有什…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...