Symmetricds单向三层复制配置咨询:离线企业服务器场景指引
配置SymmetricDS单向三层复制指南
首先明确回答你的核心疑问:是的,每台服务器(主库节点、中间转发节点、只读库节点)都需要安装SymmetricDS及依赖的Java环境,因为每个节点都需要运行SymmetricDS实例来处理复制的捕获、转发或接收逻辑。
针对你描述的离线企业环境(主库无互联网)、单向两步式复制(主库→中间节点→Web只读库)场景,下面是详细的配置步骤:
一、前期准备
- 离线部署依赖:
- 提前下载Java JDK(推荐11+版本)的离线安装包,传到所有服务器并完成安装
- 下载SymmetricDS的离线安装包(对应你数据库版本的包),传到所有服务器解压
- 下载对应数据库的JDBC驱动jar包,放到各服务器SymmetricDS目录的
lib文件夹下
- 规划节点拓扑:
- 定义3个节点组:
master-group(企业主库节点)、relay-group(中间转发节点)、read-only-group(Web只读库节点) - 为每个节点分配唯一的
external.id,比如主库节点为001,中间节点为002,只读节点为003
- 定义3个节点组:
二、配置主库节点(第一步复制的源节点)
- 修改SymmetricDS配置文件
conf/symmetric.properties:engine.name=master-001 # 数据库连接配置,替换为你的实际信息 db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/your_main_db?useSSL=false&serverTimezone=UTC db.user=db_username db.password=db_password # 节点组和ID配置 group.id=master-group external.id=001 # 主节点无需注册,作为注册服务器 registration.url= # 同步服务地址,替换为主库节点的IP sync.url=http://192.168.1.100:31415/sync/master-001 - 初始化SymmetricDS系统表:
在主库节点的SymmetricDS目录下执行命令:./bin/symadmin create-sym-tables - 配置复制规则:
- 创建触发器(捕获主库变更):插入
sym_trigger记录,例如针对orders表:INSERT INTO sym_trigger (trigger_id, source_table_name, channel_id, sync_on_insert, sync_on_update, sync_on_delete) VALUES ('orders-trigger', 'orders', 'main-channel', 1, 1, 1); - 创建路由(将变更转发到中间节点组):插入
sym_router记录:INSERT INTO sym_router (router_id, source_group_id, target_group_id, router_type) VALUES ('master-to-relay', 'master-group', 'relay-group', 'default'); - 创建复制通道:插入
sym_channel记录:INSERT INTO sym_channel (channel_id, processing_order, max_batch_size, enabled) VALUES ('main-channel', 1, 1000, 1);
- 创建触发器(捕获主库变更):插入
- 开放中间节点的注册权限:
执行命令允许中间节点向主节点注册:./bin/symadmin open-registration master-group relay-group 002
三、配置中间转发节点(承上启下的节点)
- 修改
conf/symmetric.properties:engine.name=relay-002 # 中间节点数据库连接配置 db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/your_relay_db?useSSL=false&serverTimezone=UTC db.user=db_username db.password=db_password # 节点组和ID配置 group.id=relay-group external.id=002 # 向主节点注册的地址 registration.url=http://192.168.1.100:31415/sync/master-001 # 自身同步服务地址,替换为中间节点的IP sync.url=http://192.168.1.101:31415/sync/relay-002 - 启动SymmetricDS服务:
启动后节点会自动向主节点注册,完成后可以在主节点用./bin/sym --start./bin/symadmin status查看注册状态。 - 配置向只读节点的转发规则:
- 初始化中间节点的SymmetricDS系统表(如果未自动创建):
./bin/symadmin create-sym-tables - 创建路由(将主库同步过来的变更转发到只读节点组):
INSERT INTO sym_router (router_id, source_group_id, target_group_id, router_type) VALUES ('relay-to-readonly', 'relay-group', 'read-only-group', 'default'); - 确保触发器配置:如果中间节点需要捕获同步过来的表变更(用于转发),可以复用主节点的触发器配置,或者直接同步主节点的
sym_trigger记录到中间节点。
- 初始化中间节点的SymmetricDS系统表(如果未自动创建):
- 开放只读节点的注册权限:
./bin/symadmin open-registration relay-group read-only-group 003
四、配置Web只读库节点(最终接收节点)
- 修改
conf/symmetric.properties:engine.name=readonly-003 # 只读库连接配置,建议使用只读权限的数据库用户 db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/your_readonly_db?useSSL=false&serverTimezone=UTC db.user=readonly_username db.password=readonly_password # 节点组和ID配置 group.id=read-only-group external.id=003 # 向中间节点注册的地址 registration.url=http://192.168.1.101:31415/sync/relay-002 # 自身同步服务地址(只读节点无需对外发送,可保留) sync.url=http://192.168.1.102:31415/sync/readonly-003 - 启动SymmetricDS服务:
./bin/sym --start - 强化只读限制:
- 确保数据库用户只有
SELECT权限,禁止写入操作 - 可以在SymmetricDS配置中添加
sync.read.only=true,防止节点发起主动变更
- 确保数据库用户只有
五、验证复制流程
- 在主库节点的业务表中插入一条测试数据:
INSERT INTO orders (order_id, customer_name, order_date) VALUES (1001, 'Test User', NOW()); - 依次检查中间节点、只读节点的对应表是否同步到该数据
- 查看各节点的SymmetricDS日志(
logs/symmetric.log)排查异常 - 使用
./bin/symadmin status命令查看节点的同步状态和连接情况
关键注意事项
- 网络连通性:确保主节点与中间节点、中间节点与只读节点之间能互相访问31415端口(或自定义的同步端口)
- 离线环境:所有依赖包必须提前离线部署,避免联网下载
- 单向复制:确保下游节点(中间、只读)没有配置捕获本地变更的触发器,防止反向同步
- 权限控制:只读节点的数据库用户严格使用只读权限,降低风险
内容的提问来源于stack exchange,提问作者user2475096
相关产品推荐
相关产品推荐

