SymmetricDS 数据库双向同步开源软件入门

一句话概括该软件:SymmetricDS是一个文件和数据库同步软件,开源的,支持多主复制,同步时过滤和在异构的网络环境中进行数据转换传输。它支持单向和双向上的多个订阅者,异步的数据复制。

以下是从CSDN专栏找到的用户指南的翻译,由于目前SymmetricDS的中文资料是少之又少,所以用的人也不是很多。当初公司选择SymmetricDS,主要是因为它满足开源免费,支持双向同步,在使用的过程中,由于没有什么资料,所以一切都是靠自己的摸索和探究。测试过程中也出现了一些使用上的问题,目前也都解决了,至于是什么问题,下篇博客会详述,供出现同样问题的同学参考。

目前SymmetricDS的稳定性还不能考量,因为很少看到相关的资料。但是它的官网上显示,这个软件还在以大概7天的频率在更新当中,版本更新是相当快的,我们公司对这个软件也寄予厚望,希望日后能更加稳定和强大,当然是持续开源下去是最好了。

1.1.   System Requirements

SymmetricDS使用Java编写,需要JRE或者JDK 6.0及以上版本。

任何一个拥有Trigger技术和JDBC驱动的数据库都可能能够使用SymmetricDS。数据库通过Database Dialect被抽象,以支持不同的数据库特性。下面的数据库方言已经被包含进此发行版中(version 3.6.14):

1.      MySQL 5.0.2及以上版本

2.      MariaDB及以上版本

3.      Oracle 10g及以上版本

4.      PostgreSQL 8.2.5及以上版本

5.      Sql Server 2005及以上版本

6.      Sql Server Azure

7.      HSQLDB 2.x

8.      H2 1.x

9.      Apache Derby 10.3.2.1及以上版本

10.  IBM DB2 9.5及以上版本

11.  Firebird 2.0及以上版本

12.  Interbase 2009及以上版本

13.  Greenplum 8.2.15及以上版本

14.  SQLite 3及以上版本

15.  Sybase Adaptive ServerEnterprise 12.5及以上版本

16.  Sybase SQL Anywhere 9及以上版本

附录C Database Notes,可以查看你选用的数据库的兼容性问题和其他细节。

1.2.   Concepts

1.2.1 Notes

SymmetricDS是一个基于Java的应用,提供了一个同步引擎,这个引擎在数据同步中作为一个agent(代理,代理后边说的那个数据库实例),提供一个数据库实例和网络中其他同步引擎之间的数据同步。

一个SymmetricDS引擎叫做一个Node。SymmetricDS被设计为可以扩展到成千上万个节点。属性配置文件中提供的数据库连接字符 串,数据库用户名和数据库密码配置数据库连接信息。SymmetricDS可以同步数据库连接可以访问的任意的数据库表,只要数据库用户被分配了合适的数 据库权限。

一个SymmetricDS节点被分配一个external id和一个节点group id。External id是用户指定的标示符,SymmetricDS使用这个标示符来标识一个特定的节点,数据被派往的节点。节点的group id用来标识节点所在的组或者层。它定义了一个节点整个网络中所有的节点中所处的位置。例如,一个节点的组可能被命名为‘corporate’,代表一个 企业或者公司的数据库;另一个节点的组可能被命名为“local_office”,代表一个地区不同的机构的数据库。一个“local_office”的 external id可能是一个机构的编码或者其他有标示性的字母组成的字符串。一个节点通过它的node id在一个网络中被唯一的区分开,这个node id是根据external id自动生成的。如果本地机构代码1有两个数据库和两个SymmetricDS节点,它们可能有一个值为“1”的external id和值为“1-1”和“1-2”的node id。

SymmetricDS可以以多种方式部署。最常见的选择是在作为一个独立的进程,以服务的形式运行于服务器中。当以这种方式被部署的时 候,SymmetricDS可以作为一个客户端或者一个多租户的服务端,也可以依赖SymmetricDS数据库在整个数据库网络中的位置而定。尽管它可 以与数据库服务器运行在同一个服务器上,但是不需要必须这么做。SymmetricDS可以被部署到一个应用服务器中,像Apache Tomcat,JBoss Application Server,IBM WebSphere中,作为一个web应用。

