乐趣区

关于数据库:Mysql异地多活数据双向同步CloudCanal实战

junyu-cloudcanal 浏览原文

简述

异地多活是一项系统性工作,蕴含 web 层、应用服务层、数据层的流量调配和同步。

数据层的双向同步是整个计划根底,CloudCanal 在 MySQL <-> MySQL 链路无效反对了这个能力,本文简要介绍如何应用 CloudCanal 配置这样的双向同步链路。

技术点

数据抵触

双向同步中, 临时无奈齐全通过数据层解决的是数据抵触问题,如一个订单同时在两地被批改价格,到底哪个为准,这个具备内部依赖性。

针对这个问题,最无效的解决方案是通过业务流量调配 (比方 user_id), 将同一条数据(或相干数据) 写入放在其中一边,更加简略暴力的形式是将具备抵触条件的数据写入齐全放在一地。

另外同步工具层面可增加数据抵触策略,比方版本号比照、设定数据优先级等,甚至人工染指解决。

同步回环

回环问题,即避免数据在双向链路中写回产生日志的实例,导致老数据笼罩新数据。

业界罕用解决方案包含以下几种:

  • 批改数据库引擎,将同步过去的日志写入打上非凡标记(如 MySQL relay_log apply), 对向链路辨认该标记并决定是否同步
  • 同步数据写到对端时, 同一个事务带上一个特定操作,对向链路辨认这个操作,决定整个事务是否同步
  • 依赖数据库本身提供的防回环机制(比方 MySQL GTID), 同步工具做相应动作

CloudCanal 目前在 MySQL 到 MySQL 链路采纳了 GTID 计划,一是 MySQL 自带这个防重能力,二是尽量避免做更多操作。

举个“栗子”

筹备 CloudCanal

本次案例应用 docker 社区版, 装置参考。

增加数据源

  • 本案例 MySQL 数据库放在 上海 杭州 , CloudCanal 社区版运行于 上海 ECS
  • 登录 CloudCanal 平台
  • 数据源治理 -> 增加数据源
  • 抉择 自建 MySQL,阿里云 RDS 账号权限不反对链接上设置 GTID_NEXT
  • 自建 MySQL 开 binlog 和 GTID

    server-id       = 2
    log-bin         = mysql-bin
    gtid_mode = on
    enforce_gtid_consistency = on
  • 确认 MySQL GTID 曾经失效(请写几条测试数据)
  • 倡议对数据源进行形容批改,避免配置正反链路时,辨认错数据库

创立正向同步工作

  • 工作治理 -> 新建工作
  • 双向同步中,正向工作个别指源端有数据,指标端无数据的链路,波及对端数据初始化
  • 源端和指标端抉择数据源, 并别离点击 测试连贯 按钮以测试数据库连通性和获取 schema 级别元信息
  • 抉择源端和指标端 schema
  • 点击 下一步
  • 抉择 数据同步 ,并且勾选 全量数据初始化
  • 规格能够依据工作重要度以及部署机器的内存容量正当抉择,个别 2GB 内存规格即可
  • 勾选 DDL 同步
  • 点击 下一步
  • 表、列映射裁剪…此处省略
  • 对工作内容进行确认,置灰 主动启动工作 按钮以便调参数
  • 点击 确认创立
  • 工作详情 -> 参数设置
  • 设置指标数据源配置 deCycle , enableTransaction , 源端数据源配置 gtidMode 参数为 true
  • 失效配置并启动

创立反向同步工作

  • 工作治理 -> 新建工作
  • 源端和指标端抉择数据源(请和正向工作所选数据源对调 ), 并别离点击 测试连贯 按钮以测试数据库连通性和获取 schema 级别元信息
  • 抉择源端和指标端 schema
  • 点击 下一步
  • 抉择 数据同步 ,并去除 全量数据初始化
  • 勾选 DDL 同步
  • 点击 下一步
  • 表、列映射裁剪…此处省略
  • 对工作内容进行确认,置灰 主动启动工作 按钮以便调参数
  • 点击 确认创立
  • 工作详情 -> 参数设置
  • 设置指标数据源配置 deCycle , enableTransaction , 源端数据源配置 gtidMode 参数为 true
  • 失效配置并启动

工作同步

  • 正向工作和反向工作失常同步, 进行源和指标数据校验统一

测试

  • 为了避免数据抵触,咱们别离给两个数据库的不同表造一些混合负载,表级别隔离下抵触数据的可能。看最初数据是否统一。
  • 给源端数据库中 kbs_question 表和 指标数据库 kbs_article 表造 IUD 负载。
  • 进行测试负载
  • 正向和反向工作情况

  • 重跑校验工作,数据统一

FAQ

为什么不必 MySQL 原生的双 Master 复制

如果对数据不做映射、裁剪、转换、抵触策略 (比方略过抵触数据) 等动作,应用 MySQL 双 Master 复制是一个抉择。

另外对于长距离双向同步,还需做一些防网络中断等工作。

综合这两方面,第三方有商业反对或开源软件可能会体现出更好的应变性。毕竟改 MySQL 代码不容易。

为什么不必 Paxos 或 Raft 反对的数据库异地 3 正本或 5 正本

一部分起因和下面是统一的,毕竟是数据库外部机制,很难做一些定制。对于 3 正本或者 5 正本,个别做法是多数派正本在同城(不同机架、机房),多数正本在异地,异地正本靠异步同步数据。

对于单 Leader 写入机制,连业务层面设计不抵触写入策略的机会可能都没有。Multi-Master 波及更加简单的算法。

综合来看,没有孰好孰坏,按业务对数据的理论要求和所能提供的硬件条件进行抉择。

双向同步还反对哪些链路?

目前 CloudCanal 计划只实现了 MySQL->MySQL , 并且计划上依赖 GTID , 对于 ORACLE ,PG ,SQLSERVER 等关系型数据库,可能须要实现通用计划(次要是事务计划), 将他们同构或者异构链接起来。

总结

本文简略介绍了如何应用 CloudCanal 构建 MySQL->MySQL 双向同步链路,如果各位有需要,能够尝试应用下咱们的收费社区版体验。

最初,如果各位感觉这篇文章还不错,请点赞、评论加转发吧。

更多精彩

  • 5 分钟搞定 MySQL 到 TiDB 迁徙同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ElasticSearch 迁徙同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ClickHouse 实时数据同步 -CloudCanal 实战
  • MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
  • 构建基于 Kafka 直达的混合云在线数据生态 -cloudcanal 实战

社区快讯

  • 咱们创立 CloudCanal 微信粉丝群啦,在外面,你能够失去最新版本公布信息和资源链接,你能看到其余用户一手评测、应用状况,你更能失去激情的问题解答,当然你还能够给咱们提需要和问题。快快退出吧。

    • 扫描下方二维码,增加咱们小助手微信 suhuayue001 拉您进群,接头语 (“CloudCanal yyds”)
      退出 CloudCanal 粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
      CloudCanal- 收费好用的企业级数据同步工具,欢送品鉴。
      理解更多产品能够查看官方网站:http://www.clougence.com
      CloudCanal 社区:https://www.askcug.com/
退出移动版