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

news2024/12/30 2:20:39

功能背景

随着企业业务数据的快速增长,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}}/

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

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

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

相关文章

雷雨天气频繁,输电线路如何防雷?避雷器在线监测装置智能护电

春日将近&#xff0c;夏日绵长。再过几天便到立夏了&#xff0c;根据《二十四节气歌》的记载&#xff0c;立夏的到来意味着夏季的序幕正式拉开。立夏之时&#xff0c;万物开始增大、成长&#xff0c;是生命力旺盛的体现。此时气温回升快&#xff0c;炎热的气息逐渐袭来&#xf…

优化打印性能:为您的 Magicard 打印机选择合适的清洁用品

Magicard打印机是许多企业和组织中信赖的首选&#xff0c;其可靠性和打印质量让其成为许多人的首选。然而&#xff0c;为了保持这种可靠性和质量&#xff0c;定期清洁和维护是至关重要的。在这篇文章中&#xff0c;我们将介绍不同型号的Magicard打印机以及它们所需的正确清洁卡…

CTF-Show nodejs

web334 下载附件&#xff0c;有两个文件 在Character.toUpperCase()函数中&#xff0c;字符ı会转变为I&#xff0c;字符ſ会变为S。 在Character.toLowerCase()函数中&#xff0c;字符İ会转变为i&#xff0c;字符K会转变为k。 所以用ctfſhow 123456登录就可以出flag了 w…

磁共振质子密度脂肪分数(MRI-PDFF)适用于无创评估肝脂肪含量 目前其已完成市场化

磁共振质子密度脂肪分数&#xff08;MRI-PDFF&#xff09;适用于无创评估肝脂肪含量 目前其已完成市场化 磁共振质子密度脂肪分数&#xff08;MRI-PDFF&#xff09;又称为MRI肝脏脂肪定量&#xff0c;是一种运用磁共振技术对整个肝脏中的脂肪进行客观、定量、无创评估的成像方法…

react,Chart

一、基础图&#xff1a;https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts&#xff0c;然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …

如何正确进行Lazada、速卖通、Shopee店铺补单?这些建议助你提升排名!

如今&#xff0c;在Lazada、速卖通和Shopee等电商平台上开店的卖家越来越多&#xff0c;保持店铺稳定运营成为每个卖家都需思考的问题。现在让我们一起来探讨一下&#xff0c;哪些运营上需要注意的要点。 1、精心挑选产品 跨境电商与国内电商的核心都在于产品。只有选择到优质…

spark3.0.0单机模式安装

注&#xff1a;此安装教程基于hadoop3集群版本 下载安装包 下载spark3.0.0版本&#xff0c;hadoop和spark版本要对应&#xff0c;否则会不兼容 用xftp上传Linux虚拟机&#xff0c;上传目录/bigdata&#xff08;可修改&#xff09; 解压 tar -zxvf /bigdata/spark-3.0.0-bin-h…

Rust Web开发实战:构建高效稳定的服务端应用

如果你厌倦了缓慢、占用大量资源且不稳定的模板化Web开发工具&#xff0c;Rust就是你的解决方案。Rust服务提供了稳定的安全保证、非凡的开发经验&#xff0c;以及能够自动防止常见错误的编译器。 《Rust Web开发》教你使用Rust以及重要的Rust库(如异步运行时的Tokio、用于Web…

AList 网盘挂载,在线浏览各种网盘资源,部署并挂载到本地——教程(Linux+Windows)

目录 下载&#xff1a;Tags alist-org/alist GitHub Linux中安装和挂载网盘 使用docker安装alist ​编辑 安装davfs2 将网盘挂载到本地 Windows中安装和挂载网盘 下载&#xff1a;Tags alist-org/alist GitHub 选择最新版下载&#xff0c;也可以选择其它版本 官方文…

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网&#xff08;IoT&#xff09;设备中的典型应用案例包括但不限于以下几个方面&#xff1a; 1. 环境监测系统&#xff1a; 使用传感器来监测温度、湿度、气压等环境因素&#xff0c;并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…

快递费

快递费 题目&#xff1a; 如果正在寄快递&#xff0c;他了解到快递在 1kg 以内的按起步价20元计算&#xff0c;超出部分按每kg按1元计算&#xff0c;不足1kg部分按1kg计算。如果加急的话要额外付五元&#xff0c;请问总共要支付多少快递费 输入描述&#xff1a; 第一行输入…

《数据结构》(学习笔记)(王道)

一、绪论 1.1 数据结构的基本概念 数据&#xff1a;是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有输入到计算机中并被计算机程序识别和处理的符号的集合。&#xff08;计算机程序加工的原料&#xff09;数据元素&#xff1a;数据的基本单位&#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;简单目录…

在ubuntu上搭建nexus私有仓库(指定版本以及jdk!)

前言 本来以为搭建一个nexus随随便便就好了&#xff0c;但是遇到了最新版本根本没办法在jdk17下面正常运行—起码我调了一下不知道怎么运行&#xff0c;我才知道。。。不升级版本其实是很有道理的。 这一篇是最新版本的尝试&#xff1a; 在ubuntu上搭建nexus私有仓库[失败草稿…

红米K40手机刷机详解

了解什么是卡刷、什么是线刷 卡刷&#xff0c;就是把系统包放到你手机的SD卡&#xff0c;这一步&#xff0c;不用手机解BL锁&#xff0c;不用root&#xff0c;直接小米助手下载就可以刷。线刷就是用数据线连接电脑&#xff0c;通过XiaoMiFlash直接刷到手机&#xff0c;这一步权…

精酿啤酒:酿造工艺中的数据监测与智能化决策

在啤酒酿造工艺中&#xff0c;数据监测与智能化决策是提高生产效率和产品质量的关键因素。Fendi Club啤酒深知这一点&#xff0c;因此在其酿造过程中广泛应用数据监测技术和智能化决策系统&#xff0c;以实现精细化管理和持续改进。 Fendi Club啤酒通过数据监测技术对生产过程中…

对抗攻击新手实战

实战核心思想&#xff1a; 训练x(输入&#xff09;&#xff0c;让第一次训练好的&#xff0c;正确的y去和我们想要误导机器去识别的类别的那个y做一个损失函数【loss torch.mean(y[:, 248])】&#xff0c;不同的是&#xff0c;我们其实希望是一个梯度上升&#xff0c;给图片加…

redission原理笔记

加锁成功的线程&#xff0c;将UUID和线程id和key绑定&#xff0c; 加锁成功后&#xff0c;内部有一个看门狗机制&#xff0c;每隔十秒看下当前线程是否还持有锁&#xff0c;延长生存时间。 没有获取锁的就一直自旋等待&#xff0c;直到超时。 如果redis是主从同步的&#xff0…

呆马科技——智慧应急执法监管平台

在当今社会&#xff0c;安全生产的重要性日益凸显。对于各级政府和企事业单位&#xff0c;当务之急是如何高效地对突发事件进行执法管理。平台应运而生&#xff0c;旨在通过信息化、智能化技术&#xff0c;提升安全管理的效率与准确性。 一、平台特点 整合各类平台的信息资源&…

B+tree - B+树深度解析+C语言实现+opencv绘图助解

Btree - B树深度解析C语言实现opencv绘图助解 1. 概述2. Btree介绍3. Btree算法实现3.1 插入分裂 3.2 删除向右借位&#xff08;左旋&#xff09;向左借位&#xff08;右旋&#xff09;合并 3.3 查询和遍历3.3.1 查询3.3.2 遍历 3.4 优化优化1(匀key)优化2(升级key)优化3(拓展兄…