CN106484807A - 构建自主可控数据库双活或多活集群架构的方法和系统 - Google Patents
构建自主可控数据库双活或多活集群架构的方法和系统 Download PDFInfo
- Publication number
- CN106484807A CN106484807A CN201610846547.2A CN201610846547A CN106484807A CN 106484807 A CN106484807 A CN 106484807A CN 201610846547 A CN201610846547 A CN 201610846547A CN 106484807 A CN106484807 A CN 106484807A
- Authority
- CN
- China
- Prior art keywords
- database
- database table
- row
- strategy
- subprocess
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种构建自主可控数据库双活或多活集群架构的方法和系统,方法包括:在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;所述同步控制器创建复制子进程,所述复制子进程禁用该数据库表上的触发器和规则并创建新事务,同时确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库,所述子进程数据同步完成后,重新启用触发器和规则,并提交所述事务。
Description
技术领域
本发明属于涉及信息安全技术领域,尤其涉及一种构建自主可控数据库双活或多活集群架构的方法和系统。
背景技术
随着信息技术的在广泛的运用,越来越多的重要数据以电子化的形式存储和处理,而这种数据的存储和处理方式虽然能够提高便利性,但是却很容易数据丢失和损坏。其中数据库系统作为信息技术的基础和数据存放的主要载体,数据库的安全可靠更是整个信息系统中非常重要的一个环节;一旦数据库故障则意味着整个信息系统都会面临挑战,从而带来严重的损失和后果。
发明内容
针对现有技术中存在数据库高可用性无法保障的问题,本发明要解决的技术问题是提供一种更为有效且高效的构建自主可控数据库双活或多活集群架构的方法和系统,以提高数据库的可靠性。
为了解决上述问题,本发明实施例提出了一种构建自主可控数据库双活或多活集群架构的方法,用于对互为备份的两个或多个数据库进行同步,包括:
在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;
所述同步控制器创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,并创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
进一步的,所述方法还包括:在复制子进程完成数据同步后,重新启动所述数据库表的触发器、规则,并提交所述事务。
进一步的,所述方法还包括:当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
为了解决上述问题,本发明实施例还提出了一种构建自主可控数据库双活或多活集群架构的系统,用于对互为备份的两个或多个数据库进行同步,包括:
监控器模块,用于在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
守护进程模块,用于当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;
同步控制器模块,用于创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,并创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
进一步的,所述复制子进程完成数据同步后,重新启动所述数据库表的触发器、规则,并提交事务。
进一步的,当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
本发明的上述技术方案的有益效果如下:上述的技术方案,能够基于触发器实现数据库双向复制,且可以运行在数据库的主备节点上;主备节点通过触发器记录数据库操作,将记录传送到对方节点进行应用,实现数据库内的数据的双向同步。上述技术方案基于数据库的触发器实现,为异步同步,具有很强的安全性。
附图说明
图1为本发明实施例的系统结构拓扑图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明实施例提出了一种构建自主可控数据库双活或多活集群架构的方法,用于对互为备份的两个或多个数据库进行同步,包括:
在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;
所述同步控制器创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,并创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
进一步的,所述方法还包括:在复制子进程完成数据同步后,重新启动所述数据库表的触发器、规则,并提交所述事务。
进一步的,所述方法还包括:当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
为了解决上述问题,本发明实施例还提出了一种构建自主可控数据库双活或多活集群架构的系统,用于对互为备份的两个或多个数据库进行同步,包括:
监控器模块,用于在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
守护进程模块,用于当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;
同步控制器模块,用于创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,并创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
进一步的,所述复制子进程完成数据同步后,重新启动所述数据库表的触发器、规则,并提交所述事务。
进一步的,当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
下面以一个具体的实例来对本发明进行进一步说明。
步骤一、用于实现本发明实施例的方法的软件(以下称为bucardo)是基于perl脚本和依赖自主可控数据库的,因此需要安装以下列出的基于perl的安装包:
Test-Simple-0.98.tar.gz
ExtUtils-MakeMaker-6.56.tar.gz
DBI-1.616.tar.gz
version-0.91.tar.gz
DBD-Pg-2.18.1.tar.gz
DBIx-Safe-1.2.5.tar.gz
然后需要将这些安装包进行编译安装。
步骤二、Perl包需要到http://search.cpan.org找到这个包,下载安装解压,然后执行以下步骤。
perl Makefile.PL
make
make install
需先安装Test-Simple-0.98.tar.gz、ExtUtils-MakeMaker-6.56.tar.gz,再安装DBI-1.616;
安装DBD-pg前需要先安装version-0.91,再安装DBD-pg;
安装DBIx-Safe;
安装Bucardo;
步骤三、对本发明实施例的bucardo进行配置
在用户的HOME目录下建立一个.bucardorc文件,在这个文件中设定一些参数:
log_conflict_file =/home/postgres/log/bucardo_conflict.log
piddir =/home/postgres/run
reason_file =/home/postgres/log/bucardo.restart.reason.log
warning_file =/home/postgres/log/bucardo.warning.log
syslog_facility =LOG_LOCAL1
步骤四、创建bucardo数据库
bucardo会在所需要同步的数据库中建一个名叫数据库,在本例子中称其为bucardo库。在bucardo库中会存一些配置信息,这个过程是由bucardo_ctl install命令完成的:
bucardo_ctl install。
步骤五、在完成后,配置数据库默认搜索路径;在配置完成后再把bucardo数据库的搜索路径上加上bucardo这个schema名,以便连接到这个数据库后就可以使用\d看到这些配置表:
alter database bucardo set search_path="$user",public,bucardo;
步骤六、在两个主机上分别创建要同步的数据库:
createdb mydb
createlang plpgsql(注意需要plpgsql装载到数据库中。)
步骤七、为了确保数据库之间备份的可靠性,本发明实施例中需要建立测试用的数据表:
使用pgbench建一些测试表
pgbench-imydb-s 300
将pgbench_accounts、pgbench_branches、pgbench_tellers三张表设置为将要同步的表。
步骤八、在bucardo中增加要同步的数据库,主要是配置bucardo如何连接这些数据库:
节点1:
bucardo_ctl add db db1 dbname=mydb sourcelimit=100 targetlimit=100
bucardo_ctl add db db2 dbname=mydb host=192.168.1.32 sourcelimit=100targetlimit=100;
步骤九、指定同步的默认的冲突处理方法:
alter table bucardo.goat alter standard_conflict set default'latest';
步骤十、增加哪些表要同步:
在节点1:
bucardo_ctl add table pgbench_accounts pgbench_branches
pgbench_tellersdb=db1--herd=herd1--verbose
这个步骤其实是在表上建触发器,之后表所产生的变化都会被同步。
步骤十一、增加群,群是为了便于管理同步中表的一个集合。
在第一台主机上:
bucardo_ctl add herd herd1pgbench_accounts pgbench_branches
pgbench_tellers
步骤十二、进行增量备份
在主机1:
bucardo_ctl add sync sync1 source=herd1 targetdb=db2 type=swapping=yes
此步即为是把源数据库上的群(群中包含了一些表)同步到目标数据库中。type为swap,就是两个数据库做双向同步。type还可以有的值为:pushdelta:master/slave模式,只有主库把数据同步到备库;fullcopy:master/slave模式,全量同步。如果是初始状态下,源数据库上有数据,而目标数据库上没有数据,则需要开始时做一次全量同步,这种方式叫onetimecopy。要执行增量同步,需要源数据中的表至少有一条数据,而目标数据库中的表不能有数据。
bucardo_ctl update sync synconetimecopy=2
这可我们把同步的onetimecopy属性设置为2,这样当同步启动后,会自动做一次全量同步,然后再慢慢增量同步,全量同步完后,会自动把状态改为0。
步骤十三、启动同步:
bucardo_ctl start
步骤十四、查看同步状态:
bucardo_ctl status
bucardo_ctl status sync1
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种构建自主可控数据库双活或多活集群架构的方法,其特征在于,包括:
在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
当所述数据库表发生预定操作时,通知守护进程,并由所述守护进程通知同步控制器;
所述同步控制器创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,并创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
2.根据权利要求1所述的构建自主可控数据库双活或多活集群架构的方法,其特征在于,所述方法还包括:在复制子进程完成传输后,重新启动所述数据库表的触发器、规则,并提交所述事务。
3.根据权利要求1所述的构建自主可控数据库双活或多活集群架构的方法,其特征在于,所述方法还包括:当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
4.一种构建自主可控数据库双活或多活集群架构的系统,其特征在于,包括:
监控器模块,用于在确定要监控的数据库表上创建用于监控所述数据库表是否发生预定操作的触发器;
守护进程模块,用于当所述数据库表发生预定操作时,通知守护进程,由所述守护进程通知同步控制器;
同步控制器模块,用于创建复制子进程,所述复制子进程首先禁用该数据库表上的触发器和规则,创建新事务,然后确定发生变化的数据库表,并将所述发送变化的数据库表与目标数据库中的对应的数据库表进行对比以确定发送变化的行和/或列,并将所述发送变化的行和/或列同步到目标数据库。
5.根据权利要求4所述的构建自主可控数据库双活或多活集群架构的系统,其特征在于,所述复制子进程完成数据同步后,重新启动所述数据库表的触发器、规则,并提交所述事务。
6.根据权利要求4所述的构建自主可控数据库双活或多活集群架构的系统,其特征在于,当一个数据库表同一行和/或列被两个或多个库同时更新,即复制子进程同步数据冲突时,可以采用以下的一种预设策略:
以源数据库的库表为准的策略;
或以目标数据库的库表为准的策略;
或跳过该数据库表的策略;
或随机选择源目标库或目标数据库更新的策略;
或出现冲突时停止更新的策略。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610846547.2A CN106484807A (zh) | 2016-09-23 | 2016-09-23 | 构建自主可控数据库双活或多活集群架构的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610846547.2A CN106484807A (zh) | 2016-09-23 | 2016-09-23 | 构建自主可控数据库双活或多活集群架构的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106484807A true CN106484807A (zh) | 2017-03-08 |
Family
ID=58268820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610846547.2A Pending CN106484807A (zh) | 2016-09-23 | 2016-09-23 | 构建自主可控数据库双活或多活集群架构的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106484807A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083587A (zh) * | 2019-04-16 | 2019-08-02 | 会找房(北京)网络技术有限公司 | 一种基于Git的数据库变更审批方法 |
CN110427422A (zh) * | 2019-05-23 | 2019-11-08 | 武汉达梦数据库有限公司 | 数据同步异常时数据一致性校验方法、设备及存储介质 |
CN110941666A (zh) * | 2019-11-01 | 2020-03-31 | 网联清算有限公司 | 数据库多活方法及装置 |
CN116010172A (zh) * | 2023-02-28 | 2023-04-25 | 天翼云科技有限公司 | 一种数据同步方法、数据库、数据同步装置和产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929946A (zh) * | 2012-09-27 | 2013-02-13 | 山东中创软件工程股份有限公司 | 一种数据同步方法、装置及系统 |
CN103455557A (zh) * | 2013-08-08 | 2013-12-18 | 上海新炬网络技术有限公司 | 一种基于日志的结构化数据同步方法 |
CN104598531A (zh) * | 2014-12-25 | 2015-05-06 | 广东电子工业研究院有限公司 | 一种基于触发器的异构关系型数据库间增量数据迁移方法 |
CN105095364A (zh) * | 2015-06-26 | 2015-11-25 | 车智互联(北京)科技有限公司 | 一种数据同步系统和方法 |
CN105955836A (zh) * | 2016-05-09 | 2016-09-21 | 深圳市前海云端容灾信息技术有限公司 | 一种冷热备份自动演练多功能系统 |
-
2016
- 2016-09-23 CN CN201610846547.2A patent/CN106484807A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929946A (zh) * | 2012-09-27 | 2013-02-13 | 山东中创软件工程股份有限公司 | 一种数据同步方法、装置及系统 |
CN103455557A (zh) * | 2013-08-08 | 2013-12-18 | 上海新炬网络技术有限公司 | 一种基于日志的结构化数据同步方法 |
CN104598531A (zh) * | 2014-12-25 | 2015-05-06 | 广东电子工业研究院有限公司 | 一种基于触发器的异构关系型数据库间增量数据迁移方法 |
CN105095364A (zh) * | 2015-06-26 | 2015-11-25 | 车智互联(北京)科技有限公司 | 一种数据同步系统和方法 |
CN105955836A (zh) * | 2016-05-09 | 2016-09-21 | 深圳市前海云端容灾信息技术有限公司 | 一种冷热备份自动演练多功能系统 |
Non-Patent Citations (2)
Title |
---|
GREG SABINO MULLANE: ""Bucardo replication trigger enabling"", 《WWW.ENDPOINT.COM/BLOG/2014/12/22/BUCARDO-REPLICATION-TRIGGER-ENABLING》 * |
GREG SABINO MULLANE: ""Version 5 of Bucardo database replication system"", 《WWW.ENDPOINT.COM/BLOG/2014/06/23/BUCARDO-5-MULTIMASTER-POSTGRES-RELEASED》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083587A (zh) * | 2019-04-16 | 2019-08-02 | 会找房(北京)网络技术有限公司 | 一种基于Git的数据库变更审批方法 |
CN110427422A (zh) * | 2019-05-23 | 2019-11-08 | 武汉达梦数据库有限公司 | 数据同步异常时数据一致性校验方法、设备及存储介质 |
CN110427422B (zh) * | 2019-05-23 | 2020-10-30 | 武汉达梦数据库有限公司 | 数据同步异常时数据一致性校验方法、设备及存储介质 |
CN110941666A (zh) * | 2019-11-01 | 2020-03-31 | 网联清算有限公司 | 数据库多活方法及装置 |
CN116010172A (zh) * | 2023-02-28 | 2023-04-25 | 天翼云科技有限公司 | 一种数据同步方法、数据库、数据同步装置和产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017177941A1 (zh) | 主备数据库切换方法和装置 | |
EP3493471B1 (en) | Data disaster recovery method, apparatus and system | |
EP2790112B1 (en) | Method and system for data synchronization and data access apparatus | |
US8306947B2 (en) | Replication of operations on objects distributed in a storage system | |
US10216589B2 (en) | Smart data replication recoverer | |
CN105354108B (zh) | 一种数据备份方法及节点 | |
WO2016070375A1 (zh) | 一种分布式存储复制系统和方法 | |
CN106484807A (zh) | 构建自主可控数据库双活或多活集群架构的方法和系统 | |
US20150347250A1 (en) | Database management system for providing partial re-synchronization and partial re-synchronization method of using the same | |
CN102880529B (zh) | 内存数据备份方法及内存数据备份系统 | |
US9251230B2 (en) | Exchanging locations of an out of synchronization indicator and a change recording indicator via pointers | |
WO2016173179A1 (zh) | 一种数据库主备切换的方法及装置 | |
WO2021136422A1 (zh) | 状态管理方法、主备应用服务器的切换方法及电子设备 | |
US20120254342A1 (en) | Method for Providing Access to Data Items from a Distributed Storage System | |
CN109189860A (zh) | 一种基于Kubernetes系统的MySQL主备增量同步方法 | |
WO2021103499A1 (zh) | 一种基于多活数据中心的流量切换方法及装置 | |
KR101296778B1 (ko) | NoSQL 데이터베이스를 위한 결과적 트랜잭션 처리 방법 | |
WO2015006143A4 (en) | Unified replication mechanism for fault-tolerance of state | |
CN106202365B (zh) | 数据库更新同步的方法、系统及数据库集群 | |
JP2007115007A (ja) | ストレージ装置のリストア方法及びストレージ装置 | |
JPWO2014141343A1 (ja) | データ多重化システム | |
CN103618788A (zh) | 一种支持b/s结构系统高可用的方法 | |
CN103812674A (zh) | 一种服务器主备替换的方法 | |
CN106855869B (zh) | 一种实现数据库高可用的方法、装置和系统 | |
CN113326251B (zh) | 数据管理方法、系统、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170308 |
|
RJ01 | Rejection of invention patent application after publication |