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

devtools/2024/9/20 3:52:37/ 标签: 阿里云, redis, 数据库, 运维开发, 自动化

功能背景

随着企业业务数据的快速增长,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.ppmy.cn/devtools/14315.html

相关文章

[巅峰极客 2022]smallcontainer

这题我认为是比较有思考意义的。 版本是2.27&#xff0c;有tcachebin&#xff0c;但大部分安全检测都没有。 直接看add函数。 不能得到fastbin&#xff0c;也不能直接0x410分配到unsortedbin了&#xff0c;并且最多同时存在16个chunk。 free后会把指针情况&#xff0c;没有ua…

3月黄油奶酪行业数据分析:安佳和妙可蓝多领军市场

近些年来&#xff0c;随着新消费主义盛行&#xff0c;老少皆宜的黄油和奶酪逐渐成为都市年轻人的烘培“新宠”。 今年3月份&#xff0c;黄油奶酪表现的中规中矩&#xff0c;处在稳定发展阶段。根据鲸参谋数据显示&#xff0c;3月份&#xff0c;在线上综合电商平台&#xff08;…

AI助力科研创新与效率双提升:ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

为什么使用ZigBee协议开发智能家居产品?

随着智能家居市场的蓬勃发展&#xff0c;各种智能设备层出不穷&#xff0c;其中Zigbee技术因其独特的优势在这些智能设备中得到了广泛应用。那么&#xff0c;zigbee技术究竟具备哪些令人瞩目的优势&#xff0c;为什么能够得到如此广泛的应用呢&#xff1f; 如果您正计划利用Zi…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

CNPM、NPM 和 Yarn:JavaScript 包管理器的比较

在现代Web开发中&#xff0c;包管理器是不可或缺的工具&#xff0c;它们帮助开发者管理项目中使用的各种第三方库。在JavaScript世界里&#xff0c;最常见的包管理器有 NPM、Yarn 和 CNPM。本文将详细介绍这三者的不同之处&#xff0c;并用简单的例子来帮助初学者理解每种工具的…

office的文件(word、excel、ppt)图标变白

之前用过WPS&#xff0c;后来卸载了&#xff0c;之后图标就变成白的了&#xff0c;但是word、Excel、PPT等都可以正常使用&#xff0c;说明不是打开方式的问题&#xff0c;然后就找问题所在。 看b站视频得知有可能是卸载wps之后&#xff0c;注册表里的图标路径仍然是之前的WPS…

【GitHub】github学生认证,使用copilot教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&a…

[Linux初阶]常见的指令

我们学Linux指令&#xff0c;其实就是和学windows一样&#xff0c;学习Linux的操作 一、Linux下基本指令 ls 指令 语法 &#xff1a; ls [ 选项 ] [ 目录或文件 ] 功能 &#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出…

大功率回馈式直流电子负载箱优点和应用

大功率回馈式直流电子负载箱是先进的电力设备&#xff0c;它能够模拟各种复杂的负载情况&#xff0c;对电源进行测试和校准。这种设备具有许多优点&#xff0c;被广泛应用于各种领域。 大功率回馈式直流电子负载箱具有高精度和高稳定性。它能够精确地模拟各种负载情况&#xff…

web前端框架设计第六课-样式绑定

web前端框架设计第六课-样式绑定 一.预习笔记 1.class属性绑定 给P标签绑定一个类样式&#xff0c;类名为active。当active取值为true时&#xff0c;表示绑定样式成功&#xff0c;取值为false时&#xff0c;取消绑定 以对象形式给P标签绑定多个类样式 以数组形式给P标签绑定多…

C脚本实现Wincc单按钮启动/停止

文章目录 前言实现步骤&#xff1a; 前言 在Wincc中实现单按钮启动/停止。即按一下&#xff0c;按钮关联的变量置位为1&#xff0c;再按一下&#xff0c;变量复位为0。 实现步骤&#xff1a; 在变量管理器新建变量"BF01_CP_HMI_SevName_Play"&#xff1b;添加一个按…

爬虫学习笔记-数美验证

测试网址&#xff1a;智能验证码体验_图片验证码_数美科技数美科技智能验证码在线体验&#xff0c;智能识别风险用户级别&#xff0c;自行切换智能验证码难度及类型&#xff0c;提供滑动、拼图、点选、数字、动态等多种智能验证码服务&#xff0c;精准拦截机器行为。https://ww…

Flutter pod install 时提示Error installing GoogleUtilitiesComponents

设备&#xff1a;Mac air M3 2024 环境&#xff1a; Mac 14.4.1 Flutter 3.19.5 Android Studio 2023.2 在调用pod install安装插件时&#xff0c;前面成功了几个插件&#xff0c;后面停止在GoogleUtilitiesCompomponents上&#xff0c;等待一会儿后&#xff0c;出现 Err…

亚马逊云科技Amazon Bedrock大模型托管服务详细分析

说到2023年亚马逊云科技Re:invent 全球云计算大会最大更新&#xff0c;当属亚马逊云科技模型的大语言模型托管服务——Amazon Bedrock. Bedrock于两个月前正式发布&#xff0c;在本次大会后正式对用户可用。我们这次就来了解下该服务有什么亮点&#xff0c;和详细使用教程。由于…

SpringBoot---------整合Mybatisplus

快速入门 第一步&#xff1a;导入依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency> 第二步&#xff1a;编写mapper…

vue cli3开发自己的插件发布到npm

具体流程如下&#xff1a; 1、创建一个vue项目 vue create project 2、编写组件 &#xff08;1&#xff09;新建一个plugins文件夹&#xff08;可自行创建&#xff09; &#xff08;2&#xff09;新建Button组件 &#xff08;3&#xff09;组件挂载&#xff0c;为组件提供 in…

js面试---闭包、作用域及作用域链、执行上下文

1、什么是闭包 闭包是指有权访问另一个函数作用域中变量的函数&#xff0c;创建闭包的最常见的方式就是在一个函数内创建另一个函数&#xff0c;创建的函数可以访问到当前函数的局部变量。 闭包的作用&#xff1a; a、使我们在函数外部能够访问到函数内部的变量。通过使用闭包…

介绍Phi-3:微软重新定义小型语言模型(SLM)的可能性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

在mac上安装node.js及使用npm,yarn相关命令教程

1、安装node.js 官网&#xff1a;Node.js — Download Node.js 选择需要的版本&#xff0c;点击DownLoad 2、点击继续&#xff0c;直到安装成功。 2.1打开终端输入命令node -v 显示版本号则说明已安装成功 3、全局安装yarn命令 1、sudo npm install --global yarn &#xf…