Symmetric DS推送注册失败:RegistrationNotOpenException异常求助
解决SymmetricDS推送注册(Push Registration)失败问题
针对你遇到的RegistrationNotOpenException错误,以下是针对性的排查和解决步骤:
1. 修正Target节点的核心配置
- 在Target的
.properties文件中,必须保留registration.url(可设为占位值如http://placeholder),同时明确添加registration.allow.push=true——这个参数是允许Target接收推送注册的关键,即使新版本也需要配置。 - 不要删除
registration.url,否则Target会默认自己是注册服务器,拒绝开启注册流程。
2. 规范Source端的推送注册命令
确保使用完整且正确的symadmin open-registration命令格式,参数顺序和内容不能出错:
symadmin open-registration --url http://<target-aws-ip>:<port>/sync/<target-engine-name> <target-group-id> <target-node-id>
注意:
--url指定的是Target节点的同步接口地址(即Target引擎的对外访问URL)- 最后两个参数依次是Target的组ID、节点ID,顺序不可颠倒
执行命令后,检查Source数据库的sym_node和sym_node_security表,确认Target的节点信息已被添加,且registration_enabled字段值为1。
3. 验证Target端的注册状态
登录Target的数据库,执行SQL查询确认注册开关状态:
SELECT node_id, registration_enabled, registration_time FROM sym_node_security WHERE node_id = '<target-node-id>';
需确保:
registration_enabled为1registration_time为NULL(表示注册未完成,等待Source推送)
如果之前执行过注册命令,建议先关闭再重新开启:
symadmin close-registration <target-node-id> symadmin open-registration --url http://<target-aws-ip>:<port>/sync/<target-engine-name> <target-group-id> <target-node-id>
4. 修正Source端的Sync URL配置
Source的.properties文件中,sync.url必须设置为Source自身的可访问地址(即使在防火墙后,Source需要该地址生成注册配置),格式为:
sync.url=http://<source-internal-ip>:<port>/sync/<source-engine-name>
不能随意设置为localhost或无效地址,否则Source无法生成正确的注册信息推送给Target。
5. 排查网络与日志细节
- 在Target端开启DEBUG级日志(修改
log4j2.xml或logback.xml,将org.jumpmind.symmetric的日志级别设为DEBUG),查看是否有接收注册请求的记录,定位是否有请求被拦截或处理失败。 - 用
curl测试Source到Target的同步接口连通性:
确保返回curl http://<target-aws-ip>:<port>/sync/<target-engine-name>/pingOK,说明接口可正常访问。
6. 重置Target节点(极端情况)
如果以上步骤均无效,可尝试重置Target节点:
- 停止Target引擎
- 删除Target数据库中所有
sym_*开头的表 - 重新初始化Target的SymmetricDS表:
symadmin create-sym-tables --engine <target-engine-name> - 在Source端重新执行推送注册命令
内容的提问来源于stack exchange,提问作者Mark G
相关产品推荐
相关产品推荐

