阿里出品otter-同步数据量6亿涉及200+个数据库实例之间的同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里出品otter-同步数据量6亿涉及200+个数据库实例之间的同步相关的知识,希望对你有一定的参考价值。

参考技术A otter已在阿里云推出商业化版本 数据传输服务DTS, 开通即用,免去部署维护的昂贵使用成本。DTS针对阿里云RDS、DRDS等产品进行了适配,解决了Binlog日志回收,主备切换、VPC网络切换等场景下的同步高可用问题。同时,针对RDS进行了针对性的性能优化。出于稳定性、性能及成本的考虑,强烈推荐阿里云用户使用DTS产品。DTS产品使用文档

阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。

otter第一版本可追溯到04~05年,此次外部开源的版本为第4版,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了otte4。

名称:otter ['ɒtə(r)]

译意: 水獭,数据搬运工

语言: 纯java开发

定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统

原理描述:

1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击

2. 典型管理系统架构,manager(web管理)+node(工作节点)

a. manager运行时推送同步配置到node节点

b. node节点将同步状态反馈到manager上

3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

MySQL 同一实例不同库之间表同步(Otter 应用)

1 需求

  • 在同一台服务器同一MySQL实例中的source库和target库都存在student表。如果source库中该表发生增删改操作时,也需要体现到target库的student表中;

2 解决方案

2.1 方案一:使用Shell脚本实现

2.2 方案二:DataX

  • 官方介绍:
    • DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
  • 没有采纳此方案的原因:
    • DataX 本身占用空间太大,771M;
    • DataX 中使用到了Python,这门语言自己暂时也是一知半解;
    • DataX 适用于不同数据源的数据同步,而这个需求中的数据源均为MySQL,故放弃此方案;

2.3 方案三: Otter 增量同步

  • 官方介绍:
    • 纯Java开发;
    • 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统;

2.3.1 工作原理(摘自官网):

原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据;
  2. 典型管理系统架构,manager(web管理)+node(工作节点)

    a. manager运行时推送同步配置到node节点;

    b. node 节点将同步状态反馈到manager上;
  3. 基于zookeeper,解决分布式状态调度,允许多node节点之间协同工作;

2.3.2 环境准备

2.3.3 环境搭建及参数配置

3. Otter搭建过程中遇到的问题总结

3.1 MySQL 开启binlog

  • Windows 系统:
    • my.ini中添加如下语句,注意my.ini保存时,编码为:GB2312
# Binary Logging
log-bin=mysql-bin
binlog-format=ROW

#Server ID 不能重复
#注意:在 MySQL 5.7.3 及以后版本,如果没有设置server-id, 那么设置binlog后无法开启MySQL服务.
server-id=201609
  • Linux系统:
    • 查看是否有设置使用指定目录的my.cnf文件:ps aux|grep mysql|grep \'my.cnf\';如果没有输出,表示没有设置;
    • 查看mysql默认读取my.cnf的目录:mysql --help|grep \'my.cnf\';
# Binary Logging
log-bin=/var/lib/mysql/mysql-bin    # 此处为绝对路径
binlog-format=ROW

#Server ID 不能重复
#注意:在 MySQL 5.7.3 及以后版本,如果没有设置server-id, 那么设置binlog后无法开启MySQL服务.
server-id=201609
  • 查看是否设置成功:
    • 通过MySQL客户端:SHOW MASTER STATUS,如果设置成功,会有如下输出:

3.2 初始化Otter系统表

3.3 manager数据表配置说明:


参考资料:

以上是关于阿里出品otter-同步数据量6亿涉及200+个数据库实例之间的同步的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库同步系统otter部署实践(中国与欧洲同步)

mysql数据库同步系统otter部署实践(中国与欧洲同步)

阿里mysql同步工具otter的docker镜像

利用otter实现跨机房数据同步

otter双A同步配置

Otter-安装配置-otter性能测试