You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymmetricDS双向同步异常:仅Slave到Master单向生效求助

PostgreSQL双向SymmetricDS同步配置缺失问题解决

问题背景

尝试在两个PostgreSQL数据库间搭建SymmetricDS双向同步,目前仅实现Slave到Master的单向同步,Master端变更无法同步到Slave。现有配置如下:

Master引擎配置

sync.url=http\://192.168.1.199\:31415/sync/symmetricdsmwdb0
registration.url=http\://192.168.1.199\:31415/sync/symmetricdsmwdb0
group.id=primary
db.init.sql=
db.driver=org.postgresql.Driver
db.user=user
db.password=password
db.url=jdbc\:postgresql\://mw-db\:5432/mw?protocolVersion\=3&stringtype\=unspecified&socketTimeout\=300&tcpKeepAlive\=true
engine.name=symmetricdsmwdb0
external.id=symmetricdsmwdb0
db.validation.query=select 1
cluster.lock.enabled=false
auto.registration=true
auto.reload=true

Slave引擎配置

sync.url=http\://192.168.1.84\:31415/sync/symmetricdsmwdb1
group.id=primary
db.init.sql=
registration.url=http\://192.168.1.199\:31415/sync/symmetricdsmwdb0
db.driver=org.postgresql.Driver
db.user=user
db.password=password
db.url=jdbc\:postgresql\://mw-db\:5432/mw?protocolVersion\=3&stringtype\=unspecified&socketTimeout\=300&tcpKeepAlive\=true
engine.name=symmetricdsmwdb1
external.id=symmetricdsmwdb1
db.validation.query=select 1
cluster.lock.enabled=false

现有触发器与路由配置

INSERT INTO sym_trigger (trigger_id, source_schema_name, source_table_name, channel_id, sync_on_update, sync_on_insert, sync_on_delete, sync_on_update_condition, sync_on_insert_condition, sync_on_delete_condition, last_update_time, create_time, sync_on_incoming_batch)
VALUES ('public.tables', 'public', '*', 'default', 1, 1, 1, '1=1', '1=1', '1=1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1);

INSERT INTO sym_trigger_router (trigger_id, router_id, enabled, initial_load_order, create_time, last_update_time)
VALUES ('public.tables', 'primary to primary', 1, 10, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

缺失配置与修复步骤

1. 补全双向路由规则定义

当前仅关联了触发器和路由,但缺少核心的双向路由规则配置。需要在sym_router表中添加允许primary组内节点互相同步的规则:

INSERT INTO sym_router (router_id, source_node_group_id, target_node_group_id, router_type, create_time, last_update_time)
VALUES ('primary to primary', 'primary', 'primary', 'default', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

这条配置是双向同步的基础,允许同一组内的节点互相传递变更数据。

2. 确保Master节点的触发器生效

  • 检查Master节点的触发器状态,确认已激活:
    SELECT trigger_id, source_table_name, is_active FROM sym_trigger WHERE source_schema_name = 'public';
    
  • 若触发器未激活,手动在Master节点执行触发器生成命令:
    symadmin --engine symmetricdsmwdb0 create-triggers
    

3. 配置双向节点组链路

需要在sym_node_group_link表中添加双向的拉取/推送策略,确保节点间可以互相同步:

INSERT INTO sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action, create_time, last_update_time)
VALUES ('primary', 'primary', 'P', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
       ('primary', 'primary', 'W', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
  • P表示拉取:目标组节点从源组节点拉取数据
  • W表示推送:源组节点主动将变更推送到目标组节点

4. 验证Slave节点的同步状态

  • 在Master节点检查Slave节点是否已启用同步:
    SELECT node_id, external_id, node_group_id, sync_enabled FROM sym_node;
    
    确保Slave节点的sync_enabled字段值为1。
  • 若未启用,执行命令开启同步:
    symadmin --engine symmetricdsmwdb0 enable-node symmetricdsmwdb1
    

5. 重启服务生效配置

完成上述配置后,分别重启Master和Slave节点的SymmetricDS服务:

# 重启Master服务
service symmetricds restart
# 重启Slave服务
service symmetricds restart

验证双向同步

在Master端修改public schema下的表数据,查看Slave端是否同步;同时在Slave端修改数据,确认Master端同步正常。

内容的提问来源于stack exchange,提问作者Yonoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:53:25