通过阿里云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-BulkyCreateBackupAndUploadToOSS
  name-zh-cn: 批量创建Redis备份并上传到OSS
Parameters:
  regionId:
    Label:
      en: RegionId
      zh-cn: 地域ID
    Type: String
    AssociationProperty: RegionId
    Default: '{{ACS::RegionId}}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
      zh-cn: 目标实例
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::Redis::Instance
      RegionId: regionId
  OSSRegionId:
    Label:
      en: OSSRegionId
      zh-cn: OSS Bucket所在地域ID
    Type: String
    AssociationProperty: RegionId
  OSSBucketName:
    Label:
      en: OSSBucketName
      zh-cn: OSS Bucket名称
    Type: String
    AssociationProperty: ALIYUN::OSS::Bucket::BucketName
    AssociationPropertyMetadata:
      RegionId: ${OSSRegionId}
  rateControl:
    Label:
      en: RateControl
      zh-cn: 任务执行的并发比率
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
      zh-cn: OOS扮演的RAM角色
    Type: String
    Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: GetInstance
    Description:
      en: Get the redis instances
      zh-cn: 获取Redis实例
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::Redis::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      InstanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: CreateBackupAndUploadToOSS
    Action: ACS::Redis::CreateBackupAndUploadToOSS
    Description:
      en: Create backup and upload to OSS
      zh-cn: 创建Redis备份并上传到OSS
    Properties:
      regionId: '{{ regionId }}'
      instanceId: '{{ ACS::TaskLoopItem }}'
      OSSRegionId: '{{ OSSRegionId }}'
      OSSBucketName: '{{ OSSBucketName }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ GetInstance.InstanceIds }}'
      Outputs:
        OSSObjectURLs:
          AggregateType: Fn::ListJoin
          AggregateField: OSSObjectURL
    Outputs:
      OSSObjectURL:
        Type: String
        ValueSelector: .OSSObjectURL + "{{ACS::ExecutionId}}/"  | split(".t0") | .[0]
Outputs:
  OSSObjectURLs:
    Type: List
    Value: '{{ CreateBackupAndUploadToOSS.OSSObjectURLs }}'

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

FormatVersion: OOS-2019-06-01
Description:
 en: Create redis backup and upload to OSS
 zh-cn: 创建Redis备份并上传到OSS
 name-en: ACS::Redis::CreateBackupAndUploadToOSS
 name-zh-cn: 创建Redis备份并上传到OSS
Parameters:
 regionId:
   Label:
     en: RegionId
     zh-cn: 地域ID
   Type: String
   AssociationProperty: RegionId
 instanceId:
   Label:
     en: InstanceId
     zh-cn: 实例ID
   Type: String
   AssociationProperty: ALIYUN::Redis::Instance::InstanceId
   AssociationPropertyMetadata:
     RegionId: ${regionId}
 OSSRegionId:
   Label:
     en: OSSRegionId
     zh-cn: OSS bucket所在地域ID
   Type: String
   AssociationProperty: RegionId
 OSSBucketName:
   Label:
     en: OSSBucketName
     zh-cn: OSS Bucket 名称
   Type: String
   AssociationProperty: ALIYUN::OSS::Bucket::BucketName
   AssociationPropertyMetadata:
     RegionId: ${OSSRegionId}
   Default: ''
Tasks:
 - Name: CreateBackup
   Action: ACS::ExecuteApi
   Description:
     en: Create backup
     zh-cn: 创建Redis备份
   Properties:
     Service: r-kvstore
     API: CreateBackup
     Parameters:
       RegionId: '{{ regionId }}'
       InstanceId: '{{ instanceId }}'
   Outputs:
     BackupJobID:
       Type: String
       ValueSelector: .BackupJobID
 - Name: WaitForBackupCreated
   Action: ACS::WaitFor
   Description:
     en: Wait for backup created
     zh-cn: 等待备份创建完成
   Retries: 30
   DelayType: Exponential
   Delay: 2
   BackOff: 2
   Properties:
     Service: r-kvstore
     API: DescribeBackupTasks
     Parameters:
       RegionId: '{{ regionId }}'
       InstanceId: '{{ instanceId }}'
       BackupJobId: '{{ CreateBackup.BackupJobID }}'
     DesiredValues:
       - Finished
     NotDesiredValues: []
     StopRetryValues: []
     PropertySelector: .BackupJobs[].BackupProgressStatus
 - Name: GetBackupDownloadUrl
   Action: ACS::ExecuteApi
   Description:
     en: Get backup download url
     zh-cn: 获取备份下载地址
   Properties:
     Service: r-kvstore
     API: DescribeBackups
     Parameters:
       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: List
       ValueSelector: .Backups.Backup[].BackupDownloadURL
 - Name: UploadBackupToOSS
   Action: ACS::FC::ExecuteScript
   Description:
     en: Upload backup to OSS
     zh-cn: 上传备份到OSS
   Properties:
     runtime: python3.10
     handler: index.handler
     role: acs:ram::{{ACS::AccountId}}:role/AliyunFcDefaultRole
     script: |-
       import oss2
       import requests

       def 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: Concurrency
       MaxErrors: 0
       Concurrency: 20
