需求:

工作中的业务数据,目前分别存储在美国的服务器和中国的服务器(mysql),需要把对应的表实施数据同步。

解决方案canal(源码java)

这个工具还是挺强大的,主要实现其实类似于mysql的主从同步机制,监控数据库的bin-log日志从而达到数据同步。
这里简单介绍下它可做的同步流程:

一:既然说了是监控bin-log日志而达到的同步,肯定需要mysql开启bin-log,一般如果是用阿里云服务器和别的商家其实是默认支持的,不需要调整配置。

二:搭建canal,admin为web控制面板(里面可调整配置文件),server部署。两个服务均可使用docker部署。

三:基本操作搭建完成后,可选择合适的同步中间界,目前支持的消息队列为:kafka,rocketMq,另外支持Elasticsearch, 或者直接使用tcp连接来进行消费都是可行的,我们使用的是rocketMq。因为本身使用的消息队列就是rocketMq,所以也就把他当作通道了。

四:直接就讲rocketMq了,和kafka肯定是接近一致的,(tcp消费其实就是检测从节点收到的bin-log信息).
这里讲下他的简单过程吧,中国服务器cn,美国服务器us,首先cnnal模拟us数据库的从库,从而让us数据库以为canal这边是自己的一个节点,当每次产生bin-log,都会往从节点进行发送(主从同步机制百度一大片),当canal拿到数据后,它自己也会做偏移值记录,再把对用的log发送到rocketMq,客户端在进行消费。

五:客户端消费的时候还是比较麻烦,当时没有直接拿到sql语句,只有对应的数据和对应的操作,相当于客户端这边还写了一个封装方法来进行对log的消费,从而新增到同步的数据库当中。
目前双A数据库同步比较成熟的方案,这个canal算是扛把子了吧,阿里云好歹也是持续了10年在用(在github上自己说的),不过这中间其实还有很多隐藏的隐患。比如:

1.阿里云的rocketMq建议默认存储三天,(这个其实可以自己也存一份数据,不过不建议)
2.canal挂了:这个好说,他自己记录了偏移值,重启后会从偏移值开始,只要自己别乱删记录,没啥问题。

2.1.消费记录失败时,rocketMq会出现异常情况.
消费情况失败会有两种处理:
处理一:返回失败,这样就会一直重复消费,一直失败,从而也会导致原本bin-log是同步的,到了消费这段就成了异步消费,成了无序的了,(之后的rocketMq记录也会消费)。
处理二:返回成功,那这个就有点猛了,失败了还返回成功,那就得自己去记录失败的值,在用一套体系来保证数据的同步。
还有一些问题就不一一列举了,虽然肯定都是有解决方案的,不过增大了程序的复杂度,加大了开发成本。这个时候就去观察有没有更好的解决方案。
后面发现了阿里封装canal,用java写了一个工具,名叫:otter
不得了,这个东西毕竟是阿里封装好的canal,还是比较成熟的,唯一的区别就是 otter智能 大大减少开发成本, canal也不是麻烦,肯定关于所有的风险处理都需要有保障,因为数据同步的准确性还是挺重要的,不过个人觉得otter过于智能如果中间有什么想要做特别处理的话,肯定直接用canal会更方便。
这个时候CTO基于开发成本以及稳定性的考虑,选择了otter,果不其然之前花了两三天把canal弄好,又需要推翻了,不过不要紧安慰自己得有一套,起码熟悉了cannal的机制了。

otter:

在讲这个之前,再说一下双A数据库Id的解决方案,其实就是用的分布式数据库的解决方案,因为有并发的缘故,我们不能让Id重复,这个时候使用了redis做一个id存储,选择cn数据库存储奇数id,
us数据库存储偶数id,如果中途还有别的国家在部署服务器,那就按照余数来进行划分id.
回到otter,otter使用了 有。zk进行负载, node来进行操作 包括管理canal等。 同步可选择 mysql oracle。
好,下面就是一系列配置,部署好之后,大概最后的情况就是 美国服务器 部署了两个 node ,中国服务器 部署了 两个node,每个node是数据同步的一个方向,这个时候就成功的把生产测试数据库双向同步完成了,当然这中间有些地方需要配置,比如同步的库名保持一致,这个在同步字段时是需要的,其他的小细节都无伤大雅,github里面的错一般都有。

初次配置的话会有很多的配置细节需要注意,是会有些头疼,个人感觉网上在这方面的资料说明是比较散的,如果有啥疑问,可以评论滴滴。
后面公司需要把mysql数据同步到Elasticsearch,otter不支持,准备继续使用canal了。

