SymmetricDS 初步配置步骤
《一》 基本概念
图一
《二》准备工作
SymmetricDS是用java开发的,需要java 5及以上版本的JRE或者JDK,另还需要支持的数据
库之一。SymmetricDS 3.0系列目前支持如下数据库:
MySQL version 5.0.2 and above
Oracle version 10g and above
PostgreSQL version 8.2.5 and above
Sql Server 2005 and above
Sql Server Azure
HSQLDB 2.x
H2 1.x
Apache Derby 10.3.2.1 and above
IBM DB2 9.5
Firebird 2.0 and above
Interbase 2009 and above
Greenplum 8.2.15 and above
其他支持触发器和jdbc的数据库也是可以的,只不过symmetricDS没有实现相应的触发器,需要自己写。
1安装JDK
2 添加java可执行文件的路径到环境变量path
2 安装数据库,这个步骤本文省略,我们假定所有同步的数据库都是sql server 2005 或者2008
《三》安装SymmetricDS
安装很简单,直接解压到某个目录
《四》创建数据库:本文省略该步骤
《五》配置server节点:node_0
1 复制samples/server.properties文件到engines目录
2 设置server.properties文件里各项参数如下:
(1) engine.name=server1 :这里指明该代理的名字
(2) db.driver=net.sourceforge.jtds.jdbc.Driver :连接SQL server数据库的JDBC驱动,驱动程序已经在安装文件里;
(3) db.url=jdbc:jtds:sqlserver://localhost:1433/sample :连接数据库的URL,symmetric所监听的数据库为:sample
(4) db.user=sa  db.password=sa :登陆数据库的用户名和密码
(5) registration.url= :在所有节点中有一个是symmetricDS的初始数据和参数存放的地方,这个节点称为注册节点,其他节点在第一次启动时需要向该节点申请注册,然后从注册节点获取相应初始数据和参数。作为注册节点这个URL为空。(当然注册节点也可以不参与数据同步)
(6) sync.url=192.168.1.105:8080/sync/server1 :这里声明本代理的访问地址,以便其他代理访问。其中server1 就是engine.name
(7) group.id=server :如基本概念的图一所示,我们把三个节点分为两组,server和client,这个参数就是声明节点所在的组名称
(8) external.id=1 :设置外部ID。这个外部ID跟symmetricDS本身没有关系,主要用在某些表达式中,作为过滤数据的条件。比如在乡镇卫生院的案例中,可以把external.id设置为每个卫生院的机构代码。symmetricDS本身为每个节点设置了唯一的ID号:node_id.
《六》创建symmetricDS存储配置数据所需的数据库表
(1) 打开命令行窗口,进入symmetricDS的samples目录
(2) 执行命令:..\bin\symadmin --engine server1 create-sym-tables
命令执行成功后在数据库里可以看到如下图所示的表
《七》初始化symmetricDS
(1)配置节点组(执行如下sql语句)
insert into sym_node_group (node_group_id, description)
values ('server', '数据中心');
insert into sym_node_group (node_group_id, description)
values ('client', '乡镇卫生院');
(2) 配置节点组之间的数据同步模式.同步模式有推或者拉两种,由data_event_action指定,其中W表示拉,p表示推(P = Push, W = Wait for Pull)
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action)
values ('server', 'client', 'W');
(2)配置各个节点的信息,目前只有一个节点:注册节点也就是server1,这个注册节点也同时参与数据同步,也是同步节点。其他节点的信息会在他们注册之后自动生成。这里的node_group_id, external_id,值要跟之前的server.properties文件里的设置一样
insert into sym_node (node_id, node_group_id, external_id, sync_enabled)
values ('00000', 'server', '1', 1);
(3)symmetricDS自身的节点ID,作为注册节点自身节点ID需要我们设置,其他节点是自动设置的。
insert into sym_node_identity values ('00000');
(4)设置数据通道Channels,本文将会把HIS中的is.OBJECTS表作为同步监听对象。需要注意的是:有外键关联的表必须定义在同一数据通道。
insert into sym_channel
(channel_id, processing_order, max_batch_size, enabled, description)
values('o', 1, 100000, 1, 'object');
(5)定义触发器,指明哪一个表需要被监听,本文被监听的表为:is.OBJECTS,is是架构名称。(需要在这张表中增加一列:org_code).在objects表中有一个字段ICON是image类型,我们不打算同步这个字段,所以设置EXCLUDED_COLUMN_NAMES=ICON,
insert into sym_trigger
(trigger_id, SOURCE_SCHEMA_NAME source_table_name,channel_id, EXCLUDED_COLUMN_NAMES ,last_update_time,create_time)
values('obj','is','objects','o',’ICON,,current_timestamp,current_timestamp);
java连接sqlserver数据库(6)配置数据路由:即数据同步时的数据流向。本例子中将会根据objects表org_code的值来决定数据的同步流向哪一个节点。
其中ROUTER_TYPE='column'就是指明由需同步的表中某列的值来决定数据流向,具体的条件则来表达式决定:ROUTER_EXPRESSION='org_code=:EXTERNAL_ID'
insert into sym_router
(router_id,source_node_group_id,target_node_group_id, ROUTER_TYPE,ROUTER_EXPRESSION , create_time,last_update_time)
values('server_client', 'server', 'client', 'column', 'org_code=:EXTERNAL_ID', current_timestamp, current_timestamp);
(7)最后就是建立触发器和数据路由之间的关联。symmetricDS中定义的触发器只有被关联后,symmetricDS才会为这个表自动生成相应的触发器。
insert into sym_trigger_router
(trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('obj','server_client', 200, current_timestamp, current_timestamp);
<八>启动symmetricDS
在命令行窗口执行如下命令:
..\bin\sym --port 8080 --server
<九>允许client组的节点注册。(当然目前这个节点还没配置和启动,后面将会讲述如何配置)
另外打开一个命令行窗口,进入symmetricDS的samples目录,执行如下命令:
..\bin\symadmin --engine server1 open-registration client 2
..\bin\symadmin --engine server1 open-registration client 3
<十>配置client节点:node_1
1 engine.name=client1 :这里指明该代理的名字
2  db.driver=net.sourceforge.jtds.jdbc.Driver :连接SQL server数据库的JDBC驱动,驱动程序已经在安装文件里;
3 db.url=jdbc:jtds:sqlserver://localhost:1433/sample :连接数据库的URL,symmetric所监听的数据库为:sample
4 db.user=sa  db.password=sa :登陆数据库的用户名和密码
5 registration.url= :注册节点的URL
6 sync.url=192.168.1.116:8080/sync/client1 :这里声明本代理的访问地址,以便其他代理访问。其中client1 就是engine.name
7 group.id=client :如基本概念的图一所示,我们把三个节点分为两组,server和client,这个参数就是声明节点所在的组名称
8 external.id=2 :设置外部ID。这个外部ID跟symmetricDS本身没有关系,主要用在某些表
达式中,作为过滤数据的条件。比如在乡镇卫生院的案例中,可以把external.id设置为每个卫生院的机构代码。symmetricDS本身为每个节点设置了唯一的ID号:node_id.