CloudCanal 推出 跨互联网安全数据同步 方案之后,有一些商业客户落地,效果良好,不过客户也反馈了一些改进和新需求,其中最大的一个需求即双向同步防循环。
近期 CloudCanal 版本支持了这个特性,整体方案进一步升级,最大特点包括:
我们复用了 CloudCanal 处理 MySQL 双向同步防循环逻辑, 写入对端时, SQL 自动带上 /*ccw*/ 标记。
再打开 MySQL binlog_rows_query_log_events 参数, 将 binlog DML 事件顺序变成 QueryEvent(TxBegin)、TableMapEvent、RowsQueryLogEvent、WriteRowEvent(IUD)、QueryEvent(TxEnd)。
其中 RowsQueryLogEvent 中的 SQL 如果带有 /*ccw*/ ,则为循环事件, 进行过滤。从而达到防循环目的。
杭州环境部署 CloudCanal ,并购买 RDS for MySQL
上海环境部署 CloudCanal , 并购买 RDS for MySQL
CloudCanal docker 安装包解压后 ,需 修改 docker-compose.yml 端口映射再安装/升级,以 18443 端口为例
开放 ECS 安全组相关端口,以便远程连接,以 18443 端口为例
分别在 杭州 和 上海 CloudCanal 配置 Tunnel 数据源
因为双向同步,所以两个环境需要配置各自内网的 Tunnel 数据源和对方公网 Tunnel 数据源
杭州数据源列表
上海数据源列表
杭州 创建两个 MySQL -> Tunnel 结构迁移,并完成
上海 创建两个 MySQL -> Tunnel 结构迁移,并完成
使用 4 条同步任务进行双向同步,任务列表和能力如下
任务 | 数据源 | 任务参数 |
---|---|---|
杭州任务 A | 杭州 Tunnel(公网) -> 杭州 MySQL | |
杭州任务 B | 杭州 MySQL -> 上海 Tunnel(公网) | deCycle=true, 过滤回环事件 |
上海任务 C | 上海 Tunnel(公网) -> 上海 MySQL | |
上海任务 D | 上海 MySQL -> 杭州 Tunnel(公网) | deCycle=true, 过滤回环事件 |
选择 Tunnel(杭州) 和 MySQL数据库(杭州)
选择表、列、映射略
任务正常运行,监听端口并准备接收数据
选择 Tunnel(上海) 和 MySQL数据库(上海)
选择表、列、映射略
任务正常运行,监听端口并准备接收数据
选择 MySQL (杭州) 和 Tunnel 数据源(上海)
选择数据同步,并 关闭任务自动启动
选择表、列、映射略
任务正常创建
任务详情 > 更多功能 > 参数设置,目标端数据源配置,deCycle 参数设置为 true
启动任务,正常运行
选择 MySQL (上海) 和 Tunnel 数据源(杭州)
选择数据同步,并 关闭任务自动启动
选择表、列、映射略
任务正常创建
任务详情 > 更多功能 > 参数设置,目标端数据源配置,deCycle 参数设置为 true
启动任务,正常运行
使用 CloudDM 在杭州 MySQL 上造增量数据
杭州写入上海 Tunnel 任务 有流量
上海接收数据任务 有流量
杭州接收数据任务 无流量
上海写入杭州 Tunnel 任务 无流量
使用 CloudDM 在上海 MySQL 上造增量数据
上海写入杭州 Tunnel 任务 有流量
杭州接收数据任务 有流量
杭州写入上海 Tunnel 任务 无流量
上海接收数据任务无流量
以上两者说明防循环生效
本文主要介绍 CloudCanal 进行跨互联网数据双向同步,具备 两端数据库完全不开放公网端口,可双向同步无循环 等特点。