otter、canal跨服务器数据同步解决方案详解,包括下载、安装、配置、应用过程解读。

文章介绍了阿里巴巴的Otter系统,它是一个基于Canal的分布式数据库同步工具,用于解决如阿里巴巴B2B公司那样的异地机房数据同步问题。Otter利用MySQL的主备复制原理和Canal来捕获和解析数据库增量日志,实现准实时同步。配置过程包括设置Canal、数据源、数据表、通道、Pipeline和表映射,最终启动通道以开始同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.背景和原理:

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

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

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

(1)MySQL主备复制原理

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

(2)canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

(3)otter原理

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

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

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

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

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

GitHub - alibaba/otter: 阿里巴巴分布式数据库同步系统(解决中美异地机房)

2.本地环境:

win10;

mysql5.7.39;

manager.deployer-4.2.18;

node.deployer-4.2.18;

apache-zookeeper-3.8.1

3.otter下载;

本次版本是v4.2.18

Releases · alibaba/otter · GitHub

4.zookeeper下载、安装、配置、运行;

Index of /dist/zookeeper/zookeeper-3.8.1https://archive.apache.org/dist/zookeeper/zookeeper-3.8.1/

 

 

5.manager.deployer配置,启动;

otter所依赖的数据库:

https://raw.githubusercontent.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sqlhttps://raw.githubusercontent.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

 

关闭服务,可以点击stop.sh;

登录:admin/admin

(如果是匿名登录,则只能查阅)

 

 

 

6.node.deployer配置,启动;

在conf路径下新建文件nid,内容是“1”;

 

7.配置主库与从库;

数据库版本:Mysql5.7.x;

只需源数据库开启binlog日志;

id自增;

 

 

 

从库同步需要主库提供账号密码, 且账号至少需要SELECT、REPLICATION CLIENT、REPLICATION SLAVE权限。

注意:REPLICATION SLAVE 可以在只读账号下分配,但权限级别需要是 global,不能仅指定某个数据库的只读。

账号test创建操作如下:(或者直接使用root账号,权限最大,无需配置)

CREATE USER test IDENTIFIED BY '123456';  

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';

FLUSH PRIVILEGES;

否则会报错:

8.配置流程;

添加canal配置 → 添加数据源配置 → 添加数据表配置 → 添加channel → 添加Pipeline → 添加表映射关系 → 启动channel

(1)添加canal配置;

 

(2)添加数据源配置;

(3)添加数据表配置;

错误原因有两个:

  • schema name:配置内容填写有误。

 

主库的数据表配置如下:

  • 数据库源的账号test的权限不够;

解决方法如下:

CREATE USER test IDENTIFIED BY '123456';  

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';

FLUSH PRIVILEGES;

然后用test账号配置数据源即可。

(4)添加channel;

 

 

(5)添加Pipeline;

 

 

 

(6)添加表映射关系;

 

 

如果两个表结构相同,直接保存;否则,需要配置字段映射关系,再点击下一步。

 

 

(7)启动channel;

 

(8)数据同步;

 

如果channel已经有关联关系,必须先停止该channel,删除关联关系,再删除pipeline,最后才可以删除channel;

或者执行编辑映射关系:

 

 

 

 

 

 

目录

1.背景和原理:

(1)MySQL主备复制原理

(2)canal 工作原理

(3)otter原理

2.本地环境:

3.otter下载;

4.zookeeper下载、安装、配置、运行;

5.manager.deployer配置,启动;

6.node.deployer配置,启动;

7.配置主库与从库;

8.配置流程;

(1)添加canal配置;

(2)添加数据源配置;

(3)添加数据表配置;

(4)添加channel;

(5)添加Pipeline;

(6)添加表映射关系;

(7)启动channel;

(8)数据同步;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值