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)数据同步;