跨云厂商的不停机数据库迁移!使用 NineData 就可以了
近日,Google 私有云发生重大故障,在维护 UniSuper 客户配置,误删除所有数据(包括异地备份数据)。随着越来越多的企业开始采用多云架构,实现跨云厂商的无停机数据库迁移变得至关重要。
其实,所有企业都有这样的烦恼和数据风险。如何在不影响线上业务的前提下,将数据从当前云平台完好无损地迁移到其他云平台,实现无缝的业务迁移成为了关键挑战。
这是一个比较普遍的需求,在云厂商众多的市场环境下,各种云在售价、性能、功能、售后等方面都存在较大的差距,很难找到一朵在所有方面都最佳的云。因此,出于以下各个方面的考虑,跨云迁移成了许多企业的选择:
跨地域容灾:将不同地域的数据库多活节点分布在不同云厂商,可以为重要的数据提供额外的保障。
成本优化:各云厂商之间的定价策略以及服务内容不同,通过从当前云迁移到他云,企业能够获得更具竞争力的定价或更优的服务,实现企业的成本优化。
避免被供应商锁定:过度依赖单一云厂商,例如将企业所有的数据源都托管到同一朵云,可能导致被长期深度锁定,无法脱身。将不同的业务数据跨云厂商分布可以降低这种风险,使组织能够更加灵活地选择合适的云服务提供商。
跨云迁移存在哪些问题?
尽管跨云迁移是一个很普遍的需求,但是实际操作起来并不太简单,大部分云厂商提供的配套迁移产品只进不出,即只针对自建库上自身云提供了良好的支持,但对于从自身云迁出的需求,往往无法满足。
出于安全性方面考虑,云数据库通常是封闭的内网环境,在配套迁移产品无法提供迁出支持的前提下,想要迁移数据必须得开启公网访问地址,而这一举动无疑给不法分子提供了攻击数据库的绝佳良机,等待企业的可能会是数据库被攻陷,重要的数据遭到泄露,更有甚者数据直接被清空,多年的经营成果毁于一旦。
除此之外,还有一系列企业不得不考虑的问题:
业务的可用性:迁移必须在不影响业务的前提下进行,换句话说,迁移时不能停机,那需要考虑的事情就非常多了:存量和增量数据如何完整迁移?如何处理迁移时的性能波动?如何实现应用程序的平滑切换?等等。
表结构初始化及变更联动:当待迁移表数量巨大,且迁移过程中源库发生 DDL 操作的情况下,如何实现高效且稳定的数据库迁移无疑是一大挑战。
迁移数据质量:大规模数据搬迁过程中,如何保障数据一致性;当业务迁移切换异常情况下,如何有效回滚保障业务的可用性。
迁移失败如何止损:不同的云在功能与性能上表现迥异,迁移复杂度较高,当业务出现迁移失败的情况下,如何有效保障业务的可用性也是业务需要考虑的重点问题。
因此,我们需要一个不用开公网、功能全面、稳定、快速、实时监控迁移任务状态,并且保证迁移结果一致性的工具。
怎么解决跨云迁移问题?
那么它说来就来了,NineData 的数据复制功能专门针对上述痛点设计,我们先来看看 NineData 的一些特性:
多云厂商支持:集成各个云厂商的私网环境,迁移无需在云数据库端开启公网访问链接,对于比较不常见的云厂商,还提供了网关功能,同样可以免开公网直接访问到数据库,让迁移链路安全又高效。
迁移过程业务不停机:NineData 提供结构迁移、全量数据迁移及基于 redo log 的 CDC 增量数据迁移能力。在数据库迁移过程中,源端 oracle 可正常提供服务。NineData 可自动完成结构迁移、全量数据迁移,并自动启动 redo log 的实时监听、采集、解析及复制能力,对于源端的增量更新数据会被实时复制到目标端中。当 NineData 进入到增量数据迁移阶段且复制无延迟时,业务可以在目标端中进行只读验证,并借助 NineData 数据对比工具进行数据一致性验证。业务验证通过后,可进行业务停机切换。由此可见,整个迁移过程业务停机时间非常短。
强劲的复制性能:在数据库迁移过程中,迁移速度无疑是影响业务能否成功切换割接的重要因素。NineData 基于日志分析、智能分片、动态攒批、数据合并、特有数据格式等技术,有效保障全量数据复制、增量数据复制的性能。当前 NineData 全量复制性能高达 200 GB/小时,增量数据复制性能高达 2 万记录/秒。
完善的迁移回滚方案:不同云数据库之间在功能、性能上相差较多,涉及大量的业务改造及性能调优,迁移割接的难度极高。为降低割接失败的风险,通常业务都需要做好割接失败的回滚预案。NineData 提供了 CDC 增量复制能力,支持从源端实时采集、解析日志并同步增量至目标端。当业务从源端切换到目标端之前,可以在 NineData 搭建一条从目标端实时回流增量数据至源端的复制任务。基于此复制任务,可以将业务割接完成后产生的新数据同步回流至源端,使源端保留完整的业务数据。一旦出现因目标端的功能或性能导致的业务运行问题,可随时将业务回切回源端,有效规避业务迁移故障。
基于上述能力,NineData 可轻松解决不同云厂商之间的迁移问题,下面来看看怎么操作。
步骤一:录入源和目标数据源
登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要的云厂商。
![](https://static001.geekbang.org/infoq/f8/f84c1f70824cd89281b8567013f31028.png)
根据页面提示,通过私网的方式录入数据源,然后单击创建数据源完成创建。重复此步骤,完成源数据源和目标数据源的录入。
![](https://static001.geekbang.org/infoq/85/856b79b0c6ddeaceae18b2921c958651.png)
步骤二:配置同步链路
登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制。
![](https://static001.geekbang.org/infoq/e3/e3f04e4e387abef10e7bed7a24c3de7f.png)
根据页面提示配置复制任务,为保证完整将源端的全量数据和增量数据迁移至目标端,需要在复制类型处勾选结构复制、全量复制和增量复制。
![](https://static001.geekbang.org/infoq/f4/f451584ba26c2c927f9b45ea253bd124.png)
配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时迁移源端中新增的增量数据,所有新写入的数据都将一条不漏地同步到目标端,每当目标端的增量数据追平源端时,任务面板中会显示延迟 0 秒,代表当前目标端中的数据是最新的。
![](https://static001.geekbang.org/infoq/99/998a9722a651cb21b237eb03e318f34c.png)
步骤三(可选):校验目标端同步数据的完整性
除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。
登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。
![](https://static001.geekbang.org/infoq/b5/b5091f756a05380cd33ba600d2d4c5cb.png)
单击数据对比页签,即可展示对比结果(如果步骤二的任务配置中未勾选开启数据一致性对比,则此处还需要单击开启数据对比)。
![](https://static001.geekbang.org/infoq/e5/e57e22dd640dfefd3bfba15cf497e218.png)
您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。
![](https://static001.geekbang.org/infoq/19/19c086a21c53e310a0a42f4bd764946f.png)
步骤四(可选):配置任务异常告警
由于是长期任务,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。
登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。
![](https://static001.geekbang.org/infoq/b5/b5091f756a05380cd33ba600d2d4c5cb.png)
单击右上角的配置告警。
![](https://static001.geekbang.org/infoq/40/40adbdc58b484a0c93c806a71f1ddb32.png)
输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。
![](https://static001.geekbang.org/infoq/85/85b4bdd1ea2890499691710fb57e9a52.png)
总结
通过上述步骤,您即可完整地将您的业务数据从 A 云迁移到 B 云,在增量复制延迟为 0 的前提下,您可以在任何您需要的时间进行业务割接,把业务流量切换到新的云上。
如果您只是需要将 B 云作为一个您业务的多活节点,也可以保留该条迁移链路持续运行,NineData 会保证两端的数据实时保持一致。
至此,您已成功实现了跨云厂商的不停机数据库迁移,最大程度地减少了对线上业务的影响。
评论