视频-数据库 DAS 简介和备份上云方案(三)| 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
简介: 快速学习视频-数据库 DAS 简介和备份上云方案

开发者学堂课程【企业运维训练营之数据库原理与实践课程 :视频-数据库 DAS 简介和备份上云方案(三)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1201/detail/18303


视频-数据库 DAS 简介和备份上云方案


六:数据上云

我们接下来进行第二部分的内容是数据上云,主要是介绍到我们数据上云其中用到的一个非常重要的工具,也叫服务,叫 DTS data transmission service 数据传输服务。我们重点介绍它能实现的一些功能和系统的架构和基本原理。第二块是有一个数据迁移上云的方案,我们可能将一个自建在 Mysql 上,或者是线下的一些数据需要迁移到我们阿里云上的 RDS 数据库中。我们如何进行操作,如何进行需要注意的一些地方。第一个我们首先来介绍 d t s 刚才也说到是数据传输服务,是阿里云提供的一些实时数据流服务。它支持的一些数据库类型非常的丰富,包含了我们的关系数据库,非关系数据库,还有一些我们 OLAP 的分析型数据库,它们之间都是可以进行数据交互的。它主要提供的数据同步,数据迁移,数据订阅,数据集成等等,还可以进行一定的 ETL 功能,所以让我们的数据可以更好的流通,从我们的线下流通到我们的云上,也可以在我们的云上不同的数据库之间进行传输。

image.png

为什么会选择我们的 dts?主要它有非常高的一些优势,这优势这里主要是方便快捷,丰富多样,高性能,还有这些安全可靠。首先第一个方便快捷指的是我们给客户提供了一个可视化的界面,不需要进行我们的一些以前的黑屏的命令操作,或者是一些比较复杂的操作,现在我们是 DTS,是提供界面化的管理,只需要我们在界面上进行任务的一个相应的配置和流程,就可以把一个订阅或者是同步的任务给创建。

第二个是丰富多样,它丰富多样指的是刚才也提到是指首先指圆库和目标库的这些不同的数据库引擎。比如我想从关行到非关行,从关行到lap,这些跨引擎之间的数据传输,这都是支持的。而且数据传输的方式也丰富多样,包括我们的数据迁移,同步、订阅、集成,这些也都是支持的。

第三个就是我们的高性能,采用了我们阿里云自己的高可用的架构,以及高性能的链路,峰值的传输数据可以达到 70 兆每秒,使得我们的传输的速率非常高。最后我们安全可靠,具有容灾鉴权,还有断点续传,还有整个数据的校验,保证我们数据的完整性和一致性。这些功能我们 DTS 这都是全方位支持的。接下来是 d t s 的系统架构,整个系统架构主要是我们可以看到在图中主要的都是 d t、 s 的服务,可能是我们假设是它的缘故,是它的目的库。我们的用户可以通过我们的 DTS 的控制台来去配置我们的相关的一个迁移同步,或者订阅的任务,通过内部的调度系统去匹配到相应的不同的。如果是迁移任务,就会通过我们的迁移系统同步,都会通过我们的数据同步系统来进行数据的同步。另外我们需要有容灾和监控系统来不断的去监视,监听我们的这些任务是否正常。如果出现异常,我们有一个高可用的方案来保证它正常的运行。首先这里要注意的两点就是刚才提到的一个系统高可用属于 TTS 内部的每个模块,刚才提到的每个模块都有主备架构来保证系统的高可用。这里的容灾系统会实时的检测每个节点的健康状况,一旦发现某个节点有异常,就会快速的切换到其他节点。第二块就是数据源地质动态适配,对于数据订阅及同步链路,容灾系统还会监测数据源连接、地址切换等变更操作。一旦发生数据源的连接地址变更,它会自动的去适配数据源。新的连接地址在数据源变更的情况下,保证了链路的稳定性,也是对我们高可用的一个性能的加强。还有原端地址发生变化,它会去自动的去发生检测和变化。

image.png

