MySQL数据源不停机迁移到AWS RDS MySQL

就在近期,谷歌云捅了个大篓子,误删除了一家投资公司(Unisuper,管理着800亿美元基金)在谷歌云所有地域的所有数据,删得相当彻底,连备份数据都没给人家留一个。

Unisuper 是一家澳大利亚退休金基金,为澳大利亚高等教育和研究部门的员工提供退休金服务。截至 2023 年 6 月 30 日,该基金拥有超过 615,000 名会员,管理着 1,240 亿澳元(800亿美金)的基金。

事件直接导致了 Unisuper 的该基金服务全面瘫痪,截止今日(5 月 12 日)已逾一周,60 万会员的 800 亿美元无法支取。幸运的是,Unisuper 公司事前就考虑过可能存在的风险,并没有把自己吊死在一棵树上,而是在谷歌云之外的其他云上也保留了数据备份,此举直接挽救了他们的基金业务,让系统有了可恢复的余地。

本次事件在业界引发了针对云计算服务提供商数据安全性的广泛关注和担忧,虽然云计算为企业提供了灵活性和便利性,但是将业务数据保管在一朵云上是非常不安全的。对于 Unisuper 这样的大型金融机构来说,本次事件造成的信用和声誉影响将会非常深远,客户也会产生诸如此类的疑问:“我的钱安全吗?”、“我的信息安全吗?”、“我凭什么相信这种事件不会再次发生?”。

如何防止云厂商一键删库?​

虽然发生的概率不大,但一经发生,对企业将会是致命打击。本次谷歌云事件无疑为所有在云上托管业务的企业和组织敲响了警钟,他们不得不重新审视一个问题,那就是如何确保企业的命脉:业务数据的安全性。

我们今天要讨论的一个解决方案,就是 Unisuper 采用的多云策略,但是 Unisuper 采取的多云策略其实是有缺陷的。

由于 Unisuper 仅仅在其他云上保留了备份数据,并且可能该备份数据并不是实时数据,因此后续花了一周多的时间才完成恢复。

而我们要采取的是更加完善的多云策略,即在其他云上维护一个数据库实例,通过一条实时同步链路实时将主库的数据源源不断地同步到该数据库实例中,保证两端数据在任何时候都是一致的。

要实现该策略,那就需要把当前云环境中的数据迁移到另一朵云,作为示例,我们本次的迁移目标,是 AWS 的 RDS MySQL。

为什么要选 AWS​

Amazon Web Services(AWS)是全球最全面、应用最广泛的云,从全球数据中心提供超过 200 项功能齐全的服务(摘自 AWS 官网)。

选择 AWS RDS MySQL 作为本文示例的其中一个原因,是 AWS 的安全性,AWS 的核心基础设施是为了满足军事、全球的银行和其他高度敏感性组织的安全要求而构建的。并且 AWS 支持 90 个安全标准和合规性认证,而且存储客户数据的所有 AWS 服务均具有加密数据的能力。

跨云迁移存在哪些问题?​

我们要做的是跨云迁移,听上去好像很简单,但是实际操作起来还是挺复杂的,由于大部分云厂商提供的配套迁移产品只进不出,即只针对自建库上自身云提供了良好的支持,但对于从自身云迁出的需求,往往无法满足。

出于安全性方面考虑,云数据库通常是封闭的内网环境,在配套迁移产品无法提供迁出支持的前提下,想要迁移数据必须得开启公网访问地址,而这一举动无疑给不法分子提供了攻击数据库的绝佳良机,等待企业的可能会是数据库被攻陷,重要的数据遭到泄露,更有甚者数据直接被清空,多年的经营成果毁于一旦。

除此之外,还有一系列不得不考虑的问题:

  • 业务的可用性:迁移必须在不影响业务的前提下进行,换句话说,迁移时不能停机,那需要考虑的事情就非常多了:存量和增量数据如何完整迁移?如何处理迁移时的性能波动?如何实现应用程序的平滑切换?等等。
  • 表结构初始化及变更联动:当待迁移表数量巨大,且迁移过程中源库发生 DDL 操作的情况下,如何实现高效且稳定的数据库迁移无疑是一大挑战。
  • 迁移数据质量:大规模数据搬迁过程中,如何保障数据一致性;当业务迁移切换异常情况下,如何有效回滚保障业务的可用性。
  • 迁移失败如何止损: 不同的云在功能与性能上表现迥异,迁移复杂度较高,当业务出现迁移失败的情况下,如何有效保障业务的可用性也是业务需要考虑的重点问题。

因此,我们需要一个不用开公网、功能全面、稳定、快速、实时监控迁移任务状态,并且保证迁移结果一致性的工具。

怎么解决跨云迁移问题?​

