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

简介

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 进行跨互联网数据双向同步,具备 两端数据库完全不开放公网端口,可双向同步无循环 等特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/414565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小笔记】时序数据分类算法最新小结

2024.1.15 最近基于时序数据训练分类算法,对其进行了一番了解,主要围绕以下几点: 时序数据算法有哪些细分类?时序数据分类算法经典模型?当下时序分类算法模型强baseline?有没有现成的工具? 1…

Prometheus 监控MySQL

监控MySQL运行状态:MySQLD Exporter MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下的产品。 MySQL是最流行的关系型数据库管理系统之一。数据库的稳定运行是保证业务可用性的关键因素之一。这一小节当中将介绍…

用于自动驾驶最优间距选择和速度规划的多配置二次规划(MPQP) 论文阅读

论文链接:https://arxiv.org/pdf/2401.06305.pdf 论文题目:用于自动驾驶最优间距选择和速度规划的多配置二次规划(MPQP) 1 摘要 本文介绍了用于自动驾驶最优间距选择和速度规划的多配置二次规划(MPQP)。…

集成学习算法(Bagging 思想、Boosting思想)及具体案例

概述:是机器学习中的一种思想,通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器 1、Bagging 思想 有放回的抽样(booststrap抽样)产生不同的训练集,从而训练不同的学习器;…

SpringCloud整合Zookeeper代替Eureka案例

文章目录 本期代码下载地址zookeeper简介zookeeper下载安装新建服务提供者测试 新建消费者测试 本期代码下载地址 地址:https://github.com/13thm/study_springcloud/tree/main/days4 zookeeper简介 zookeeper是一个分布式协调工具,可以实现注册中心功能 关闭Lin…

chatgpt的实用技巧四temperature 格式

四、temperature 格式 GPT3.5 temperature 的范围为:0-0.7; GPT4.0 temperature 的范围为:0-1; 当 temperature 为 0 时候,结果可稳定。 当 temperature 为 0.7/1 时候,结果发散具备创力。 数值越大&a…

Babylonjs inspector工具开启embedMode模式后不显示

项目地址见:https://github.com/tipace/simple-babylonjs 简单的babylonjs example 本身问题挺简单的,仅做一个记录。开始以为是babylon的问题,最后发现是css问题。 因为是做demo,把canas设置为占满全屏,习惯性的写…

2024-01-05 C语言定义的函数名里面插入宏定义,对函数名进行封装,可以通过宏定义批量修改整个文件的函数名里面的内容

一、C语言定义的函数名里面插入宏定义,对函数名进行封装,可以通过宏定义批量修改整个文件的函数名里面的内容。使用下面的代码对函数进行封装,这样移植的时候可以根据包名和类名进行批量修改,不用一个函数一个函数的修改。。 #de…

Android Bluetooth Framework源码剖析(二)它们都重要

在具体讲述每个模块前我们先来看看一些公共的知识点,如Binder、JNI、Service、AIDL、Broadcast等,它们都是Android/Java基础的知识点,在网络上有许多相关的文章,本文就不深入的讲述它们,但在Bluetooth Framework或者ap…

2023 年顶级前端工具

谁不喜欢一个好的前端工具?在本综述中,您将找到去年流行的有用的前端工具,它们将帮助您加快开发工作流程。让我们深入了解一下! 在过去的 12 个月里,我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

json-server的基础使用

json-server 是什么? 用来快速搭建模拟的 REST API 的工具包 可以30秒内快速为我们搭建一个假的基于 REST API的服务 我们要如何使用呢? 1.先安装 //全局安装 npm i -g json-server 2.创建文件 db.json 我们需要在db.json放入一点内容 放入示例: {/…

门禁监控如何提升安全系数?这个技术,学习一下!

随着社会的不断发展和科技的快速进步,安全管理成为各个领域至关重要的议题。在这一背景下,门禁监控系统逐渐崭露头角,成为保障建筑物和场所安全的关键工具。 门禁监控系统不仅在提高安全性方面发挥着积极作用,而且通过智能化的技术…