阿里云的数据同步工具DTS确实是一件非常不错的工具,可以实现不同数据源之间的数据迁移、数据同步,只需要配置好两端的数据源就可以自动实现,不在需要人为的操作,非常的方便。
但是如果不熟悉DTS的话呢,会遇到各种各样的问题,接下来我会用几篇文章介绍一下我在实际使用中遇到的一些问题。
最近我在工作中遇到的一个使用DTS的场景是这样的,实现阿里公有云和阿里专有云(飞天)之间的数据同步(关于公有云和专有云之间的网络打通会在另外的文章里进行介绍),因为有一些业务要从公有云上迁移到专有云上,在保证业务不中断的前提下,我们采用DTS同步来实现两朵云上的数据的一致性。
具体操作步骤如下:购买一个DTS同步作业,它有预付费模式即包年包月,也有后付费模式即按量付费,因为我们要同步的数据量比较大,而且还需要有一个持续过程,因此我们采用了包年包月的方式。
购买完成之后,我们就可以开始配置我们的同步作业,因为我们购买的是DTS双向同步,因此我们需要先配置正向的同步作业,等正向的同步作业进入到同步中状态以后,才能进行反向同步作业的配置。我们配置好源端和目标端的数据源之后,就开始预检查并启动。
进入到预检查并启动的环节,DTS服务会检测源端和目标端数据库是否能正常连通,检测通过后,就开始进行数据同步了。在同步开始之前,会进行全量表结构和数据的创建(相当于数据迁移),之后才会进行数据同步;
因为公有云上的数据量比较大,整个同步耗时了差不多三天的时间才完成了全量迁移,之后才进入到增量数据同步环节,基本上延迟都在几毫秒。
在来说问题,因为DTS配置好了,就没有去管它了,想着都是自动进行的,应该不会遇到什么问题,结果过了几天登录阿里云的控制台,看到DTS同步作业列表里,正向的同步的延迟高达218253002毫秒!!换算成时间是2.52天!相当于专有云上的数据是公有云3天前的数据!
于是赶紧提了个工单,好在阿里后台的技术小哥回复的还蛮及时的,原因有两个:同步的对象里有热点表;
目标库的磁盘空间不足80%;
可能大家会问了,啥叫热点表,确实在网上也搜不到太多关于热点表的含义,通过与阿里后台小哥的沟通,就是说我们同步的对象里某一个表在短时间内有特别频繁的写操作,在加上我本来要同步的数据库和表也比较多,因此产生了比较高的延迟。所以,我们就把其中一个热点表从同步的对象里移除出去了。
另外一个原因是因为目标库的磁盘空间问题,这个真的是一个坑,因为想着共有云上大概就1个T的容量,因此在专有云上的RDS就开了个1.2T的磁盘空间,已近比较大了,结果DTS它就只认百分比的容量,因此又紧急扩容了200G,保证磁盘空间使用率低于80%。
通过解决以上两个问题,同步的延迟逐步开始下降了,需要一段时间去消耗掉未同步的数据部分,下图是同步延时的变化曲线图,下降的幅度还是很明显的。同步延时变化曲线图
所以写到这里,大家在使用DTS同步数据的时候,需要注意以下两点:注意一下同步的对象里是否有热点表,该热点表是否可以先不用同步?
目标数据库的磁盘空间尽量预留多一些,保证磁盘空间的使用率低于80%
在补充一点,没事还是要去阿里云控制台瞅瞅,可以及早发现问题。