那么它说来就来了,NineData 的数据复制功能专门针对上述痛点设计,我们先来看看 NineData 的一些特性:

  • 多云厂商支持:集成各个云厂商的私网环境,迁移无需在云数据库端开启公网访问链接,对于比较不常见的云厂商,还提供了网关功能,同样可以免开公网直接访问到数据库,让迁移链路安全又高效。
  • 迁移过程业务不停机:NineData 提供结构迁移、全量数据迁移及基于 redo log 的 CDC 增量数据迁移能力。在数据库迁移过程中,源端 oracle 可正常提供服务。NineData 可自动完成结构迁移、全量数据迁移,并自动启动 redo log 的实时监听、采集、解析及复制能力,对于源端的增量更新数据会被实时复制到目标端中。当 NineData 进入到增量数据迁移阶段且复制无延迟时,业务可以在目标端中进行只读验证,并借助 NineData 数据对比工具进行数据一致性验证。业务验证通过后,可进行业务停机切换。由此可见,整个迁移过程业务停机时间非常短。
  • 强劲的复制性能:在数据库迁移过程中,迁移速度无疑是影响业务能否成功切换割接的重要因素。NineData 基于日志分析、智能分片、动态攒批、数据合并、特有数据格式等技术,有效保障全量数据复制、增量数据复制的性能。当前 NineData 全量复制性能高达 200 GB/小时,增量数据复制性能高达 2 万记录/秒。
  • 完善的迁移回滚方案:不同云数据库之间在功能、性能上相差较多,涉及大量的业务改造及性能调优,迁移割接的难度极高。为降低割接失败的风险,通常业务都需要做好割接失败的回滚预案。NineData 提供了 CDC 增量复制能力,支持从源端实时采集、解析日志并同步增量至目标端。当业务从源端切换到目标端之前,可以在 NineData 搭建一条从目标端实时回流增量数据至源端的复制任务。基于此复制任务,可以将业务割接完成后产生的新数据同步回流至源端,使源端保留完整的业务数据。一旦出现因目标端的功能或性能导致的业务运行问题,可随时将业务回切回源端,有效规避业务迁移故障。

基于上述能力,NineData 可轻松解决不同云厂商之间的迁移问题,下面来看看怎么操作。

步骤一:录入源和目标数据源​

  1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要的云厂商。

  2. 根据页面提示,通过私网的方式录入数据源,然后单击创建数据源完成创建。重复此步骤,完成源数据源和目标数据源的录入。

步骤二:配置同步链路​

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制

  2. 根据页面提示配置复制任务,为保证完整将源端的全量数据和增量数据迁移至目标端,需要在复制类型处勾选结构复制全量复制增量复制

  3. 配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时迁移源端中新增的增量数据,所有新写入的数据都将一条不漏地同步到目标端,每当目标端的增量数据追平源端时,任务面板中会显示延迟 0 秒,代表当前目标端中的数据是最新的。

步骤三(可选):校验目标端同步数据的完整性​

除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

  2. 单击数据对比页签,即可展示对比结果(如果步骤二的任务配置中未勾选开启数据一致性对比,则此处还需要单击开启数据对比)。

  1. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。

步骤四(可选):配置任务异常告警​

由于是长期任务,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

  2. 单击右上角的配置告警

  3. 输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。

总结​

通过上述步骤,您即可完整地将您的业务数据从其他云迁移到 AWS RDS MySQL,在增量复制延迟为 0 的前提下,您可以在任何您需要的时间进行业务割接,把业务流量切换到新的云上。

如果您只是需要将 AWS RDS MySQL 作为一个您业务的多活节点,也可以保留该条迁移链路持续运行,NineData 会保证两端的数据实时保持一致,在其中一个云厂商出现故障后,可以迅速将业务切换到另一个云。

至此,您已成功实现了跨云厂商的不停机数据库迁移,最大程度地减少了对线上业务的影响。

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

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

相关文章

C++-逻辑语句

