PolarDB-云原生关系型数据库的解析与实践(下) | 学习笔记(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习PolarDB-云原生关系型数据库的解析与实践(下)

开发者学堂课程【关系型数据库ACP认证课程:快速学习 PolarDB-云原生关系型数据库的解析与实践(下)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/927/detail/14621


三、PolarDB数据迁移

1、PolarDB数据迁移方案概览

image.png

PolarDB 本身提供了多种的数据的迁移,其实包括后面的同步,提供了多种的迁移跟同步的方案可以满足我们一些比如上云、千云跟同步的一些需求,比如我们支持从 RDS 迁移到 PolarDB 或者从PolarDB 迁移到 RDS ,其实两者是两个方向,就我到你你到我两个方向;也可以支持我们自建的数据库迁移到 PolarDB 或者是第三方的云数据库迁移到 PolarDB 。比如我是在一些其他的友商的云水库里面迁移到 PolarDB 里面来,甚至是 PolarDB 之间的数据迁移都可以支持并且可以在不影响业务的前提下平滑的实现迁移。

平滑的迁移的核心是利用阿里云的数据传输服务 DTS , DTS 的功能主要就是三个阶段,数据迁移部份的功能主要有三个阶段,第一个叫做结构迁移,就是我们把原数据库的一些库表里面的对象的结构定义,迁移到目标库上面,比如像表、视图、存储过程、触发器、函数等等像这些结构性的东西啊 ddl 语句,先迁移过去。然后,全量的迁移就是会把原数据库当前那个时间点的存量数据全部的迁移。在迁移的过程当中,其实原库是不进切的,也就是存的数据很多。那么这时候,原库可以不进切的,因为在迁全量数据的过程当,原库的一些变化的增量数据增量更新,会被 DTS 缓存下来,这时候会有增量迁移,当全量结束以后会有增量更新,通过增量更新就可以实现在某一个时间点,原库跟目标库两者之间能实现实时同步的效果。原库数据跟目标库之间的数据能实现实时的同步。这时候我们在做一个前端的业务去做一个数据库的割接的工作就可以了。这样就能够实现平滑的数据的迁移。


1数据迁移一键升级

image.png

PolarDB 支持把 RDS MySQL 这个版本一键升级到 PolarDB MySQL 引擎。就是原来可能购买的是 RDS ,但现在可以通过 RDS的控制台上的一键升级的按钮就可以直接把原来的RDS升级为 PolarDB  。升级后的 PolarDB 集群跟原来的 RDS 里的账号、数据库、 IP 白名单还有一些必要的参数都会被保留,甚至原来的数据库的连接地址都是一模一样的,所以这个升级对于我们的业务是无感知的。但你可能会有一段时间不能访问,就是说我们业务程序上是不需要做修改的,那么就可以很方便的升级到 PolarDB 里面,并且这个过程是不需要我们去控制DTS去触发一些任务。我们只需要在 RDS 工作台点一键升级,然后就可以完成整个经历的过程,所以这个过程里面数据是零丢失的。并且停机的时间是比较短的,迁移过程,仅闪断一次。就是真正的从 RDS 切换到 PolarDB 的时候,访问链路是变化的。所以这时候必然会有一次闪断,在闪断前还是比较容易解决的。我们的业务里面有自动重联的机制其实就可以了。 

上一代 RDS 原生的关系数据库的这种方案可能在面对我们在云原生时代,可能 PolarDB 会更好的来去支持我们的业务,能够提供更好的性能。所以我们可以选择一键升级,整个过程背后其实还有一句话要讲的就是升级到 PolarDB 以后原来的 RDS 怎么办。其实升级过去以后,我们原来的 RDS 不再需要,比如跑了一段时间,发现我们的业务跑的已经很稳定了,这时候不再需要原来的 RDS 。我们可以去申请这个原有的 RDS 的退款,我们可以通过工单的方式去申请这个退款,这样可以平滑的整个迁移过去。

一键升级对 RDS 的版本有一些小小的要求,因为 RDS 有很多的分支、很多的版本。目前支持一键升级的都是高可用版的,单机基础版是不支持的,支持的是5.6、5.7的高可用版。另外有一个小的地方要注意,就是如果 RDS 的高安全模式已经开通的话,那么这时候,我们一键升级的时候,需要在 RDS 里面创建一个高权限账号,或者是先把这个代理状态关闭,切换为高性能模式,才能进行一键升级,有这么一个要求。


(2)数据迁移:一键克隆

image.png

一键克隆和一键升级有点像,是把当前的 RDS MySQL 上面的数据一键克隆到新的 POLARDB MySQL 集群里面,这个操作会新建一个跟源 RDS 实例的数据一模一样的 POLARDB 集群,同时,它也会包含原来的 RDS 实例里面的账号、数据库、 ID 白名单和一些其他必要的参数。与一键升级不同的是,一键升级是支持增量数据同步到 POLARDB 集群的,而一键克隆是增量数据是不同步的。

一键克隆的方案的亮点是这个过程是不需要成本的,这些数据也是零丢失的,所以两者的区别就是对增量数据的处理上有一些区别。所以,无论是升级还是克隆,两者要能够正常去发起的前提约束是一样的,跟一键升级的约束是一样的,同样也要求这个 RDS 必须是高可用版的5.6、5.7的。并且,它必须是属于没有打开数据库代理模式的,还有一点就是原库的元素的引擎,数据库的表引擎必须是 INNODB ,其实 RDS 里面默认的就是 INNODB ,所以一般问题不大。


(3)数据迁移:PolarDB 之间数据迁移

image.png

同样通过 DTS 实现,就是从 DTS 把一个 PolarDB 集群的数据迁移到另外一个 PolarDB 集群里面,整个过程也是利用 DTS 数据迁移的三大阶段的能力结构迁移,全量迁移跟增量迁移。这三个阶段只要有机的组合就能够实现接近于临停机的动作。

通过 DTS 数据迁移的过程里面有一些必要的注意事项。上图列的注意事项,并不是说只有在 PolarDB 之间进行数据迁移的时候才是这样子的,我们使用 DTS 去进行数据迁移的时候,这些注意事项基本上都是成立的。

首先,创建原集群和目标集群,或者原库和目标库,创建原集群或者目标集群,另外还有一个小的约束条件,就是我们创建目标集群的时候,在选择存储空间时,一般,我们要不小于原集群的存储空间,这样才能确保我们迁移的成功。更好的情况是推荐我们目标集群的选择的存储空间要比原集群的存储空间要略大一些,因为它可能会有一些中间数据,临时数据,这样能够确保我们迁移的成功率。

第二,增量数据进行迁移的时候,需要原集群开启 Binlog ,这就要求我们原集群里面的 Binlog 日志进行保留,一般来讲, DTS 它会要求本地 Binlog 日志的保留的时间,应该要大于20小时以上的,默认应该是七天。不改的话,默认是七天,有改的话,那最好是给它改回去。因为,如果没有 Binlog ,增量的迁移肯定就会出现一些丢失的情况,所以可能会出现一些极端情况下,会有一些像数据不一致的,或者丢失的情况会出现。

迁移失败的任务, DTS 会自动去触发, GPS 自己本身具有一些高可用的能力,并且,它也会有一些失败自动重试调度的一个能力。

业务切换到目标集群的时候,需要先停止或释放迁移任务,避免原端的数据覆盖目标集群的数据。

用于数据迁移的最后账号需要有补写权限。


(4)数据迁移:RDS 迁移至 PolarDB

image.png

只是场景不同,整个套路基本是一样的。通过 DTS 把 RDS 的数据迁移到 PolarDB ,同样也是利用了全量、增量、结构,这三个争议的过程。从账号的权限上来看,还是一样的,就是对于这个原始力,是需要读写,目标实例,其实我也是需要有一定的读写的一些权限,我们后面会有一些表格列出需要的权限。

上图列了几个阶段,其实这些整体的套路基本上是这样的,就是这么一个过程。首先我们在 DTS 上创建一个迁移的任务。

然后,我们在这些任务里面的第一步,配置资源实力和目标实例的一些信息,原库的信息,数据库的信息,原库的信息需要选,实力类型: PolarDB、RDS 等,接入的实力的地区:阿里云上,然后是实例 ID,其实选择地域以后,它自己会帮你侦测出来,你就选择你的原库或者目标库就可以了,最后的账号跟密码应该提前设置好。然后通过测试链接点一下,测试通过以后就可以通过授权白名单到下一步,因为访问数据库都是需要有白名单的,所以里面的原实例的信息,目标集群的信息,因为从 RDS 到 PolarDB ,所以原实例就是原 RDS 的实例,目标集群就是目标的 PolarDB 的集群。如果是 PolarDB 到 RDS ,就反过来原集群的信息、目标实例的信息是一样的,这过程就是配置源的信息测试有没有,通过配置目标的信息测试有没有通过,然后授权白名单进入下一步。

下一步,我们要选择迁移的类型跟对象。迁移类型包括全量、增量跟结构这三种迁移的类型。迁移的对象包括整个库或者若干个库,若干个表,就是你的库表列都可以作为迁移的对象,这个力度都可以这么去选择。

再下一步就是预检查,并启动。迁移任务在正式被启动的时候,之前会先进行一些预检查,会有一些预检查项,只有所有的预检查项目全部通过以后才会正式的启动迁移的任务。

如果检查失败,它就会告诉你失败的一些详情,我们就要根据这个失败的提示去进行一些修复的动作。

然后,预检查全部通过,进度显示百分百以后,就会到下一步,确认DTS 的购买信息,然后我们可以选择小中大,不同的性能的迁移规格。因为不同的规格的迁移的性能的速率是有一些不一样的,费用也不一样。我们可以根据业务场景来进行选择,之后,购买以后点击启动,这个迁移的任务才真正启动。然后等待数据的迁移到同步的完成就可以了。


(5)数据迁移:本地 MySQL 迁移至 PolarDB

image.png

过程基本上我们在前面的讲解,大家可以看到套路都是一致的,就是我可以利用 DTS 来实现本地不停服的情况下,利用 DTS 三个阶段的有机组合,就能够实现数据迁移到目标 PolarDB 的集群上。

迁移的顺序,正常来讲就是结构先迁,再迁全量的数据,然后再迁增量的数据,之后,实现同步的效果。

关于权限的要求,基本上与上图差不多。对于原实力来讲,结构迁移,只需要有查询权限就可以。同样的全量迁移,也是只需要有查询权限就可以了。有增量迁移的话就需要有一些书法权限和一些复制权限。对于目标端来说,肯定都是需要有读写权限。从权限上,基本都是这样的。

(6)数据迁移:PolarDB 迁移至 RDS

image.png

从 PolarDB MySQL 版本迁移到 RDS MySQL 版本,过程也是一样,包括结构迁移、全量迁移、增量迁移。为了保证迁移数据的一致性,在开始迁移之前,我们建议停止写入数据到 PolarDB 的集群。另外,目标实例的存储空间,应大于 PolarDB 集群的已使用空间。

你说我的业务不能停,那我能不能实现接近于不停机的迁移呢?其实理论上也是可以实现的。只是说对于DTS三个阶段的控制,我们自己就要特别的小心。


(7)数据迁移:ECS 自建 MySQL 迁移至 PolarDB

image.png

ECS 自建 MySQL 迁移至 PolarDB ,库存其实都是类似的

关于 PolarDB 的数据迁移,其实万变不离其中,我们就是好好的、灵活的去利用我们 DTS 的功能,就能够实现上面所列举的这五类的场景。无论是从 RDS 迁到 PolarDB ,或者是从 PolarDB 迁到 RDS ,或者是自建库迁到 PolarDB,或者是其他的云数据库迁到 PolarDB,或者是 PolarDB 之间进行互相迁移都是可以的。


四、PolarDB数据同步

PolarDB 的数据的同步。

image.png

PolarDB 结合 DTS 的数据库同步功能,我们也同样的提供了多种数据的同步的方案。可以实现,比如从 RDS 同步到 PolarDB 或者是从 PolarDB 同步到 RDS ,或者是 PolarDB 之间进行数据同步,或者 PolarDB 同步到比如其他的一些数据仓库或者 ADB 。 ADB 也是通过协议的,所以可以直接同步过去。所以,不同的上云,迁云同步的业务需求。其实 PolarDB 结合我们的阿里云设计程序和DTS都是比较方便的实现。


1、PolarDB通过Binlog实现实时同步

image.png

第一个是 PolarDB ,它主要是通过 Binlog 实现实时同步的。因为,它是完全兼容这个开源的 MySQL 的数据协议的。默认情况下,它是使用了物理日志来代替 Binlog 。但是,因为整个 MySQL 的生态很多时候是用 Binlog 代替做数据的同步或者传输。所以,为了跟这个生态相融合, PolarDB 也提供了开启 Binlog 的功能,方便我们去连接到 ES、ADB 这种分析型数据库等等。我们也可以搭建 PolarDB 到 RDS、RDS 到 PolarDB 或者是 PolarDB 之间的数据的实时同步。

在这块里面,有几点要注意一下,

开启 Binlog 以后, Binlog 空间也是属于我们 PolarDB 集群存储空间的一部分,所以它也会占用一部分的存储。

Binlog 默认保留的时间是两周,超出两周以后 Binlog 的文件会被自动删除。

开启 Binlog 以后会导致写的性能下降,读的性能是不受影响的。这个地方隐含是个什么意思呢?就是我们开启 Binlog 也好,甚至是比如我们通过 DTS 迁移也好。我们发现它其实都是会占用我们的源库,或者比如 ITTS 的话,可能会占用目标库的一定的读写资源,所以它就有可能会导致,我们的源库或者目标库的数据库的负载是会有一些上升的。

有一个隐含的条件就是我们在进行 Binlog 的同步,或者数据迁移的时候,我们就要考虑到数据库是不是会由于性能被影响,导致我们出现一些问题。尤其是我们一些规格比较低,或者规格不低,但是业务量非常的大的情况下,比如源库有大量的慢车口,或者是没有见索引,或者存在死锁等等,导致源库的计算量很大,负载很高。这时候,我们再去开启 Binlog 或者这时候再用 DTS 迁移同步的时候,那么毫无疑问,那是会给我们的数据库的压力进一步去提升的,甚至压力提升到一定的程度上,会导致我们的数据库可能就挂了。

这里面有个隐含的条件就是我们在做同步或者迁移的时候,需要去考虑去评估,我们的源库的性能,目标库的性能。

一个比较简单的准则,我们尽量都在业务的平峰期、低谷期的时候进行数据的迁移或者同步的操作。会更好一点。


2、数据同步:RDS与PolarDB之间数据同步

image.png

从 RDS 到 PolarDB 之间的进行数据同步,同样呢也是通过 RDS 实现的。

数据同步其实就是增量数据的同步。那么利用 DTS 数据同步的能力,就可以很容易去实现实时的同步。

RDS 跟 PolarDB 之间的数据同步大致可以从同步架构上分为两大类型。

一个是单向的同步。就是由原端到目标端进行单向的同步或者是双向的同步,就是两个实例之间去进行双向同步,你同步我,我同步你。

在单向同步的这个架构里面,有这么几种情况,一个是一对一的单向,A 到 B。

一个是比如一对多的单向,也是一种,或者级连的单向同步啊。级连的单向同步就是 A 同步到 B , B 再同步到 C ,所以在这里面,我们如果要实现这个效果,我们发现,我们至少要买三个实例,就是要有一个原实例跟两个同步实例。一对多的话就是实例 A 同步到多个B C D 。这种情况下一对多,就要购买多个同步实例,三个 B C D 。应该是三个实例。

还有多对一,多对一也是可以的,比如 B 到 A , C 到 A 或者 D 到A ,这是多对一的单向同步。双向同步,就是目前只支持两个 MySQL 数据库之间的双向同步暂时还不支持多 MySQL 数据库之间的两两双向同步。

这是关于 RDS 跟 PolarDB 之间进行数据同步的一些讨论,事实上 PolarDB 之间的数据同步的讨论,其实架构也是跟这个基本是一致的,或者是 RDS 跟 RDS 之间数据同步的架构其实基本上也是一致的。


五、回顾与总结

image.png

首先,介绍了 PolarDB 的产品简介。产品简介里面主要有三个小节,一个是产品的综述, PolarDB 是一个阿里云自研的新一代的云数据库,它本身是计算跟存储是分离的。深度百分百的兼容 MySQL 的协议。然后 PolarDB 的一些产品的序列,给大家介绍了集群版、单节点、历史库、多组架构等等。然后,又讲了 PolarDB 的一些应用场景,比如,在一些业务的高并发的场景、一些大容量的场景,或者是一些 A P跟 TP 相结合的一些新形态。

在功能概览这块就是先列了一下,基本管理里面的一些要点。那这块我们是在基本管理去展开的。在第二个小节里面介绍了 PolarDB 的一些架构跟核心技术,架构上有几个特点,易写多读、读写分离,然后 PolarDBFS 共享的分布式存储,计算与存储分离等等。

核心技术比如 PolarDB 的物理复制的一些技术、切换的一些技术和存储的一些技术。昨天很大的一部分的篇幅是在 PolarDB 基本管理这块儿,我们分别从 PolarDB 的实例管理、账号管理、连接数据库的方式,比如我们设置白名单,然后通过一些 DMS ,或者通过程序,通过一些手段,去连接到 PolarDB 上面来。 PolarDB 的一些参数,我们可以进行设置。 PolarDB 也提供了一些监控与诊断的一些页面,我们可以看到一些实时性能,锁分析、空间分析等等。

关于 PolarDB 的一些安全,因为大部分阿里的产品大讨论安全都是事前可以做什么,事中有什么安全机制,事后有什么安全机制。 PolarDB 的核控心的管理。 PolarDB 的访问与存储,讲了 PolarDB 的访问方式,可读可写的方式或者只读的方式。地址有集群地址和主地址。 PolarDB 也有数据库代理,数据库代理也支持读写分离,负载均衡、连接池等等能力。存储类型主要讨论了数据保存的费用问题,计算包、资源包。最后讲了数据备份与恢复、迁移与同步。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
3月前
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
90 0
|
13天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
14天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
5月前
|
Cloud Native 关系型数据库 分布式数据库
《阿里云产品四月刊》—瑶池数据库云原生化和一体化产品能力升级
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
100 1
|
3月前
|
Cloud Native 数据库 开发者
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
38 1
|
3月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
104 1
|
4月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
6982 2
|
4月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:保险数据分析实践
本文以公开的保险数据集为例,示例了基于云原生数据库PolarDB上,在保险理赔场景下,执行图查询来发现异常理赔记录和欺诈团伙:例如,查询与欺诈保单有相同理赔病人的其他保单,或者找出欺诈保单的投保人社交关系,以便进行欺诈预警。PolarDB在关系型数据库的基础上,提供了图分析能力,为企业的统一数据管理和分析,提供了强有力的支撑。