SymmetricDS:Creating 2 个服务器节点引用同一个数据库

SymmetricDS:Creating 2 server nodes referencing same DB

所以我这里有一个场景。我有一个中央数据库,比如 DB0。我还有两个较小的数据库,比如 DB1 和 DB2,我的应用程序分别访问它们,比如 App1 和 App2。我想将 DB0 的内容复制到 DB1 和 DB2。为此,我使用 Symmetricds。

现在这是我有疑问的地方。我知道我可以创建一个 CentralNode-00 指向 DB0 和 2 个 ClientNodes,ClientNodes-01 和 ClientNodes-02 分别指向 DB1 和 DB2 并轻松进行复制。

但我正尝试在 Java 的嵌入式模式下使用 SymmetricDS。这就是我想这样做的方式:

我想从 App1 启动一个指向 DB0 的 Symmetric-Server Central-00 和一个指向 DB1 的 Symmetric-Client Client-01。与 App2 类似,我想启动另一个指向 DB0 的 Symmetric-Server Central-00 实例和一个指向 DB2 的 Symmetric-Client Client-02 实例。显然,App1和App2会在自己的JVM中启动。

所以我的问题是,我可以在两个不同的虚拟机上启动同一个 Symmetric-Server Central-00 的两个实例吗?简而言之,我可以启动两个正在访问同一个数据库(也是在此数据库中生成的相同 SYM 表)的 symmetricds 服务器节点吗?

这是我插入中央数据库的配置。

insert into sym_channel 
(channel_id, processing_order, max_batch_size, enabled, description)
values('item', 1, 100000, 1, 'Item and pricing data');

insert into sym_node_group (node_group_id) values ('corp');
insert into sym_node_group (node_group_id) values ('store');
insert into sym_node_group (node_group_id) values ('store02');

insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('corp', 'store', 'W');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('corp', 'store02', 'W');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('store', 'corp', 'P');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('store02', 'corp', 'P');

insert into sym_trigger 
(trigger_id,source_table_name,channel_id,last_update_time,create_time)
values('item','item','item',current_timestamp,current_timestamp);

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
values('corp_2_store', 'corp', 'store', 'default',current_timestamp, current_timestamp);

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
values('corp_2_store02', 'corp', 'store02', 'default',current_timestamp, current_timestamp);

insert into sym_trigger_router 
(trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('item','corp_2_store', 100, current_timestamp, current_timestamp);

insert into sym_trigger_router 
(trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('item','corp_2_store02', 100, current_timestamp, current_timestamp);

但是当我启动实例时它会抛出一个 Primary Key Violation 异常。

有人能告诉我这是否可能吗?如果可以,你能指出我的错误吗?

没有!只有一个实例,只有一个 symmetricds 引擎应该指向一个数据库。为什么不使用多引擎模式并从一个 JVM 客户端启动所有三个工程师?