其他分享
首页 > 其他分享> > otter数据订阅&消费

otter数据订阅&消费

作者:互联网

介绍一款阿里巴巴的数据订阅&消费工具otter,这款产品当时用于解决阿里中美机房数据库实时同步问题。

这里主要讲的是用otter增量同步生产数据库到测试环境数据库。

otter的定位:

基于数据库增量日志分析,实时同步数据

为什么不用mysql自带的主从同步到测试?

因为测试环境的特殊性,功能比较新,有些新表和新字段,直接从生产同步显然不能满足业务需求。otter就能很好解决这个问题,基于binlog分析只对生产有变更的数据进行同步,这样就不会覆盖测试环境已修改的数据,测试环境新增字段和表也不会被覆盖。

otter的工作原理:

01.png

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

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

otter能解决:

  1. 异构库同步

a. mysql -> mysql/oracle. (目前开源版本只支持mysql增量,目标库可以是mysql或者oracle,取决于canal的功能)

  1. 单机房同步 (数据库之间RTT < 1ms)

a. 数据库版本升级

b. 数据表迁移

c. 异步二级索引

  1. 异地机房同步 (比如阿里巴巴国际站就是杭州和美国机房的数据库同步,RTT > 200ms,亮点)

a. 机房容灾

  1. 双向同步

a. 避免回环算法 (通用的解决方案,支持大部分关系型数据库)

b. 数据一致性算法 (保证双A机房模式下,数据保证最终一致性,亮点)

  1. 文件同步

a. 站点镜像 (进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片).

实战:

用途:生产增量同步指定表到测试环境,供测试工程师测试业务,属于单机房单项同步。

前提,源库my.cnf开启,binlog,row模式:

log_bin = mysql-bin    #打开日志

binlog_format = ROW  #设置row模式的日志格式

server-id = 2 #id不能重复

在增量之前,做一次数据库的全量同步,可以用xtrbackup。

curl fsSL https://raw.githubusercontent.com/alibaba/otter/master/docker/run.sh | bash

默认run.sh脚本会通过目录挂载的方式,将数据文件挂载到当前的data/目录下(包含zkData/mysql两个子目录),所以执行curl之前最好进入到一个自己的工作目录,比如cd otter

http://${host}:8080/

02.png

03.png

66.png

05.png

06.png

07.png

08.png

09.png

注意:表必须设置主键才能做同步

进入监控-日志管理,若有异常会有日志输出

10.png

CREATE TABLE  `test`.`example` (  `id` int(11)  NOT NULL AUTO_INCREMENT,  `name` varchar(32) COLLATE utf8_bin DEFAULT NULL ,   PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

insert into test.example(id,name) values(null,'hello');

源库中插入数据,目标库立马将新数据同步过来

目标库必须先创建表结构才能同步数据


更多精彩,关注公众号

gongzhong.jpg


标签:订阅,同步,机房,数据库,消费,mysql,日志,otter
来源: http://blog.51cto.com/jin544642965/2343911