SymmetricDS被设计成一个对技术人员来说,简单,易用的工具。它可以被认为是一个web应用,只是用其他的SymmetricDS引擎作为客户端代替浏览器的角色。它拥有web应用的所有特性,可以使用调试web应用的原理来调试SymmetricDS。

1.2.2. Change Data Capture

数据库触发器开启SymmetricDS捕获数据变化功能,SymmetricDS会根据用户的配置自动安装触发器。数据库触发器记录的数据变化都 在DATA表(DATA表是SymmetricDS中的系统表)。数据库被设计为非侵入性的,尽可能的轻量级。在SymmetricDS触发器被安装之 后,外部应用执行的所有的DML statement产生的数据变化都会被捕捉。注意,用户的应用不需要添加额外的库,也不需要任何的更改;SymmetricDS不需要必须在线才能捕捉 数据。

SymmetricDS配置的不同数据库实例间的数据库表需要有相同的结构。整个网络中的节点的配置通常在网络中的一个中心节点管理,也就是 registration server节点。Registration Server节点几乎总是与树形拓扑网络结构中的root节点是同一个。当配置一个“叶”节点,需要配置的一个启动参数是registration server节点的URL。如果“叶”节点还没注册到root节点,它联系registration server然后请求加入到网络中。一旦请求被接受,“叶”节点就下载所需的配置。在一个节点被注册之后,SymmetricDS也可以在开始同步之前提 供一个数据初始负载操作。

SymmetricDS将在启动时安装或者更新它的数据库触发器;当预定的同步触发器任务运行的时候,SymmetricDS会定期地再次安装新的 触发器和更新原有的触发器(默认情况下,是在每天午夜)。当决定一个触发器是否需要被重新建立的时候,同步触发器任务会检测数据库结构或者触发器配置的变 化。可选择地,同步触发器任务可以被关闭,DBA可以自己生成和运行数据库触发器DDL脚本。

在变化的数据被数据库触发器插入到SymmetricDS的DATA系统表之后,这些数据被Router Job分批然后分配到某个SymmetricDS节点。路由数据指的是在SymmetricDS网络中选择一个数据应该发送的节点。默认情况下,一个节点 的数据根据节点组标识被路由。可选地,数据和目标节点的特性也可以在路由过程中使用。一个数据的batch是一组数据的变化。这一组数据一起被传送和加载 到目标节点,作为一个数据库事务提交。Batch信息记录在SymmetricDS的OUTGOING_BATCH系统表中。Batch是节点特定的,每 个节点只有自己处理过的Batch的记录。DATA和OUTGOING_BATCH通过DATA_EVENT联系。Batch的发送状态记录在 OUTGOING_BATCH中。在数据被发送到远程节点之后,batch的状态被改为“OK”。

1.2.3. Change Data Delivery

数据通过HTTP或者HTTPS发送到远程节点。数据可以通过这两种方式中的一种发送,发送的方式依赖于配置的节点的组之间的传输链路的类型。一个 节点组可以被配置成推送变化到某个节点组中的其他节点,也可以配置成从某个节点组中的其他节点拉取数据。推送数据的操作是通过在数据源节点初始化一个 Push Job实现。如果有多个等待被发送的Batch,推送节点将通过使用同一个HTTP HEAD请求来保持同一个到各个目标节点的连接。如果预留的请求被接受,数据源节点将从batch中提取所有的数据。数据以CSV格式被提取高内存缓冲区 中,直到缓冲区大小达到配置的阀值,数据通过HTTP PUT被发送到目标节点。下一个Batch接着被提取和发送。这将一直重复直到给每一个channel发送的batch达到最大值,或者没有batch可 以发送为止。因为所有的batch通过一个HTTP PUT请求发送,目标节点也将返回一个batch的状态的列表。

拉取请求在目标节点通过Pull Job初始化。一个拉取请求使用HTTP GET提交方式。在Push过程中执行的提取过程也会在Pull过程中执行。

在数据被提取,发送之后,数据加载到目标节点。与提取过程相似,随着数据不断被接收,数据加载器将以CSV格式缓存数据到内存缓冲区中,直到达到阀 值。如果达到阀值,数据被刷写到一个文件中然后继续接收数据。一个batch中所有的数据都是本地可用的,一个数据库连接从连接池中取出,然后在源数据库 中发生的事情会在目标数据库再次重演。

1.2.4. Data Channels