数据库双A同步实现方案相关推荐

  1. 使用Bucardo配置PostgreSQL14数据库双主同步

    一.前言 目标是 PostgreSQL 的双主同步 Bucardo 官方网站的手册语焉不详 Bucardo 有限制,不同步DDL,也就是表结构变化不会同步,大对象也不会同步,表必须有唯一主键 Buca ...

  2. 高并发高可用复杂系统中的缓存架构(十六) 实现缓存与数据库双写一致性保障方案

    再来回顾下之前的思路: 数据更新:根据唯一标识路由到一个队里中,「删除缓存 + 更新数据」 数据读取:如果不在缓存中,根据唯一标识路由到一个队里中,「读取数据 + 写入缓存」 投入队里之后,就等待结果 ...

  3. 华为云数据库mysql云灾备方案_华为云MySQL云灾备解决方案,秒级同步实现数据库的高保护...

    随着数字化进程和企业上云的加快,越来越多企业数据库寻求高效稳定的云服务,数据作为企业发展的底层建筑,在整个发展过程中有着无可比拟的作用,而数据安全和持续稳定也显得愈加重要.灾备,被誉为企业信息安全的最 ...

  4. 数据库同步利器 otter 双A同步配置

    阿里 Otter 简单双A同步配置 环境准备: zookeeper manager.deployer-4.2.18 node.deployer-4.2.18 环境搭建: 启动zookeeper 启动 ...

  5. elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案

    本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Binlog 要通过 ...

  6. 浅谈Oracle 数据库之间数据同步方案

    随着信息技术的飞速发展,企业信息化建设的不断深入,使得企业业务系统数量不断增加.这时,各业务系统之间数据交互,各子业务系统与核心业务系统之间数据交互,诸如此类场景的应用需求不断出现.因此,IT部门应对 ...

  7. 读数据库遇到空就进行不下去_如何解决高并发场景下缓存+数据库双写不一致问题?...

    推荐阅读: 一只Tom猫:手撕分布式技术:限流.通讯.缓存,全部一锅端走送给你!​zhuanlan.zhihu.com 一只Tom猫:MySQL复习:20道常见面试题(含答案)+21条MySQL性能调 ...

  8. 教你从0到1搭建秒杀系统-缓存与数据库双写一致

    本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题. 在秒杀实际的业务中,一定有很多需要做缓存的场景,比如售卖的商品,包括名称,详情等.访问量很大 ...

  9. Redis缓存与数据库双写一致性

    前言: 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作.         但是在更新缓存方面,对于更新完数据库,是更新缓存 ...

最新文章

  1. 美国中学生被学校监控,实时位置、和谁接触一览无余
  2. 【Consul】Consul架构-Gossip协议
  3. Flink流计算WordCount代码示例
  4. 蒋金楠:200行代码7个对象《ASP.NET Core框架揭密》苏州.NET俱乐部课程分享
  5. 重学TCP协议(7) Timestamps 选项
  6. 排序算法之选择法排序(C/C++)
  7. POJ 2259 team queue团队排队问题
  8. 新增成功到编制为空bug_36 个JS 面试题为你助力金九银10
  9. 用文本方式将数据装入一个数据库表 mysql_文本应该放哪_MySQL用文本方式将数据装入数据库表中...
  10. python xy 3_python(3):文件操作/os库
  11. lbs云 java_百度 LBS 云使用介绍
  12. 理想边界尺寸怎么算_GDamp;T 几何尺寸和公差 | ASME14.52018标准弄错了吗?
  13. 吐槽弹幕网,解决映兔源无法播放的书签插件
  14. Java实验——分别统计字符串中出现的大写字母、小写字母个数,以及出现的数字字符以及其他字符的个数
  15. Greenplum 添加mirror步骤
  16. 基于微信小程序的个人管理软件
  17. 【字符串篇】力扣刷题2
  18. 全网首发 | Mac版 PS2022 终于来了,支持M1芯片,五大新黑科技
  19. 私人定制YX3系列高效节能电动机:这才是大腕儿!
  20. easyExcel 实现不同对象写入到同一个sheet中

热门文章

  1. Element - el-tree 模版
  2. mysql找寻第二大数据解析
  3. CAD关于块表操作(com接口c#语言)
  4. 微型计算机总线的基本概念是什么,微型计算机总线知识.ppt
  5. html中滑动文本框怎么写,html在文本框中加入滚动条
  6. Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作
  7. 一条SQL注入引出的惊天大案
  8. Java用fillOval实现画点
  9. 幼儿园体育游戏电子计算机教案,幼儿园体育游戏教案3篇
  10. photoshop去除文字_如何在Photoshop中去除粉刺和其他瑕疵