otter是一款基于Java且免费、开源基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案。
阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。
https://github.com/alibaba/otter
1. 单向同步, mysql/oracle互相同步
2. 双向同步,无冲突变更
3. 文件同步,本地/aranda文件
4. 双A同步,冲突检测&冲突补救
5. 数据迁移,中间表/行记录同步
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>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
b. google的依赖包无法下载,如jmockit、jtester、ojdbc6
其实官方已经考虑到了,我们从git上pull下来的代码中有个lib目录下面就由这几个jar包,只需要修改pom依赖为本地jar即可
例如ojdbc6:
<dependency>
<groupId>com.oraclegroupId>
<artifactId>ojdbc6artifactId>
<version>11.1.0.7.0version>
<scope>systemscope>
<systemPath>/home/chen/otter/otter/lib/ojdbc6.jarsystemPath>
dependency>
编译成功后会在target下产生2个压缩包:manager和node
新建目录manager,
把manager.deployer-xxx.tar.gz解压到manager下
tar -zxvf manager.deployer-4.2.19-SNAPSHOT.tar.gz -C /home/chen/otter/manager
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地址
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 ......
浏览器访问
http://192.168.150.101:8080
出现登录页面
输入用户名密码 admin/admin,进入管理页面
需要配置使用的zk、canal、node等地址、端口等信息。
zk配置:
node配置
配置完成后,机器管理第一列就是nid,安装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
点击刚刚创建的channel的查看按钮
出现如下页面:
点击添加
选择我们添加的机器,和创建的canal。
点击刚刚创建的pipeline
显示如下页面
点击添加
选择源表和目标表,点下一步,
选择字段对应关系,保存。
所有的配置都完成了。
修改my.cnf
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
向源数据库表添加、修改数据,查看目标数据库是否也跟着变更。