首页 > 数据库 >用 CloudCanal 做跨互联网数据库双向同步

用 CloudCanal 做跨互联网数据库双向同步

时间:2024-01-19 11:47:00浏览次数:35  
标签:CloudCanal Tunnel 数据源 数据库 双向 任务 MySQL 杭州

简介

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*/ ,则为循环事件, 进行过滤。从而达到防循环目的。

操作示例

数据源准备

  • 使用阿里云杭州和上海 RDS for MySQL

    • 打开 binlog_rows_query_log_events 参数,binlog 事件带上原始 SQL
    • 数据库不开公网端口
    • 数据走互联网, 采用 HTTPS 传输和用户名密码认证。
  • 初始化两边数据库表结构(如需要)

CloudCanal 准备

  • 杭州环境部署 CloudCanal ,并购买 RDS for MySQL
    http_sync_upgrade_1
    http_sync_upgrade_2

  • 上海环境部署 CloudCanal , 并购买 RDS for MySQL
    http_sync_upgrade_3
    http_sync_upgrade_4

  • CloudCanal docker 安装包解压后 ,需 修改 docker-compose.yml 端口映射再安装/升级,以 18443 端口为例

    http_sync_upgrade_5

  • 开放 ECS 安全组相关端口,以便远程连接,以 18443 端口为例

    http_sync_upgrade_6

添加 Tunnel 数据源

  • 分别在 杭州上海 CloudCanal 配置 Tunnel 数据源

  • 因为双向同步,所以两个环境需要配置各自内网的 Tunnel 数据源和对方公网 Tunnel 数据源

  • 杭州数据源列表
    http_sync_upgrade_7

  • 上海数据源列表
    http_sync_upgrade_8

为 Tunnel 初始化元数据

  • 杭州 创建两个 MySQL -> Tunnel 结构迁移,并完成
    http_sync_upgrade_12
    http_sync_upgrade_13
    http_sync_upgrade_14

  • 上海 创建两个 MySQL -> Tunnel 结构迁移,并完成
    http_sync_upgrade_9
    http_sync_upgrade_10
    http_sync_upgrade_11

任务创建

  • 使用 4 条同步任务进行双向同步,任务列表和能力如下

    任务 数据源 任务参数
    杭州任务 A 杭州 Tunnel(公网) -> 杭州 MySQL
    杭州任务 B 杭州 MySQL -> 上海 Tunnel(公网) deCycle=true, 过滤回环事件
    上海任务 C 上海 Tunnel(公网) -> 上海 MySQL
    上海任务 D 上海 MySQL -> 杭州 Tunnel(公网) deCycle=true, 过滤回环事件

杭州任务 A 创建

  • 选择 Tunnel(杭州) 和 MySQL数据库(杭州)
    http_sync_upgrade_15

  • 选择表、列、映射略

  • 任务正常运行,监听端口并准备接收数据
    http_sync_upgrade_16

上海任务 C 创建

  • 选择 Tunnel(上海) 和 MySQL数据库(上海)
    http_sync_upgrade_17

  • 选择表、列、映射略

  • 任务正常运行,监听端口并准备接收数据
    http_sync_upgrade_18

杭州任务 B 创建

  • 选择 MySQL (杭州) 和 Tunnel 数据源(上海)
    http_sync_upgrade_19

  • 选择数据同步,并 关闭任务自动启动
    http_sync_upgrade_20

  • 选择表、列、映射略

  • 任务正常创建

  • 任务详情 > 更多功能 > 参数设置,目标端数据源配置,deCycle 参数设置为 true
    http_sync_upgrade_21

  • 启动任务,正常运行
    http_sync_upgrade_22

上海任务 D 创建

  • 选择 MySQL (上海) 和 Tunnel 数据源(杭州)
    http_sync_upgrade_23

  • 选择数据同步,并 关闭任务自动启动
    http_sync_upgrade_24

  • 选择表、列、映射略

  • 任务正常创建

  • 任务详情 > 更多功能 > 参数设置,目标端数据源配置,deCycle 参数设置为 true
    http_sync_upgrade_25

  • 启动任务,正常运行
    http_sync_upgrade_26

功能验证

杭州 MySQL 造增量数据

  • 使用 CloudDM 在杭州 MySQL 上造增量数据

    http_sync_upgrade_27

  • 杭州写入上海 Tunnel 任务 有流量

    http_sync_upgrade_28

  • 上海接收数据任务 有流量

    http_sync_upgrade_29

  • 杭州接收数据任务 无流量

    http_sync_upgrade_30

  • 上海写入杭州 Tunnel 任务 无流量

    http_sync_upgrade_31