接下来主要讲 DAS 三大块功能。第一个是 ds 的数据迁移,第二个是数据同步,第三个是数据订阅。不同的功能也需要应对不同的应用的场景。

首先第一个是数据迁移。数据迁移一般用于一次性或者是大批量数据将把它搬到我们的目标库,搬运到我们的目标库。比如一个典型的应用场景,可能是一些客户从原先的它的业务,从我们的 IDC、机房或者是线下要初始化搬迁到我们的云上,它就可以使用我们的数据迁移。但在数据迁移的过程中,它除了今天的时间点进行一个数据迁移,要迁移到大概需要 10 个小时,可能就是这 10 个小时。这个时间点之前的所有数据就是我们一个全量的数据迁移。但是在这 10 个小时之间,有可能我们的源端数据库还会写入一部分数据。这个情况也是存在的,有可能是不写入,也有可能是写入。写入会有我们的一些增量数据。在这 10 个小时之间,有些增量数据,我们 d t s 也是支持将这 10 个小时里面按多写入远端数据库的,这些增量数据也是拉取到我们的目标库。也就是在 10 个小时之后,我们的目标库和源端库的数据是要保证完整的一致的。

结构图里,我们可以很清晰的看到它是有三块,第一块是结构迁移第一个,第二块是全全量的数据迁移,第三个在全量数据迁移以后,如果有增量数据还往源端写入,我们会启用一个增量数据的拉取来存到本地化的地方,直到全量数据迁移完之后,还会把这些增量数据再进行回放到我们的目的库。具体来说,第一个结构迁移是dts需要在目标数据库中重新创建数据结构,数据结构是要和源端的保持一致。对于异构数据库之间的迁移,dts 会解析源数据库的d l 代码,将代码转换成目标数据库的语法,在目标数据库中创建重新的结构。结构对象或者表结构可能RDS, Mysql 迁移到 PG 里,它可能有一些语法的差异。 DTS 的结构迁移会去做这么相应的一个转化工作。

第二个是全量数据迁移的具体工作是 DTS 会将原数据库的存量数据全部迁移到目标库,源数据库保持运行状态,且迁移过程中仍有数据不断的更新,也没有关系。这里会使用增量数据读取模块来获取全量数据迁移过程中发生的数据更新,刚才已经提到如果当全量数据迁移开始时,增量数据模块将会被激活。

第三个是增量数据迁移。当全量数据迁移完成后, DTS 会检查本地存储的增量数据,并重新格式化,将数据更新到我们的目标数据库。在此过程中,将一直持续到所有进行的数据变更都复制到目标数据库,来保证我们的源端和目的端的数据是完全一致的。经过这三个部分,我们的数据就会完全的迁移到我们目标库。

image.png

第二部分是我们的数据同步,也是将我们的源端库的数据变到我们的 MySQL 或者是迁移到我们的目的库。但是它为什么要同步?第一个是它的时效性要求比较高,比如我可能现在a 时刻远端实例有一个发生了数据的变化,可能我在极短的时间内会希望在 b 库中看到。这些的应用场景也很广泛,比如我们的一些容灾或者是多活的这么一个场景下,我们都希望 a 远端的一个数据库的变化,我们在极短的时间在 b 端看到它。

当然这些数据的变化也有很多,比如我可以插入一条数据,或者删除一条数据,或者是做一些更新的一些操作,这都是它的特点可能没有像数据迁移那种大批量的进行,但是他要求的一个时效或者是个数据的准确安性要求比较高。它的同步的过程中包括两块,第一个是同步初始化数据的实时同步。初始化就是将源端数据库存量数据加载到目标数据库。第二个是数据的实时同步,这是真正进行数据同步的过程,它会将这在进行当中的一些数据变更保加载到我们的目标库,来保证源端数据库和目标数据库这几个数据是一致的,他在同步中他是怎么进行?用事务日志读取模块和事务日志和日志回放模块两个日志模块来保证数据的实时同步。

