7月28日,Back You Up 鼎甲线上公开课第13期开讲,中华区技术支持经理李浩介绍了数据库同步技术的原理以及定时复制与实时复制的区别,并给我们演示了一遍实际的操作。
欢迎大家进入到今天《数据库同步技术解析》这个课程,我会把技术原理和操作都给大家做个介绍。
为什么会有数据库复制技术呢?我相信大家会比较容易理解,因为在任何一个企业里面核心的数据都是存储在数据库里面的。
在容灾需求方面,在单机模式主要解决数据库单点故障的问题。如果企业有做异地容灾的考虑,那我们会扩展到在异地还会有一台数据库的备机,即便是你本地生产机房完全不可用的话,在异地也能把你的数据库监管起来。
大数据平台有一个很重要的需求——数据搜集。那核心的数据怎么样能同步到大数据这个平台上?这个可以使用我们的数据库容灾技术来实现。
这就是我们做数据库容灾主要的三个场景。
那么数据库同步的原理是怎么样的呢?
这边给大家做一个简单的流程介绍。我们会把生产库整库的文件同步到备机上做一个覆盖,初始的同步二者数据基本上是一致的。
如果用户有一个更高的需求,比如想做实时的数据库容灾,那我们可以应用实时日志同步技术,在定时同步的基础上追加实时同步。
那么什么时候应用呢?我们这里会设置一个固定的频率。
如果是我们负载比较高的机器,频率要稍微设置低一些,好让它及时地把在线日志应用上去,减少在故障时激活备机所应用日志的数据量,提高接管的效率。
这就是我们实现的原理。
第一个:物理复制方式。什么是物理复制呢?其实就是把数据文件(包括数据库的配置)全都同步到备机上去。还有一种市面上大家常接触的是逻辑复制,这种模式是不能同步所有类型的数据,只能同步表里面的一些数据。我们的优势是可以同步所有数据类型,而且效率和性能方面是非常高的。
第二个:兼容性,我们的主库是积蓄状态也是可以兼容的。比如说你是Oracle RAC集群、SQL Server数据库集群等,在这些基础上会再进行一个同步背景,实现像异地容灾这种场景。
第三个是目前我们产品上所支持的数据库类型有两种(Oracle、SQLServer),还有一种是MySQL。我们产品8.0做了一个架构把MySQL同步功能迁移过来,近期也会上线。
在RPO方面,我们能做定时的复制,也能做实时的复制。而实时复制的同步频率是在秒级的,也就意味着我们是以几乎零丢失的方式实现数据库的同步。
在细粒度方面,我们只同步了日志,所同步的数据量很小。而且我们不要求主库和磁盘空间是完全一样的。
下面是我们数据库同步的应用场景,我这边是用行业给大家做一个举例。我们常跟客户提的一个点就是用户需要重视数据库的保障。因为数据灾难而导致数据丢失这种现象是屡见不鲜的。
在政务上第一个我们可以通过搭建一个数据库备机的方式接管它的主库。第二个你也可以把备库作查询去使用。
像高校最重要的OA、一卡通等,目前国产化进展比较慢,所以核心库还是Oracle、SQL Sever,比较适用于我们这种方式。
在医院一般核心库还是Oracle和SQL Sever,而且医院比较特别,它HIS库承载了所有的数据,一旦出现了故障那么医院基本所有的业务都运行不了,所以对于核心库的容灾复制是非常重要的。
还有一个跟大家提一下:我们的核心数据库容灾是一个方面,另外有时用户也会提应用容灾的事情,我们的数据库容灾是可以配合我们另外一款产品DBackup DRO做一个整机的数据库容灾。那么数据库容灾配合整机容灾就可以实现所有应用场景的容灾接管。
下面来讲讲我们同步数据的一个准备条件以及定时同步和实时同步的区别。
在准备条件这方面比较简单,第一条是我们只要求主库和备库、操作系统的版本、数据库的版本相同即可,第二条是主库要处于归档模式,第三条是备库的磁盘空间要大于或等于主库的实际数据库容量即可。
我们的定时同步主要同步的是主库的归档日志,也就是你每一次的同步它都会要求做一次主库的归档切换,所以第一次同步的频率一般不能太高,我们的建议值是5—10分钟一次。
在实时这块上我们的实时复制技术主要同步的是在线日志,而且它的原理上是直接监控在线日志有没有变化。所以虽然实时复制是两级的,但它对生产的影响并不高。
在创建备份作业这块,定时复制和备份没有关系,我们无需实现全备份的作业。然而我们要实时同步复制是需要备份的,先创建一个全库的备份作业,再创建一个实时的连续日志备份作业。
下面为大家做一个数据库同步的演示,我这边搭建了两个数据库,待会儿我们来做一些删除表、插入表等一系列操作,看看是否会进行同步。
首先我们要创建同步作业的话,在界面上跟着向导去做即可。
这里会有一些参数的设置,我们可以看到参数文件有两个选项,一个是主库的参数文件,一个是从库的参数文件。如果是主库和备库的硬件、数据库安装路径等基本相同,使用主库的参数文件去覆盖备库是否没问题的。如果差异很大,那我们要使用从库的参数文件。
第二个参数是删除归档日志,这个需要综合用户的使用场景,它可以删除已经复制的归档日志,也可以做兼容性的保留。
第三个是主机地址和从机地址。假如你的主库和备库有多个IP地址,可以用中选择一个进行复制,这个算是数据路径的一个配置,也就是数据复制通道的配置。
第四个是复制日志的保存目录,也就是我们的日志复制到备库中在应用之前,可以进行一个缓存。
点击下一步是我们所设置的一些同步复制的情况,提交之后就能创建整个的复制作业。创建好后我们可以看到备库现在是mounted状态,只有这样才能进行数据库日志的应用。在主库故障后,我们可以选择激活备库,使其变成open状态接收业务。
接下来我们直接做个测试,先查询下主库的状态,里面有两条数据,那我们可以insert一条数据,在新建一个表后再插入一条数据,待会儿看看是否也能同步到备机上去。
因为我们设置的是定时同步,复制完后选择只读打开备库,再来查看备库是否已经同步数据。我们可以看到它现在的状态是READ ONLY,这表示备库已经打开。
接下来我们在备库里做一个查询步骤,可以看到第一个表格和第二个表格的数据都存在,这就是已经同步的表现。那我们还可以做删除表格的一些操作,选择继续复制便可以实现数据的同步。