通过阿里云OOS实现定时备份redis实例转储到OSS

功能背景

随着企业业务数据的快速增长,Redis 作为高性能的内存数据存储方案,在多种应用场景下承担着重要的角色。为确保数据安全,定时备份成为了不可或缺的一环。Redis 实例定时备份是关键数据库管理任务的一个重要组成部分,它主要服务于数据的灾难恢复、历史数据在这里插入图片描述
查询、环境克隆等应用场景。

然而,在目前的 Redis 的备份方案中,虽然支持定时备份功能,可以根据用户的业务需求,设置备份周期进行自动备份。但此方式存在以下不足:

  • 数据安全风险:在实例删除后,传统的定时备份无法保留备份数据,导致数据不能永久保存,存在数据丢失的风险。
  • 运维工作繁琐:缺少自动化的备份转储机制,需要手动操作备份过程,包括下载和上传至云存储服务,这一流程不仅耗时,同时也容易出错。
  • 运维成本增加:由于备份流程需要人工介入,过程中容易出错,需要额外的时间和资源投入,从而增加了整体的运维成本。
  • 效率较低:在没有集中管理的备份方案前,为多个实例或跨地域实例执行备份时,效率相对偏低,管理复杂度高。
  • 监控及告警能力不足:缺乏有效的监控和告警机制,使得备份任务的执行状态难以实时掌握,一旦出现失败或异常问题,及时响应和处理的能力受限。

针对上述不足,结合 OOS 的编排能力,OOS 推出了定时备份 Redis 实例并自动转储至 OSS 的功能,为用户提供了一个高效、安全且自动化的备份解决方案。

此方案有以下优势

  1. 数据安全性提高:通过自动上传备份文件至 OSS , 利用 OSS 的数据冗余存储机制, 确保硬件失效时的数据持久性和可用性;此外,及时 Redis 实例删除也能永久保存。
  2. 完全自动化:一旦配置完成,备份文件将自动、定时上传到 OSS,无需人工干预,大大减轻了运维负担,降低了操作错误。
  3. 多实例多地域集中管理:OOS 定时备份 Redis 任务支持一次选择多个实例。此外,OOS 支持跨区域转储 OSS,您可以将多个地域的 Redis 实例统一备份到同一 OSS 存储桶中。
  4. 灵活的备份策略和成本控制:用户可以根据自己的需要设置备份频率,通过 OSS 的生命周期管理策略,自动清理过期的备份文件,从而更有效地控制成本。
  5. 监控和告警:结合 OSS 和云监控,用户可以实时监控备份状态,一旦备份失败或有其他问题,可以及时收到告警,确保数据的安全性。

操作步骤

注意事项:

