一、 Otter简介
otter是一款基于Java且免费、开源基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案。
官方描述:
阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。
https://github.com/alibaba/otter
目前支持:
1. 单向同步, mysql/oracle互相同步
2. 双向同步,无冲突变更
3. 文件同步,本地/aranda文件
4. 双A同步,冲突检测&冲突补救
5. 数据迁移,中间表/行记录同步
架构图:
原理描述:
- 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击
- 典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上 - 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
二、manager
(一)环境准备
- 需要新建1个mysql数据库,存储otter配置表,和需要同步的源数据库、目标数据库不是一个。
a. 安装mysql,这里不展开,网上一搜一大把
b. mysql创建otter的管理账户
c. 初始化otter manager系统表:
下载:https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
登录mysql执行:source otter-manager-schema.sql
2、新建zookeeper集群
不再赘述
(二)manager 安装
1、下载 otter manager
https://github.com/alibaba/otter/releases
如果gitgub下载不下来,可以自己编译
git clone git@github.com:alibaba/otter.git
cd otter;
mvn clean install -Dmaven.test.skip -Denv=release
编译报错处理:
a. jar包下载缓慢或者下载不下来
修改maven中央仓库地址
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
b. google的依赖包无法下载,如jmockit、jtester、ojdbc6
其实官方已经考虑到了,我们从git上pull下来的代码中有个lib目录下面就由这几个jar包,只需要修改pom依赖为本地jar即可
例如ojdbc6:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
<scope>system</scope>
<systemPath>/home/chen/otter/otter/lib/ojdbc6.jar</systemPath>
</dependency>
编译成功后会在target下产生2个压缩包:manager和node
2、部署manager
新建目录manager,
把manager.deployer-xxx.tar.gz解压到manager下
tar -zxvf manager.deployer-4.2.19-SNAPSHOT.tar.gz -C /home/chen/otter/manager
3、修改配置
vi conf/otter.properties
otter.domainName = 192.168.150.101 #本机ip
otter.port = 8080 #服务端口
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter #otter配置数据库
otter.database.driver.username = canal #配置库用户名
otter.database.driver.password = xxx #配置库密码
otter.zookeeper.cluster.default = 127.0.0.1:2181 #zookeeper地址
4、启动
sh vin/startup.sh
查看日志
vi logs/manager.log,如下日志表示启动成功:
2020-06-12 16:47:30.075 [] INFO com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty Embed Server is startup!
2020-06-12 16:47:30.075 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the manager server is running now ......
5、验证
浏览器访问
http://192.168.150.101:8080
出现登录页面
输入用户名密码 admin/admin,进入管理页面
需要配置使用的zk、canal、node等地址、端口等信息。
zk配置:
node配置
配置完成后,机器管理第一列就是nid,安装node时会用到。
三、node
1、之前maven编译后,会在target目录生成node.deployer-xxx.tar.gz
2、创建目录node,把压缩包解压到node目录下
tar -zxvf node.deployer-4.2.19-SNAPSHOT.tar.gz -C /home/chen/otter/node
3、修改配置
修改nid (将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件,比如我添加的机器对应序号为1)
echo 1 > conf/nid
4、启动
sh bin/startup.sh
5、查看日志
tail -f logs/node/node.log
2020-06-16 16:56:25.503 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......
表示启动成功
6、验证
登录 http://192.168.150.101:8080/nodeList.htm
四、同步任务配置
(一)数据源配置
1、添加数据源
2、添加2个数据源
(二)数据表配置
1、添加数据表
2、添加源表和目标表
(三)canal配置
1、添加canal
2、填写canal的配置信息
(四)channel管理
1、添加channel
(五)pipeline管理
点击刚刚创建的channel的查看按钮
出现如下页面:
点击添加
选择我们添加的机器,和创建的canal。
(六)映射管理管理
点击刚刚创建的pipeline
显示如下页面
点击添加
选择源表和目标表,点下一步,
选择字段对应关系,保存。
所有的配置都完成了。
(七)启动
点击同步管理,点击启用
(八)修改源mysql binlog配置
修改my.cnf
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
(九)测试
向源数据库表添加、修改数据,查看目标数据库是否也跟着变更。