Outputs:
 OSSObjectURL:
   Type: String
   Value: https://oss.console.aliyun.com/bucket/oss-{{OSSRegionId}}/{{OSSBucketName}}/object?path=Backup_{{InstanceId}}/{{ACS::CurrentDate}}/

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

修改Ubuntu22.04系统图标

在Ubuntu 22.04中更改开机时显示的Ubuntu图标需要修改的设置。 主要思路是用自己图片替换系统图片&#xff0c;保持系统图片同名&#xff0c;同格式。 以下是一般的步骤&#xff1a; 修改启动界面的logo&#xff1a; sudo cp 新logo.png /usr/share/plymouth/themes/spinn…

【mysql】mysql命令使用大全,你想要的都在这里

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

21物联1班作业DES分组密码

DES加密 &#xff01;&#xff01;&#xff01;以下加密自己学号姓名 将密钥zw改为abcde 学号加密 密钥为zw 密钥为abcde DES解密 &#xff01;&#xff01;&#xff01;将desdecode中内容替换成DES加密密文。 学号解密 代码解释 加密代码 问我QQ上要 解密代码 问我QQ上…

【一般排查思路】针对银河麒麟高级服务器操作系统磁盘空间已满

1. 本身磁盘空间已满 有时候我们会看到服务器上有提示“设备上没有空间”&#xff0c;如图1。 图 1 如果是磁盘本身空间已满&#xff0c;我们可以借助du工具来排查&#xff0c;比如首先cd / 切换到根目录&#xff0c;然后 du -sh * | sort -rh | head -n 3查看空间占用最大的…

ardupilot开发 --- RealSense-D400 篇

目录 0. 一些概念1. 用windows检查设备是否正常1. 使用 Intel RealSense SDK 2.0 查看相机图像数据 0. 一些概念 官网&#xff1a;添加链接描述选型&#xff1a;D455 1. 用windows检查设备是否正常 用USB连接D455与PC 下载 Intel.RealSense.Viewer.exe 并打开&#xff0c;设…

无监督学习的评价指标

轮廓系数&#xff08;Silhouette Coefficient&#xff09; 轮廓系数用于判断聚类结果的紧密度和分离度。轮廓系数综合了样本与其所属簇内的相似度以及最近的其他簇间的不相似度。 其计算方法如下&#xff1a; 1、计算簇中的每个样本i 1.计算a&#xff08;i&#xff09; &#x…

使用Canal实现MySQL主从同步

说明&#xff1a;本文介绍如何使用Canal实现MySQL主从同步的效果&#xff0c;关于Canal入门使用参考&#xff1a;Canal入门使用 启动Canal 首先&#xff0c;设置Canal服务器里&#xff0c;目标节点&#xff08;即监测的MySQL节点&#xff09;的配置&#xff0c;启动Canal服务…

多目标果蝇算法及其MATLAB实现

果蝇算法最早的文献是由台湾华夏科技大学的潘文超教授于2011年提出来的。该算法是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法&#xff0c;被称为果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)。通过模拟果蝇利用敏锐的嗅觉和视觉进行捕食的过程&am…

APQC是美国生产力与质量中心

APQC简介 APQC是美国生产力与质量中心( American Productivity and Quality Center)的简称。该中心自1991年开始研究开发流程分类框架&#xff08;简称PCF&#xff09;&#xff0c;1992年发布PCF1.0。PCF将运营与管理等流程汇总成12项企业级流程类别&#xff0c;每个流程类别包…

项目经理学习PMP对自己工作有多大帮助?