if语句 基本格式: 只有判断结果为true,才会执行后续{}内的代码 if (要执行的判断,结果需是bool型) {判断结果true,才会执行的代码; }if (条件判断) { 如果判断结果为true,会执行的代码; }else{如果判断结果为false…

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天,笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序,帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括: 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤: -使用微信开发…

封装了一个iOS中间放大的collectionView layout

效果图如下所示 原理:就是首先确定一个放大和缩小系数和原大小对应的基准位置,然后根据距离每个布局属性到视图中心的距离和基准点到中心的距离的差距/基准点到中心的距离, 计算出每个布局属性的缩放系数 下面是代码 // // LBHorizontalCe…

英语学习笔记22——Give me/him/her/us/them a .... Which one?

Give me/him/her/us/them a … Which one? 给我/他/她/我们/他们一个…… 哪一个? 词汇 Vocabulary empty a. 空的,啥也没有的    v. 倒空 例句:这个盒子是空的。    This box is empty.    这是个空盒子。    This is an emp…

学习笔记——STM32F103V3版本——HC-05模块控制数码管

一.硬件 1.HC-05模块 2.数码管 3.连接硬件 二.在keil5中的代码 main.c代码: #include "stm32f10x.h" #include "buletooth.h" #include "led.h" #include "sys.h" #include "usart.h" #include "delay.…

HTTP content-type MIME 类型(IANA 媒体类型)

Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用…

数据与结构--AVL树

目录 AVL树的概念 AVL树的性质 AVL树结点的定义 AVL树的插入 AVL树的旋转 左单旋 右单旋 左右双旋 右左单旋 AVL树的验证 AVL树的查找 AVL树的修改 AVL树的删除 AVL树的概念 二叉搜索树虽然可以提高我们查找数据的效率,但如果插入二叉搜索树的数据是…

LFSR线性反馈移位寄存器及Verilog实现

一、LFSR LFSR线性反馈移位寄存器,通常由移位寄存器和异或门组成,主要用于产生伪随机序列等。 线性反馈的含义是各个寄存器的输出通过一个反馈函数连接到第一级触发器的输入;LFSR中的寄存器的个数被称为LFSR的级数。 LFSR分为两类&#xff…

开源的在线JSON数据可视化编辑器jsoncrack本地部署与远程访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

Iphone自动化指令每隔固定天数打开闹钟关闭闹钟

1.业务需求:小z每隔五天有一个夜班,然后下午会有三个小时的休息时间,如果闹钟不响就会错过交班日期,但是如果设置闹钟,iPhone的闹钟只能设定固定循环日期闹钟,或者一次的闹钟,导致要么忘记设闹钟…

【C语言】指针运算

前言 前面在“走进指针世界”中我已经讲解过指针相关的很多前置知识,其实还有一个很重要的部分就是指针的运算。这篇博客,就让我们一起了解一下指针的运算吧! 指针作为变量,是可以进行算术运算的,只不过情况会和整型…

LLM-Llama在 MAC M1上体验Llama.cpp和通义千问Qwen 1.5-7B

Llama.cpp的主要目标是在各种硬件上(本地和云端)实现LLM推断,同时保持最小的设置和最先进的性能。 纯C/C实现,没有任何依赖关系Apple芯片是一级的支持对象 - 通过ARM NEON、Accelerate和Metal框架进行优化对x86架构的AVX、AVX2和…

Go语言的命名规范是怎样的?

文章目录 Go语言的命名规范详解一、标识符命名规范示例代码 二、包名命名规范示例代码 三、变量命名规范示例代码 四、常量命名规范示例代码 五、函数命名规范示例代码 总结 Go语言的命名规范详解 在Go语言中,代码的命名规范对于项目的可读性、可维护性和可扩展性至…

前端菜鸡,对于35+程序员失业这个事有点麻了

“经常看到30岁程序员失业的新闻,说实话,有点麻。目前程序员供求关系并未失衡,哪怕是最基础的前端或者后台、甚至事务型的岗位也是足够的。 事实上,现在一个开出的岗位要找到一位尽职尽责能顺利完成工作的程序员并不是一件那么容…

C++_string简单源码剖析:模拟实现string

文章目录 🚀1.构造与析构函数🚀2.迭代器🚀3.获取🚀 4.内存修改🚀5. 插入🚀6. 删除🚀7. 查找🚀8. 交换swap🚀9. 截取substr🚀10. 比较符号重载🚀11…

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人…

package.json中peerDependencies的使用场景

文章目录 peerDependencies 的使用场景peerDependencies 的使用案例为什么使用 peerDependencies需要注意的事项主要作用 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入&#xf…

DNS服务的部署与配置(1)

一、DNS的定义 1、域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用UDP端口53。 当前&#xff0…

超简单白话文机器学习 - 回归树树剪枝(含算法介绍,公式,源代码实现以及调包实现)

1. 回归树 1.1 算法介绍 大家看到这篇文章时想必已经对树这个概念已经有基础了,如果不是很了解的朋友可以看看笔者的这篇文章: 超简单白话文机器学习-决策树算法全解(含算法介绍,公式,源代码实现以及调包实现&#x…

BL121DT网关在智能电网分布式能源管理中的应用钡铼技术协议网关

随着全球能源结构的转型和智能电网技术的飞速发展,分布式能源管理系统在提高能源利用效率、促进可再生能源接入及保障电网稳定运行方面发挥着日益重要的作用。然而,分布式能源系统内设备种类繁多,通信协议各异,如何高效整合这些设…