数据总是以在特定channel中记录的顺序被发送到远程节点。一个channel是用户定义的一组互相依赖的表。捕获的属于一个组的表的数据总是 一起被同步。每一个触发器必须被分配一个channel id作为trigger定义的一部分。Channel id记录在SymmetricDS的SYM_DATA和SYM_OUTGOING_BATCH系统表中。如果一个batch加载失败,将不会再有数据发送 到这个channel直到这个失败被处理。但是,其他channel上的数据将不受影响,继续同步。

如果远程节点离线,数据仍然在源数据库端被记录,直到远程节点重新上线。可选地,可以设置一个超时时间,超过此时间,下线的节点将从网络中删除。 SymmetricDS捕获的数据所在的表的数据将在被发送后或者配置的保留时间到期后从SymmetricDS存放捕获的数据的系统表中被删除。将要发 送到一个关闭的节点的没有被发送的数据变化也将被清除。

SymmetricDS在数据完整性错误的时候的默认的处理方式是尝试修复这些数据。如果一个插入statement执行,但是表中已经存在这样的 一行数据,SymmetricDS将会回退插入操作然后尝试更新已经存在的行。同样地,如果一个在源数据库节点上成功执行的更新操作在目标节点上执行的时 候,没有找到要更新的行,SymmetricDS将会回退更新操作,然后将这行数据插入到数据库中。如果在目标节点执行删除操作,但是没有找到要删除的 行,这种情况将会被简单的记录。这些处理方式可以通过调整配置来进行冲突监测和处理。

SymmetricDS使用标准的web技术设计,所以它可以被扩展成不同数据库类型的多个客户端。它可以同步数据到与部署的数据库和网络基础设施 支持的客户端一样多的客户端节点;也可以从这么多数量的客户端拉取数据以同步数据。当一个两层的数据库和网络基础设施不够用的时候,一个 SymmetricDS网络可以被设计成使用N层以产生更高的扩展性。到这我们已经介绍了SymmetricDS是什么,如何完成用标准的方式在多个数据 库间同步数据的工作。

1.3.   Features

SymmetricDS拥有很多数据同步时你可能需要或者想要的特性。这些特性的大部分是根据SymmetricDS在生产环境中的使用反馈增加的。

1.3.1.Two-Way Table Synchronization

事实上,数据的同步通常只需要往一个方向同步。例如,一个分销商店发送它的商品交易信息到中央数据库,中央数据库发送存货信息和价格到商店。其他的 数据可能需要在双向同步。例如,分销商店发送中央数据库一个存货清单文档,然后中央数据库更新文档中的数据,然后发送回商店。SymmetricDS支持 表的双向同步,同时通过仅记录同步之外的数据变化避免了陷入更新循环。

1.3.2. Data Channels

SymmetricDS支持数据通道的概念。数据同步被定义在表(整个表或者表的一部分数据)的层面,每一个被管理的数据库表都被分配到一个 channel上,channel会帮助控制数据流。一个channel是一个种类的数据,一个channel的数据可以不依赖于其他的channel中 的数据被同步。例如,在一个分销例子中,一个促销事件可能更新很多的商品信息,但是用户可能正在等待存货清单文档的更新。如果按照顺序处理,商品更新将延 迟存货清单的更新,尽管数据是没有联系的。通过将item表分配到item channel,inventory表分配到inventory channel,这两个表的数据变化被分开来处理,因此inventory可以不管大量的商品数据的情况下操作数据。

Channel 将在Section3.3“Channel”中被详细讨论。

1.3.3. Change Notification

在一条数据变化记录到数据库中之后,对此变化感兴趣的SymmetricDS节点被唤醒。Change Notification被配置为既可以执行数据push也可以执行数据pull。当几个节点将它们的数据变化对准到一个中央节点的时候,用push的方 式代替等待中央节点从每个源数据库pull的方式是高效的。如果网络配置了防火墙来保护一个节点,pull配置可能使该节点可以接收到数据变化,而 push方式将会被阻塞。Change Notification的频率是可配置的,默认是一分钟一次。

1.3.4 HTTP(S) Transport

默认情况下,SymmetricDS以REST风格使用基于web的HTTP或者HTTPS请求的方式。这是一种轻量级并且易管理的方式。提供了一 系列的filter来强制认证和限制同时同步的数据流的数量。ITransportManager接口允许实现其他的数据传输方式。

1.3.5. Data Filtering and Rerouting

