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

SymmetricDS双向同步异常:客户端到主端正常,主端到客户端同步失败

SymmetricDS双向(Active-Active)同步问题排查:主端操作无法同步到客户端

问题场景

  • 双向同步配置中,客户端服务器的增删改操作可正常同步到主端,但主端的增删改操作无法同步到客户端
  • 服务器网络情况:
    • 主端服务器拥有公网IP
    • 客户端服务器仅拥有局域网IP

配置与操作记录

主端gt2_master.properties配置

db.connection.properties=
sync.url=http\://{cloudip}\:31415/sync/gt2_master
group.id=gt2
db.init.sql=
db.driver=org.postgresql.Driver
db.user=dbuser
db.password=dbpass
engine.name=gt2_master
external.id=1
db.validation.query=select 1
cluster.lock.enabled=false
registration.url=
db.url=jdbc\:postgresql\://{cloudip}:5432/gt2?protocolVersion\
=3&stringtype\=unspecified&socketTimeout\=300&tcpKeepAlive\=true

job.purge.period.time.ms=7200
job.routing.period.time.ms=1000
job.push.period.time.ms=1000
job.pull.period.time.ms=1000
auto.registration=true
initial.load.create.first=true

客户端gt2_client.properties配置

db.connection.properties=
sync.url=http\://192.168.100.203\:31415/sync/gt2_client
group.id=gt2
db.init.sql=
db.driver=org.postgresql.Driver
db.user=dbuser
db.password=dbpass
engine.name=gt2_client
external.id=2
db.validation.query=select 1
cluster.lock.enabled=false
registration.url=http\://{cloudip}\:31415/sync/gt2_master
db.url=jdbc\:postgresql\://192.168.100.203:5432/gt2?protocolVersion\
=3&stringtype\=unspecified&socketTimeout\=300&tcpKeepAlive\=true

job.routing.period.time.ms=1000
job.push.period.time.ms=1000
job.pull.period.time.ms=1000
auto.registration=true

执行的PostgreSQL配置命令

INSERT INTO sym_node_group_link (source_node_group_id,target_node_group_id,data_event_action)
VALUES ('gt2','gt2','P');

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)
VALUES ('public.all', 'public', '*', 'default', 1, 1, 1, '1=1', '1=1', '1=1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

INSERT INTO sym_router (router_id,source_node_group_id,target_node_group_id,router_type,router_expression,sync_on_update,sync_on_insert,sync_on_delete,use_source_catalog_schema,create_time,last_update_by,last_update_time)
VALUES ('gt2_2_gt2', 'gt2', 'gt2', 'default', NULL, 1, 1, 1, 0, CURRENT_TIMESTAMP, 'console', CURRENT_TIMESTAMP);

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

执行的SymmetricDS管理命令

bin/symadmin open-registration --engine gt2_master gt2 gt2_client

bin/symadmin send-schema --engine gt2_master -n gt2_client

错误日志

主端服务器警告日志:

WARN [gt2_master] [PushService] [gt2_master-push-default-41] 
Could not communicate with gt2:2:2 at http://192.168.100.203:31415/sync/gt2_client 
because exception org.jumpmind.exception.
IoException: java.net.SocketTimeoutException: Connect timed out

问题根源与解决方案

核心问题

主端服务器在公网环境,无法直接访问客户端的局域网IP(192.168.100.203),导致主端的Push服务无法连接到客户端的SymmetricDS节点,数据无法推送。

具体修复步骤

  1. 修正客户端的sync.url配置
    客户端的sync.url必须设置为主端能够访问的地址,可选两种方案:

    • 方案一:端口映射:在客户端所在局域网的路由器上,将31415端口转发到客户端的局域网IP(192.168.100.203)和31415端口,然后将客户端的sync.url修改为:
      sync.url=http\://{客户端公网IP或主端公网IP(如果用主端端口转发)}\:31415/sync/gt2_client
      
    • 方案二:优先使用Pull模式:由于客户端能主动访问主端(注册时已连接主端公网IP),可以让客户端主动从主端拉取数据,替代主端推送:
      • 保持客户端的job.pull.period.time.ms=1000不变,将主端的job.push.period.time.ms调大(如3600000)或设置为-1禁用推送
      • 修改节点组链接的data_event_action为W(等待客户端拉取):
        UPDATE sym_node_group_link SET data_event_action = 'W' WHERE source_node_group_id='gt2' AND target_node_group_id='gt2';
        
  2. 更新主端sym_node表中的客户端URL
    客户端注册时已将局域网URL上报给主端,需要手动更新主端数据库的sym_node表:

    UPDATE sym_node SET sync_url = 'http://{主端可访问的客户端地址}:31415/sync/gt2_client' WHERE external_id = '2';
    

    完成后重启主端SymmetricDS服务,或执行刷新命令:

    bin/symadmin refresh-node --engine gt2_master 2
    
  3. 验证网络连通性
    在主端服务器执行以下命令,确认能访问客户端的SymmetricDS服务:

    telnet {客户端可访问地址} 31415
    # 或使用curl测试
    curl http://{客户端可访问地址}:31415/sync/gt2_client
    

    如果连接失败,检查路由器端口映射、客户端防火墙、SymmetricDS服务是否正常运行。

说明

你之前的PostgreSQL配置命令没有问题,问题完全出在网络可达性和节点URL配置上,调整后即可实现双向同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:36:03