首先第一个是事务日志读取模块,会从源端实例读取原始数据,经过解析、过滤及标准格式化,最终将数据在本地持久化。日志读取模块会通过数据库协议连接并读取原实例的增量日志。比如如果我们原端是一个 Mysql 通过数据读取模块会将 binlog dump 协议连接数据库。

第二个是日志回放模块,日志回放模块是会从日志读取模块中请求增量数据,根据用户配置的同步对象进行数据过滤。在保证事务时序和事务一致性的前提下,将日志同步记录到目标实例,来保证我们两端数据的一致,这是数据同步的原理。

image.png

接下来我们介绍第三块的内容是 DTS 的数据订阅。除了我们的数据迁移,还有数据的同步外,还提供数据订阅的场景。数据订阅是会实时拉取我们的 RDS 的增量日志,让用户在可以通过 SDK 来去订阅这些增量日志,来去进行数据定制化的消费。 DTS 服务端的日志拉取模块,主要是实现从数据源抓取原始数据,经过解析、过滤、标准化流程,最后将这些增量数据在本地持久化。日志抓取模块通过数据库协议连接并实时拉取远端的增量日志。我们的数据订阅的功能也是具有高可用的。首先第一个是日志拉取模块下游的 SDK 的高可用,它是通过容灾系统,一旦检测到日志拉取模块出现异常,就会在健康服务节点上去断点重启日志拉取模块,保证我们的日志拉取模块的一个高可用。在我们的订阅过程中,如果出现异常,我们会及时的去是个断点重启。第二个是 DTS 支持在服务端实现下游 SDK 消费进程中的高可用户,在同时对一个数据订阅链路启动多个下游 SDK 消费进程,服务端同时指向一个下游消费推送增量数据。当消费进程异常后,服务端会从其他健康下游的中选择一个消费进程,像消费进程去推送数据,从而实现下游消费的一个高可用性。这个是 DTS 数据订阅的简单原理。

image.png

除了 DTS 的数据迁移、数据同步和数据订阅, DTS 还专门提供了我们一个专属集群。这里可以简单的给大家介绍专属集群的概念,因为我们之前讲到普通的 DTS 的创建方式,都是共享型的,它可能我们创建了 DTS 的任务,它的资源可能在多个任务,可能在一个集群上共享资源。比如有的用户,他的数据量比较大,贷款比较好,可能会去挤占别的任务的资源。所以这种普通方式为了更好的去服务不同需求的一个客户, DTS 创建推出了一种专属集群的概念。

在某一地域内,有多台相同规格的虚拟机组成的一个集群,每一个用户都是独享对专属集群的资源,所以它的稳定性会更好,性能也更好。因为它的资源是独享的,它具有资源独享,且稳定性强,高性能成本低的特点。首先,第一个高性能就是在专属集群中,用户是可以将整个集群的资源分配给某一个 DTS 实例进行使用的,这一点与普通的这种公共集群是有很大的差别,非常方便的将原库大批量写入的数据实时同步到我们目的库,提升我们的 DTS 实例的同步的性能。第二是它的资源独享和稳定性强。 DTS 专属集群会为客户提供一个独立的资源空间,实现于其他用户的DTS 实力。资源的隔离将不受其他DTS 实力的影响,保证或者是让用户可以自主控制专属集群的一个负载,加强了业务的稳定性。第三个,这里也提到是成本更低。相比于我们的公共集群,因为无需再额外支付 DTS 专属集群中的 DTS 实例的费用,只需要支付 DTS 专属集群的资源的费用。因为我们一般是要创建 DTS 实例任务,要给实例付费。但是我们的专属集群只需要给专属集群资源付费即可,不需要再额外的去给单独的 DTS 实例进行付费,所以它的费用是比较低的。

image.png