使用SymmetricDS,数据可以再记录,提取和加载的时候被过滤。

1.      数据路由是通过往SymmetricDS系统表ROUTER中插入一个给定类型的router来完成的。Router负责确定捕获到的变化应该被发往的目的节点。自定义的router可以通过实现一个IDataRouter接口来提供。

2.      除了同步,随着同步数据加载到目标数据库,SymmetricDS也可以完成很复杂的数据转换。数据转换可以被用来合并源数据,产生多个源数据的副本到多个目标数据库表,在目标数据库设置默认值,等等。转换的类型可以被扩展,可以创建自定义的转换。

3.      因为数据变化被加载到目标数据库中,数据可以被一个简单的shell加载过滤器过滤,也可以被一个 IDatabaseWriterFilter的实现类过滤。你可以改变一个列中的数据,然后路由改变后的数据到任何地方,触发器初始化负载或者其他可能的 情况。一个可能的用法是可以路由信用卡数据到一个安全的数据库然后在中央存放销售信息的数据库中空出来。过滤器也可以防止数据全部到达目标节点,然后在目 标节点加载数据时使用数据的默认值,这样非常高效。

1.3.6. Transaction Awareness

很多的数据库提供全局唯一的事务标识,跟作为一个事务一起提交的多个行相关联。SymmetricDS随同变化的数据一起,也存储事务的标识,因此 SymmetricDS可以精确地回滚一个事务。这意味着,目标数据库维护与源数据库中相同的事务完整性。支持事务标识符的数据库在附录中有记录。

1.3.7. Remote Management

管理功能通过JMX暴露出来,可以通过Java JConsole工具或者通过一个应用程序服务器访问。功能包括打开注册,重新加载数据,清除旧的数据和查看batch信息。很多的配置信息和运行时属性也可以被查看。

SymmetricDS也提供了发送SQL事件的功能,跟用来发送数据的同步机制一样。数据payload可以使任意的SQL statement。事件的处理和响应也跟其他类型的事件一样。

1.3.8. File Synchronization

不少的SymmetricDS用户已经发现他们不仅需要同步数据库表到远端,他们也有一系列的文件应该被同步。从version 3.5开始,SymmetricDS开始支持文件同步了。

请查看Section3.5 “File Trigger / File Synchronization”获取更多的信息。

1.4 Why Database Triggers?

在关系型数据库中,有几种方法可以捕获到变化的数据,以用来复制、同步和整合。

1.      Lazy data capture从源数据库系统中使用条件(比如一个时间戳列)SQL语句查询变化的数据。

2.      Trigger-based data capture 安装一个数据库触发器来捕获变化的数据。

3.      Log-based data capture从数据库的恢复日志中读取数据的变化。

上边的三种方式都有优势,也都有劣势,都在SymmetricDS的开发计划中。目前,SymmetricDS支持基于触发器的数据捕获和不公平的 懒惰数据捕获。首先实现这两种技术有很多的原因,最重要的是SymmetricDS要解决的大多数的用例都能使用基于触发器的方式解决,在某种程度上,条 件复制的方式(第一种方式)使更多的使用企业标准技术的数据库平台被支持。这个事实使SymmetricDS的开发者宝贵的时间和经理被放到设计一个易于 安装、配置和管理的产品,而不是花费时间在逆向数据库日志文件上。

基于触发器的数据捕获方式引入了一个可以衡量数据库操作开销。开销会随着处理器的能力和配置给数据库平台的资源还有应用使用数据库的方式变化。随着不断改进的硬件和数据库技术,基于触发器的数据捕获对需要高数据吞吐量或者需要扩展的应用来说将变得更加灵活。

基于触发器的数据捕获比基于日志的解决方案更容易实现和受支持。它使用众所周知的数据库概念,对于软件,数据库开发者和数据库管理员来说更易理解。它通常被应用开发团队或者数据库管理员安装,配置和管理,本身不需要部署到数据库服务器上。

时间: 2024-10-25 22:21:55

SymmetricDS 数据库双向同步开源软件入门的相关文章

linux下数据库双向同步之mysql

环境:lamp 下搭建一个博客   然后实现同步 这里:以wordpress为例,进行实施 具体操作如下: 一.环境配置 1.自动获取ip地址,虚拟机设置为桥接 2.[[email protected] ~]# yum install wget #换成163的yum源: cd /etc/yum.repos.d mv CentOS-Base.repo CentOS-Base.repo.save wget mirrors.163.com/.help/CentOS5-Base-163.repo #wg