上海 MySQL 造增量数据

  • 使用 CloudDM 在上海 MySQL 上造增量数据

    http_sync_upgrade_32

  • 上海写入杭州 Tunnel 任务 有流量

    http_sync_upgrade_33

  • 杭州接收数据任务 有流量

    http_sync_upgrade_34

  • 杭州写入上海 Tunnel 任务 无流量

    http_sync_upgrade_35

  • 上海接收数据任务无流量

    http_sync_upgrade_36

  • 以上两者说明防循环生效

总结

本文主要介绍 CloudCanal 进行跨互联网数据双向同步,具备 两端数据库完全不开放公网端口,可双向同步无循环 等特点。

标签:CloudCanal,Tunnel,数据源,数据库,双向,任务,MySQL,杭州
From: https://www.cnblogs.com/clougence/p/17974280

相关文章

  • 阿里云rds云数据恢复至自建数据库 (linux 服务器版本ubuntu22.04)
    一、准备1.安装mysql5.7注意:需要跟rds云数据库版本对应2.安装PerconaXtraBackup工具,将解压后的备份文件恢复到自建数据库的数据目录中3.下载需要还原的物理备份文件我的是.qp类型wget-c'https://****.bak.rds.aliyuncs.com/****_xb.qp?****'-Oins2......
  • mysql 数据库备份
     MySQL数据库备份是重要的数据保护措施,以下是常用的MySQL数据库备份命令1.mysqldump命令#备份整个数据库mysqldump-uusername-pdbname>backup.sql#备份选择的表mysqldump-uusername-pdbnametable1table2>backup.sql#压缩备份文件mysqldump-uusername-......
  • dotnet 连接多个数据库
    SqliteToOracle\global.json{"sdk":{"version":"7.0.401"}}SqliteToOracle\SqliteToOracle.slnMicrosoftVisualStudioSolutionFile,FormatVersion12.00#VisualStudioVersion17VisualStudioVersion=17.0.3......
  • 快速监控 Oracle 数据库
    Oracle数据库在行业内应用广泛,通常存放的非常重要的数据,监控是必不可少的,本文使用Cprobe采集Oracle监控数据,极致简单,分享给大家。安装配置Oracle简单起见,我使用Docker启动Oracle,命令如下:dockerrun-d--nameoracle-p1022:22-p18080:8080-p1521:1521wnamel......
  • 数据库索引和索引优化
    索引和索引优化MysqlInnoDB使用B+树作为索引,如下图,是一个简化的B+数:使用B+树作为索引有点非常明显的优点1、B+树的数据都保存在叶子节点中,非叶子节点只保存指针,这样可以极大的减少数的阶数。如图如果每一阶可以存储1000个值,那么3阶树即可以存储1000*1000*1000=10亿个数据。而根......
  • 阿里云 PolarDB 开发者大会首度召开,让数据库开发像“搭积木”一样简单
    1月17日,首届阿里云PolarDB开发者大会在京举办,中国首款自研云原生数据库PolarDB发布“三层分离”全新版本,基于智能决策实现查询性能10倍提升、节省50%成本。面向开发者,阿里云全新推出数据库场景体验馆、训练营等系列新举措,广大开发者可率先免费体验PolarDB数据库核心特......
  • springboot配置分页插件pageHelper和数据库方言的几种方式
    方式一:启动类配置分页插件(Application.java)1/**2*pageHelper分页插件3*/4@Bean5publicPageHelperByMyselfpageHelper(){6PageHelperByMyselfpageHelper=newPageHelperByMyself();7Propertiesproperties=newPr......
  • 2024年1月中国数据库排行榜: OPOT 组合续写贺新年,达梦、腾讯发力迎升势
    2024年开局,墨天轮中国数据库流行度排行火热出炉,292个国产数据库齐聚榜单。整体来看,榜单前十整体变化不大,“O-P-O”格局稳固,前五位名次未发生变动。但新年伊始,各家数据库热度上升迅猛,分数差距也逐渐缩小,这微妙的波动折射出激烈的竞争态势,行业内涌动充分活力。本月排行榜解读文章......
  • 数据库中avg函数求平均值空值参与统计吗?
    先说结论:avg函数求平均值时,空值不参与统计。示例数据:withtmpas(select1asid,100asvalueunionallselect2asid,nullasvalueunionallselect3asid,200asvalue)selectavg(value),sum(value),count(value),count(1)fromtmp执行结果:`avg(va......
  • 流数据库-RisingWave
    参考:https://docs.risingwave.com/docs/current/architecture/https://www.risingwavetutorial.com/docs/intro概况使用场景:技术架构......