以上介绍了 DTS 的服务,它实现了三大块的功能以及 DTS 的专属集群。接下来我们来讲我们如何进行数据迁移上云方案和具体的演示操作。 DTS 是支持结构迁移,全量数据迁移和增量迁移,而且是可以在让我们不停浮的情况下,平滑的从自建的 Mysql 迁移到我们的上云。这也有一些前提条件,可能包括我们的 SQL  实力的版本,MYSQL 实力的版本,还有它的存储空间的要求。注意事项迁移会占用一定的目标资源,很好理解,建议我们在低峰操作,还有一些无主键的约束,如果目标是没有主键,可能会出现一些重复数据,也是需要注意。还有 DTS 会自动在 RDS 创建数据库,失败的任务会自动触发,自动恢复等。在创建之前,可能原端的数据库账号会有一个,目的端也有一个数据库账号,我们 DTS 肯定会连接我们的源端数据库和目的端数据库,对这些账号有一些相应的要求。首先第一个是源端数据库是自建,这里举的例子是自建 Mysql 数据库,但是不限于它,比如有可能是云上的某 RDS Mysql 数据库,它的结构迁移,全量迁移和增量迁移的权限,这里有写到结构迁移和全量迁移由我们的 slack 权限,增量迁移有我们有这些需要的相应的权限。目的端的这些实例它都需要有一些读写权限。

image.png

这里写到在我们进行迁移时进行的结构迁移,全量数据迁移和增量数据迁移,它都是支持哪些?比如我们的结构迁移是除了支持我们的表结构,还有我们的视图触发器,存储过程,这都也是这些源数据,也都是知识迁移的。

第二个是全量的一个数据迁移,把我们现在的存量数据全部迁移到我们的目标库上。增量数据是通过读取我们的 binlog ,刚才我们前面的内容也提到通过我们的增量数据服务来拉取到我们的目标数据库。我们还执行迁移,执行了我们的一些 dm l 和 dl 的一些操作,包括我们的增删改 replace,还有一些我们的对表视图索引等的一些操作,这也都是支持的。

image.png

数据迁移上云简单的就划为这几个步骤。第一个是我们需要创建迁移任务,填写我们的源端和目的端数据库的信息,包括我们的实例类型,地区,还有主机的地址、端口,数据库账号、密码等。授权我们的白名单选择我们的迁移类型,包括我们的对象,库表列,这些不同粒度的迁移也都是供客户选择。最后填写完基础的信息后,我们去启动预检查和任务,就可以进相应的任务的迁移。

image.png 

七:DTS 进行数据迁移演示

接下来我简单的给大家演示我们 DTS 是如何进行数据迁移的。首先我们选择了两个测试的实例,我们在杭州选择一个测试的实例,在杭州选择的另外一个测试实例作为目标库。因为我们测试环境没有自建,所以我们用云上的一个数据库迁移到另外一个数据库来作为演示。因为我们的 RDS 一般如果继续于主流的5.9, 5. 7 或者版本,和自建的差别不是很大,只要注意我们的一些限制条件即可。所以用我们原端的 Mysql 数据库作为原端数据库道理是相通的。首先我们在这个源端,我们创建一个类似的表,插入几条测试数据,我们可以点击表,我们看到在 text 的表有一个 3 列 3 行 3 列的数据。

image.png

我们到目的数据库来看,因为今天已经测试,我已经把表删掉。我们再去查看,这个时候他会报表不存在,因为我们可以看到目标的测试实例上,它是没有这样一个表的。我们回到 DTS 的控制台,在 d t s 控制台,我们可以根据自己的需要来创建数据订阅,数据同步等。

这里我们到数据迁移左边的导航栏,来到数据迁移,我们去点击创建任务,去创建一个数据迁移的任务,这里会生成一个任务名称,唯一标识。我们按照迁移任务迁移控制台上的提示一步一步的去操作即可。

image.png

所以这就是刚才我们讲到非常便捷的优势和我们不需要去有复杂的一些配置,只需要按照 DTS 控制台的一些引导即可完成这些任务的配置。

首先我们去选择,这里我默认的是 Mysql 云实例,数据的实例的地区是在杭州,我们选择源端库,选择填写数据库的账号和密码,目标端也是一样,也是我们的这 Mysql 云实例,还有我们的地区,我们的实例的ID,他这里可以进行一个简单的过滤,如果你是在杭州,去搜索你在某一个区域,比如杭州下面的所有的实例,我们可以选择特定的实例,它会过滤出。