windows下 MySQL数据库双向同步 配置步骤

      最近在项目中遇到了要实现服务器上MySql数据双向同步,在网上找了很多资料,但是大部分都是在liux系统下配置的, 而且都是互相转载,没有一个详细的步骤,于是决定写一个windows系统下的完整配置,与大家分享,如有不足之处, 请大家指正.   工具/原料 两台服务器,操作系统均为window2012 数据中心版,其中一台服务器为A,IP地址为:192.168.1.2,另外一台为B,IP地址为:192.168.1.3 mysql  的版本最好保持一致,大版本号一定要一致,小更新不影响

后端分布式系列:分布式存储-MySQL 数据库双向同步复制

MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约. 问题和制约 数据库的双主双写并双向同步场景,主要考虑数据完整性.一致性和避免冲突.对于同一个库,同一张表,同一个记录中的同一字段的两地变更,会引发数据一致性判断冲突,尽可能通过业务场景设计规避.双主双写并同步复制可能引发主键冲突,需避免使用数据库自增类主键方案.另外,双向同步潜在可能引发循环同步的问题,需要做回环控制. 如上图所示,复制程序写入时也会产生 binlog,如何识别由复制程序产生的 binlog 并将其过

GitHub + VSTS 开源代码双向同步

GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一方面可以提高自己在编程领域的知名度,也可以吸引其他的开发人员帮助你一起改进,当然还可以认识更多的朋友,要不怎么说github其实是个交友网站呢. 但是github上免费的repo只能是公开的,对于一些我们不希望完全开源的项目,就没有办法免费分享了,当然你可以付费升级到专业版,这样就可以托管私有rep

关于SyncNavigator数据库实时同步软件新手使用教程【推荐阅读】

购买事宜请联系QQ:1793040 WWW.syncnavigator.cn HKROnline SyncNavigator企业版 8.4.1 使用教程 首先,SyncNavigator现在没有试用版了,试用版在2018年起就停止运营了,需要正式激活之后,软件才能新建项目,功能才算正常. SyncNavigator的基本功能:自动同步数据/定时同步数据无论是实时同步/24小时不间断同步 SyncNavigator是一款高效的数据库同步工具,支持sqlserver数据库和mysql数据库,采用增量

双向同步软件Unison的安装与配置

一.Unison简介Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:1.跨平台使用:2.对内核和用户权限没有特别要求:3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略:4.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,

修改开源软件以后仍保持更新同步

git merge ―― 为什么比diff + patch好 2013.2.16, 北京 本文地址: http://www.jiangyouxin.net/2013/02/16/git_merge.html 基于开源软件做二次开发是很常见的.这类开发常常遇到的问题是,当我们已经针对开源软件做了很多修改,与上游主干版本之间已经渐行渐远:此时上游主干有了更新,此时如何把上游的更新与我们自己的修改合并起来?假定上游主干版本为A,我们在A的基础上开发了A':此时上游主干更新到B,现在我们要做的事情就是相

云计算教程学习入门视频课件:云计算开源软件有哪些?

伴随着低门槛,未来的可移植性及业界巨头的支持等三大优势,开源云工具如雨后春笋般不断出现.在一些云计算领域的大潮流的背后,开源工具扮演着很重要的角色,最近越来越多厂商都在公开他们的源代码来吸引开发人员. 开源在云计算领域中很流行,因为它提供了较低的门槛,因为各大云厂商已经在大规模的使用开源软件,如果你对某个开源工具有兴趣,很可能某个云供应商已经用这个工具进行过上万次的操作了,开源不再等于没有技术支持的杂牌软件了,在许多地方它已经是大多数新兴云平台背后的核心. 面对特殊时期的考验,面对广大学员对线上

开源软件收集

http://www.7-zip.org/7-Zip 4.16 Beta : 文件压缩工具,可与Windows资源管理器集成http://a-note.sourceforge.net/A Note 4.2.1 : 可在Windows桌面放置便笺,并可提供闹钟提醒功能http://www.xs4all.nl/~edienskeAbakt 0.9 : 能够以压缩方式对文档进行备份http://www.abisource.com/Abiword 2.27 : Windows写字板的替代程序,功能有所加