PMP是一种项目管理认证&#xff0c;也是最流行和含金量较高的认证之一。因此&#xff0c;你问它对项目管理有多大帮助&#xff0c;我可以说PMP可以被视为量身定制给项目管理岗人员的一个证书&#xff0c;你能理解它的重要性吗&#xff1f; 随着国家经济建设由基础设施向高端产业…

【新手入门】Git的使用方法,上传自己的项目到GitHub上

Git新手教程 一、Git下载安装二、初始化设置1.网端设置2.用户设置 三、开始上传自己项目1.创建新文件夹&#xff0c;克隆项目地址2.上传文件3.成功运行并上传的界面 报错1.fatal: unable to access https://github.com/ssrzero123/STF-YOLO.git/: error setting certificate fi…

mars3d开发过程中点击面图层飞行定位,设置俯仰角度后,layer.flyTo({没有生效的排查思路

mars3d开发过程中点击面图层飞行定位&#xff0c;设置俯仰角度后&#xff0c;layer.flyTo({没有生效的排查思路记录&#xff0c;给大家提供一下以后排查定位问题的方向 问题场景相关代码&#xff1a; 1.项目本身代码&#xff1a; 2.精简了关键性代码后&#xff0c;就可以去ge…

39-数组 _ 二维数组

39-1 二维数组的创建 行和列编号依旧是从0开始&#xff1a; //arr数组&#xff1a; //1 2 3 4 //2 3 4 5 //2 4 5 6 //三行四列int main() {int arr[3][4]; //存放整数char arr1[5][10]; //存放字符return 0; } 39-2 二维数组的初始化 创建之后&#xff0c;利用初始化赋值…

MySQL-多表查询-练习

练习 1.写一个查询显示所有雇员的 last name、department id、anddepartment name。 SELECT e.LAST_NAME,e.DEPARTMENT_ID,d.DEPARTMENT_NAME FROM employees e,departments d WHERE e.DEPARTMENT_ID d.DEPARTMENT_ID;2.创建一个在部门 80 中的所有工作岗位的唯一列表&#x…

我与C++的爱恋:模板初阶和STL库

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​朋友们大家好&#xff0c;本篇文章介绍一下模版和对STL进行简单的介绍&#xff0c;后续我们进入对STL的学习&#xff01; ​ 一、模板 1.泛型模板 泛型编程&#xff1a;…

PotatoPie 4.0 实验教程(23) —— FPGA实现摄像头图像伽马(Gamma)变换

为什么要进行Gamma校正 图像的 gamma 校正是一种图像处理技术&#xff0c;用于调整图像的亮度和对比度&#xff0c;让显示设备显示的亮度和对比度更符合人眼的感知。Gamma 校正主要用于修正显示设备的非线性响应&#xff0c;以及在图像处理中进行色彩校正和图像增强。 以前&am…

unity学习(91)——云服务器调试——补充catch和if判断

本机局域网没问题&#xff0c;服务器放入云服务器后&#xff0c;会出现异常。 想要找到上面的问题&#xff0c;最简单的方法就是在云服务器上下载一个vs2022&#xff01; 应该不是大小端的问题&#xff01; 修改一下readMessage的内容&#xff0c;可以直接粘贴到云服务器的。 …

AIGC技术的伦理与风险探讨:现状与未来

如何看待AIGC技术&#xff1f; 简介&#xff1a;探讨AIGC技术的发展现状和未来趋势。 随着人工智能的迅速发展&#xff0c;AIGC&#xff08;Artificial Intelligence in General Computing&#xff09;技术作为智能计算的一种形式&#xff0c;正逐渐渗透到我们的生活和工作中…

firebase:一款功能强大的Firebase数据库安全漏洞与错误配置检测工具

关于firebase firebase是一款针对Firebase数据库的安全工具&#xff0c;该工具基于Python 3开发&#xff0c;可以帮助广大研究人员针对目标Firebase数据库执行安全漏洞扫描、漏洞测试和错误配置检测等任务。 该工具专为红队研究人员设计&#xff0c;请在获得授权许可后再进行安…

OpenCV添加文字和水印------c++

添加文字 bool opencvTool::addText(cv::Mat& image, const std::string text, const cv::Point& position, double fontScale, cv::Scalar color, int thickness, int fontFace) {cv::putText(image, text, position, fontFace, fontScale, color, thickness);return…