这里点填写好后,我们检查好相应的配置信息,我们就点击测试链接,或者进行下一步。点击测试链接后,如果没有问题,它会进行到下一个页面,如果有问题,它会进行相应的提示,有可能是您的数据库的连接没有正确,有可能是数据库的账户或者密码,需要用户检查后自行解决。这里我们的任务,因为我们目标库没有这样一张表,我们就选择库表结构迁移,权量迁移和增量迁移我们都勾选,他会把整个表结构和数据都会迁移。这里我们选择原端的数据库对象,已经被我们已经问我们展示出。我们看这个表我们重点是想要将 test 表迁移到目的库,所以我们选择对象,把它选勾选到右边。选择完后,我们进行下一步的一个高级配置。这里我们可以选择数据的校验方式,我们可以选择全量校验或者是增量校验。这里我们默认选择全量校验即可。底下都是我一些默认选项。填写完后,我们点击下一步保存任务,并进行与检查。

image.png

我们会进行一些预检查。我们需要稍等一下,这需要花一些时间。

这里有失败的情况。maybe,失败,刚才任务有一些失败的情况,我们等他预检查。

image.png

这个是我今天上午创建的测试任务,这当时是可以成功的。这里我们去查看一些迁移对象。这是上午把 app test 源端的数据库底下的数据就给迁移到目的端。把 app test 源端的。我们看到群里有一些同学提供的问题,第一个是节点异常,如何知道数据同步的位点,从而保证数据不丢失, DTS 后端会自动去检测它的位点,而且如果有位点有丢失,可以发送给我们的售后的同学,我们在内部的工具上去检查它数据位点在是到什么情,是到哪一个是时间点。而且数同步的位点可能因为异常会是在一定时间内,比如在 7 天内它微点有相应的差异,但是我们如果重启,他会将这个位点一步一步追上,通过这种方式来保证数据。

第二个是 DTS 架构 binlog 解析模块后,回放模块如何解耦?是否中间消息是中间件?这个问题可能我需要再确认,再在群里回复,我需要确认。第三个是问题  DTS 的数据嵌入,数据同步如何选择 DTS?如何做数据冲突检测?数据迁移和数据同步选择?数据迁移可能是我们一次性比较大批量的数据一次性搬迁到我们云上。比如我们业务迁移场景,可能选择我们的数据迁移。数据同步,它主要应用刚才讲提到的时效性和数据完全一致。比如在两个多活或者灾备的场景下,我要在 1 秒之内或者是几秒之内,我要看到 a 实例和 b 实例数据,它变化是一致的,我们就要需要选择数据同步。DTS 如何做数据冲突检测?我理解数据冲突检测有可能是像主键冲突,如果是出现主键冲突,它可能会出现一部分这些丢失,或者是数据重复。

我们先简要回顾今天的主要的内容,主要是了解 DAS 的相关产品原理和功能,还有 DTS 的功能和上云的方案。明天同一时间有我同事红颜会给大家来介绍一下具体数据库的备份恢复有,希望大家届时参加和观看。今天我们就先到这里,有后续的问题我们可以在群里继续进行交流,谢谢大家。

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
46 0
|
16天前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——DDL与DML语句(包括引入视频)
MySQL数据库子查询练习——DDL与DML语句(包括引入视频)
17 1
|
23天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的数据库课程在线教学附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的数据库课程在线教学附带文章和源代码部署视频讲解等
23 4
|
24天前
|
存储 安全 关系型数据库
|
24天前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
18 1
|
25天前
|
Java 测试技术 数据安全/隐私保护
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
12 0
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
|
6天前
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
28 0
|
9天前
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
|
13天前
|
存储 关系型数据库 MySQL
MySQL数据库简介
MySQL数据库简介
|
2月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
39 4

热门文章

最新文章