此功能使用过程中可能会产生部分费用,计费详情参考 Redis 备份费用说明和函数计算计费说明

  1. 登录 OOS 控制台。

  2. 在左侧导航栏找到 “自动化任务-定时运维”,单击创建

  3. 设置定时规则。这里定时类型有 “立即执行、仅在指定时间执行一次、周期性重复执行” 三种方式。其中 “立即执行” 会在创建任务后立即进行重启操作, “仅在指定时间执行一次” 只会在您设定的某个时间点执行一次, “周期性重复执行” 则会按照一定的规则重复执行,如每一小时执行一次。
    在这里插入图片描述

    这里我们选择 “周期性重复执行”,可以通过 “快速选择” 设置重复的频率,熟悉 cron 表达式的同学也可以通过 cron 表达式进行设置。本教程通过 “快速选择” 设置重复的频率,设置每小时执行一次,之后单击确定
    在这里插入图片描述

    设置定时任务的结束时间。
    在这里插入图片描述

  4. 搜索模板 “ACS-Redis-BulkyCreateBackupAndUploadToOSS”,然后进行勾选。在这里插入图片描述

  5. 接下来选择要进行备份的实例,首先选择实例所在地域,然后选择目标实例,点击确定。在这里插入图片描述在这里插入图片描述

  6. 选择要转储的 OSS 存储桶。在这里插入图片描述

  7. 配置执行任务所需的 RAM 角色:在这里插入图片描述

    • 创建 OOS 编排 OpenAPI 角色,可参考《为 OOS 服务设置 RAM 权限》配置 OOS 所需的 RAM 角色并授权,权限策略如下:
      {"Version": "1","Statement": [{"Action": ["kvstore:CreateBackup","kvstore:DescribeBackupTasks","kvstore:DescribeBackups","kvstore:DescribeInstances"],"Resource": "*","Effect": "Allow"},{"Action": ["ros:CreateStack","ros:DeleteStack","ros:GetStack"],"Resource": "*","Effect": "Allow"},{"Action": "oos:StartExecution","Resource": "*","Effect": "Allow"},{"Action": ["fc:CreateFunction","fc:CreateService","fc:DeleteFunction","fc:DeleteService","fc:GetFunction","fc:GetService","fc:InvokeFunction"],"Resource": "*","Effect": "Allow"},{"Condition": {"StringEquals": {"acs:Service": "fc.aliyuncs.com"}},"Action": "ram:PassRole","Resource": "*","Effect": "Allow"}]
      }
      
    • 创建个通过函数计算下载备份文件所需要的角色,可点击角色快捷创建配置 FC 所需的 RAM 角色(AliyunFCDefaultRole)进行快速创建。在这里插入图片描述
  8. 点击 “创建” -> “确定”,定时备份转储到 OSS 的任务就创建完成了。在这里插入图片描述

  9. 查看任务执行结果:
    a. 您可以等到到达您设定的触发时间来查看备份结果。
    b. 点击 “立即触发” 来执行备份转储任务查看结果。在这里插入图片描述

    此时任务会进入运行中,可通过执行日志查看任务执行进度。在这里插入图片描述

  10. 查看转储至 OSS 中的备份文件:
    等待执行状态变成 “已结束”,可以点击执行 ID。在这里插入图片描述

    点击子执行 ID。在这里插入图片描述

    查看输出。在这里插入图片描述

    此时登录此输出的地址就可以查看转存到 OSS 的备份文件了。

    备份文件存储目录格式为:

    Backup_[实例 ID]/[日期(格式为 YYYY-MM-DD)]/[OOS 备份任务 ID]/[备份文件名称].rdb`
    
    • 如果实例为非集群架构,则每次备份将产生 1 个 rdb 文件。
    • 如果实例为集群架构,由于每个分片将会独立备份,因此每次备份将产生与分片数量一致的 rdb 文件(例如 8 分片集群则每次产生 8 个 rdb 文件)。
    • 转储至 OSS 中的备份不再有自动清理时间,可根据需要保留或删除。
      在这里插入图片描述

附录

执行流程图

整体执行流程图:在这里插入图片描述

其中创建redis备份并上传到OSS流程:在这里插入图片描述

模板

上述步骤中使用的模板“ACS-Redis-BulkyCreateBackupAndUploadToOSS”内容如下(模板链接):

FormatVersion: OOS-2019-06-01
Description:en: Create Redis backups in batches and upload them to OSS. Backing up redis and using fc to upload the backup to OSS may incur charges. For billing details, please refer to <a href='https://help .aliyun.com/zh/redis/user-guide/automatic-or-manual-backup#e606eb29c7mew'>Redis Backup Fee Instructions</a> and <a href='https://help.aliyun.com/zh/ fc/product-overview/billing-overview'>Function calculation billing instructions</a>zh-cn: 批量创建Redis备份并上传到OSS。备份redis和使用fc将备份上传到oss都可能会产生费用,计费详情参考<a href='https://help.aliyun.com/zh/redis/user-guide/automatic-or-manual-backup#e606eb29c7mew'>Redis备份费用说明</a>和<a href='https://help.aliyun.com/zh/fc/product-overview/billing-overview'>函数计算计费说明</a>name-en: ACS-Redis-BulkyCreateBackupAndUploadToOSSname-zh-cn: 批量创建Redis备份并上传到OSS
Parameters:regionId:Label:en: RegionIdzh-cn: 地域IDType: StringAssociationProperty: RegionIdDefault: '{{ACS::RegionId}}'targets:Type: JsonLabel:en: TargetInstancezh-cn: 目标实例AssociationProperty: TargetsAssociationPropertyMetadata:ResourceType: ALIYUN::Redis::InstanceRegionId: regionIdOSSRegionId:Label:en: OSSRegionIdzh-cn: OSS Bucket所在地域IDType: StringAssociationProperty: RegionIdOSSBucketName:Label:en: OSSBucketNamezh-cn: OSS Bucket名称Type: StringAssociationProperty: ALIYUN::OSS::Bucket::BucketNameAssociationPropertyMetadata:RegionId: ${OSSRegionId}rateControl:Label:en: RateControlzh-cn: 任务执行的并发比率Type: JsonAssociationProperty: RateControlDefault:Mode: ConcurrencyMaxErrors: 0Concurrency: 10OOSAssumeRole:Label:en: OOSAssumeRolezh-cn: OOS扮演的RAM角色Type: StringDefault: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:- Name: GetInstanceDescription:en: Get the redis instanceszh-cn: 获取Redis实例Action: ACS::SelectTargetsProperties:ResourceType: ALIYUN::Redis::InstanceRegionId: '{{ regionId }}'Filters:- '{{ targets }}'Outputs:InstanceIds:Type: ListValueSelector: Instances.Instance[].InstanceId- Name: CreateBackupAndUploadToOSSAction: ACS::Redis::CreateBackupAndUploadToOSSDescription:en: Create backup and upload to OSSzh-cn: 创建Redis备份并上传到OSSProperties:regionId: '{{ regionId }}'instanceId: '{{ ACS::TaskLoopItem }}'OSSRegionId: '{{ OSSRegionId }}'OSSBucketName: '{{ OSSBucketName }}'Loop:RateControl: '{{ rateControl }}'Items: '{{ GetInstance.InstanceIds }}'Outputs:OSSObjectURLs:AggregateType: Fn::ListJoinAggregateField: OSSObjectURLOutputs:OSSObjectURL:Type: StringValueSelector: .OSSObjectURL + "{{ACS::ExecutionId}}/"  | split(".t0") | .[0]
Outputs:OSSObjectURLs:Type: ListValue: '{{ CreateBackupAndUploadToOSS.OSSObjectURLs }}'

其中Action: ACS::Redis::CreateBackupAndUploadToOSS内容如下:

FormatVersion: OOS-2019-06-01
Description:en: Create redis backup and upload to OSSzh-cn: 创建Redis备份并上传到OSSname-en: ACS::Redis::CreateBackupAndUploadToOSSname-zh-cn: 创建Redis备份并上传到OSS
Parameters:regionId:Label:en: RegionIdzh-cn: 地域IDType: StringAssociationProperty: RegionIdinstanceId:Label:en: InstanceIdzh-cn: 实例IDType: StringAssociationProperty: ALIYUN::Redis::Instance::InstanceIdAssociationPropertyMetadata:RegionId: ${regionId}OSSRegionId:Label:en: OSSRegionIdzh-cn: OSS bucket所在地域IDType: StringAssociationProperty: RegionIdOSSBucketName:Label:en: OSSBucketNamezh-cn: OSS Bucket 名称Type: StringAssociationProperty: ALIYUN::OSS::Bucket::BucketNameAssociationPropertyMetadata:RegionId: ${OSSRegionId}Default: ''
Tasks:- Name: CreateBackupAction: ACS::ExecuteApiDescription:en: Create backupzh-cn: 创建Redis备份Properties:Service: r-kvstoreAPI: CreateBackupParameters:RegionId: '{{ regionId }}'InstanceId: '{{ instanceId }}'Outputs:BackupJobID:Type: StringValueSelector: .BackupJobID- Name: WaitForBackupCreatedAction: ACS::WaitForDescription:en: Wait for backup createdzh-cn: 等待备份创建完成Retries: 30DelayType: ExponentialDelay: 2BackOff: 2Properties:Service: r-kvstoreAPI: DescribeBackupTasksParameters:RegionId: '{{ regionId }}'InstanceId: '{{ instanceId }}'BackupJobId: '{{ CreateBackup.BackupJobID }}'DesiredValues:- FinishedNotDesiredValues: []StopRetryValues: []PropertySelector: .BackupJobs[].BackupProgressStatus- Name: GetBackupDownloadUrlAction: ACS::ExecuteApiDescription:en: Get backup download urlzh-cn: 获取备份下载地址Properties:Service: r-kvstoreAPI: DescribeBackupsParameters:RegionId: '{{ regionId }}'InstanceId: '{{ instanceId }}'BackupJobId: '{{ CreateBackup.BackupJobID }}'StartTime:Fn::FormatUTCTime:- Fn::AddHour:- '{{ ACS::CurrentUTCTime }}'- -1- '%Y-%m-%dT%H:%MZ'EndTime:Fn::FormatUTCTime:- '{{ ACS::CurrentUTCTime }}'- '%Y-%m-%dT%H:%MZ'Outputs:BackupDownloadURL:Type: ListValueSelector: .Backups.Backup[].BackupDownloadURL- Name: UploadBackupToOSSAction: ACS::FC::ExecuteScriptDescription:en: Upload backup to OSSzh-cn: 上传备份到OSSProperties:runtime: python3.10handler: index.handlerrole: acs:ram::{{ACS::AccountId}}:role/AliyunFcDefaultRolescript: |-import oss2import requestsdef handler(event, context):auth = oss2.StsAuth(context.credentials.access_key_id, context.credentials.access_key_secret, context.credentials.security_token)endpoint = 'https://oss-{{OSSRegionId}}.aliyuncs.com'bucket = oss2.Bucket(auth, endpoint, '{{OSSBucketName}}')unique_identifier = '{{ACS::TaskLoopItem}}'.split('?')[0].split('/')[-1]execution_id = '{{ACS::ExecutionId}}'.split('.')[0]input = requests.get('{{ACS::TaskLoopItem}}')bucket.put_object(f'Backup_{{InstanceId}}/{{ACS::CurrentDate}}/{execution_id}/{unique_identifier}', input)Loop:Items: '{{ GetBackupDownloadUrl.BackupDownloadURL }}'RateControl:Mode: ConcurrencyMaxErrors: 0Concurrency: 20
Outputs:OSSObjectURL:Type: StringValue: https://oss.console.aliyun.com/bucket/oss-{{OSSRegionId}}/{{OSSBucketName}}/object?path=Backup_{{InstanceId}}/{{ACS::CurrentDate}}/

👍 点赞 - 您的支持是我持续创作的最大动力!
⭐️ 收藏 - 您的关注是我前进的明灯!
✏️ 评论 - 您的反馈是我成长的宝贵资源!

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

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

相关文章

JAVA面试八股文之JVM

JVM JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f;你能详细说一下 JVM 运行时数据区吗&#xff1f;详细介绍一下程序计数器的作用&#xff1f;你能给我详细的介绍Java堆吗?什么是虚拟机栈&#xff1f;栈内存溢出情况&#xff1f;堆栈的区别是什么吗&#xff1f;解…

.NET 检测地址/主机/域名是否正常

&#x1f331;PING 地址/主机名/域名 /// <summary>/// PING/// </summary>/// <param name"ip">ip</param>/// <returns></returns>public static bool PingIp(string ip){System.Net.NetworkInformation.Ping p new System.N…

Quarto Dashboards 教程 1:Overview

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度&#xff0c;分享官方文档的中文教程。软件可能随时更新&#xff0c;建议配合官方文档一起阅读。推荐先按顺序阅读往期内容&#xff1a; 1.quarto 教程 1&#xff1a;Hello, Quarto 2.qu…

游戏新手村21:再谈游戏广告页面设计

前文我们说到了网页游戏的LandingPage页面设计中需要遵循的一些规范和注意事项&#xff0c;本章我们重点谈下网络游戏的广告页面设计。 之前在金山的时候&#xff0c;大家习惯或者喜欢称LandingPage为分流页&#xff0c;这个页面需要加入哪些游戏信息才能在短时间内俘获玩家的…

深入解析Floyd Warshall算法:原理、Java实现与优缺点

Floyd Warshall算法的简介 在我们的日常生活中&#xff0c;常常会遇到需要找出两点之间最短路径的问题。比如&#xff0c;从家到公司的最短路线&#xff0c;或者在旅行时&#xff0c;从一个景点到另一个景点的最快路线。 为了解决这类问题&#xff0c;科学家们设计出了许多算法…

操作系统(Operating System)知识点复习——第十二章 文件管理

目录 0.前言 1.Overview 2.文件的组织方式 ①The Sequential File 顺序文件 ②The Pile堆 ③The Indexed Sequential File 索引顺序文件 ④The Indexed File 索引文件 ⑤The Direct or Hashed File 直接文件或者散列文件 3.文件目录 Structure 1&#xff1a;简单目录…

物联网应用技术综合实训室解决方案

一、背景 随着物联网技术的快速发展和广泛应用&#xff0c;物联网产业已经成为新的经济增长点&#xff0c;对于推动产业升级、提高社会信息化水平具有重要意义。因此&#xff0c;培养具备物联网技术应用能力的高素质人才成为了迫切需求。 传统的教育模式往往注重理论教学&…

Git--多人协作

目录 一、多人协作一二、多人协作二三、 远程分⽀删除后&#xff0c;本地git branch -a依然能看到的解决办法 一、多人协作一 ⽬前&#xff0c;我们所完成的⼯作如下&#xff1a; 1.基本完成Git的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分⽀理解&#xff0c;…

网站漏洞有哪些方法检查,网站常见漏洞扫描检测方案

在数字化时代&#xff0c;随着互联网的飞速发展&#xff0c;网站已经成为人们获取信息、交流互动的重要平台&#xff0c;网站安全对于企业和个人而言至关重要。但随着技术的不断发展&#xff0c;网站漏洞问题也日益凸显&#xff0c;给网络安全带来了严重威胁。 为了及时发现并…

【软考】设计模式之策略模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 优缺点5.1 优点5.2 缺点 6. 适用性 1. 说明 1.定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。2.此模式使得算法可以独立于使用它们的客户而变化。3.策略模式&#xff08;Strategy Pattern…

《HCIP-openEuler实验指导手册》1.7 Apache虚拟主机配置

知识点 配置步骤 需求 域名访问目录test1.com/home/source/test1test2.com/home/source/test2test3.com/home/source/test3 创建配置文件 touch /etc/httpd/conf.d/vhost.conf vim /etc/httpd/conf.d/vhost.conf文件内容如下 <VirtualHost *.81> ServerName test1.c…

CONSOB 又下令封锁5个未经授权的投资网站,总数达1065

FX110讯&#xff1a;意大利金融市场监管局 CONSOB 已下令关闭 5 个非法提供金融服务/金融产品的网站。自2019年7月CONSOB有权下令封锁欺诈性金融网站以来&#xff0c;被封禁的网站数量已升至1065个。 以下是 CONSOB 下令新屏蔽的 5个网站&#xff1a; “Luno Invest” Vantage …

JSP:操作指令

目录 1.jsp:useBean操作 语法格式&#xff1a; 属性说明&#xff1a; scope作用域&#xff1a; 1.page&#xff1a; 2.request&#xff1a; 3.session&#xff1a; 4.application 案例&#xff1a; 2.jsp:setProperty操作 语法格式&#xff1a; 属性说明&#xf…

吾日三省吾身---对平常遇到的错误总结

✨个人主页&#xff1a; 不漫游-CSDN博客 前言 本篇文章是对平常练习遇到的问题总结&#xff0c;多吸取经验教训才能避免未来再犯~ Java语法部分 &#xff08;一&#xff09;多态 思考&#xff1a;这道题很明显考察的是多态的知识点&#xff0c;即一个对象可以被赋值给其父类…

【PyTorch 实战3:YOLOv5检测模型】10min揭秘 YOLOv5 检测网络架构、工作原理以及pytorch代码实现(附代码实现!)

YOLOv5简介 YOLOv5&#xff08;You Only Look Once, Version 5&#xff09;是一种先进的目标检测模型&#xff0c;是YOLO系列的最新版本&#xff0c;由Ultralytics公司开发。该模型利用深度学习技术&#xff0c;能够在图像或视频中实时准确地检测出多个对象的位置及其类别&…

鸿蒙内核源码分析(时钟任务篇)

时钟概念 时间是非常重要的概念&#xff0c;我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. 操作系统也一样&…

LLM大语言模型(十三):ChatGLM3-6B兼容Langchain的Function Call的一步一步的详细转换过程记录

# LangChain&#xff1a;原始prompt System: Respond to the human as helpfully and accurately as possible. You have access to the following tools: Calculator: Useful for when you need to calculate math problems, args: {\calculation\: {\description\: \calcul…

自动化爬虫工具:you-get安装与使用

Windows下的安装命令&#xff1a; pip install you-get linux下的安装命令&#xff1a; pip3 install you-get 下载完成后&#xff0c;我们可以看到如下的警告&#xff0c;意思就是这个工具并未被添加到环境变量中&#xff0c;如果我们想在命令行中直接调用&#xff0c;需要…

vim的IDE进阶之路

一 ctags 1 安装 安装ctags比较简单&#xff0c;我用的是vim-plug&#xff0c;网络上随便一搜应该就有很多教程&#xff0c;而且没有什么坑 2 使用 vim之函数跳转功能_nvim函数跳转-CSDN博客https://blog.csdn.net/ballack_linux/article/details/71036072不过针对cuda程序…

2024年电子商务与大数据经济国际会议 (EBDE 2024)

2024年电子商务与大数据经济国际会议 (EBDE 2024) 2024 International Conference on E-commerce and Big Data Economy 【会议简介】 2024年电子商务与大数据经济国际会议即将在厦门召开。本次会议旨在汇聚全球电子商务与大数据经济领域的专家学者&#xff0c;共同探讨电子商务…