背景:
鉴于****项目中有使用Otter同步数据,同时重庆资源池ESOP也有同样的需求,之前采用的是Federated引擎来实现,但是爱可生RDS不支持该引擎,必须采用其他的工具来实现该需求,记录一下学习OTTER的过程。
一、 otter简介
基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。
架构:
组件:
Canal:MySQL binlog增量解析,提供增量数据消费和订阅,otter已集成。
manager:管理节点,WEB管理与监控
node:负责具体的任务处理
依赖:
JAVA >1.6.25
zookeeper
MySQL
aria2 (node跨机房传输时使用HTTP多线程传输技术,依赖aria2作为下载客户端)
二、环境规划
manager |
192.168.73.104 |
8080、1099 |
zookeeper |
192.168.73.104 |
2181 |
otter mysql |
192.168.73.101 |
3306 |
node |
192.168.73.101 |
2088 |
Source(主) |
192.168.73.103 |
3307 |
Source(备) |
192.168.73.104 |
3307 |
target |
192.168.73.102 |
3307 |
三、otter manager安装步骤:
1、JDK、MySQL、Zookeeper安装(省略)
2、安装包下载
https://github.com/alibaba/otter/releases 下载对应的安装包并解压,建议二进制包即可。
3、otter manager安装
tar zxvf manager.deployer-4.2.18.tar.gz -C otter_manager/
4、元数据导入(node节点执行,省略)
5、otter manager配置(重要配置)
otter.domainName = 192.168.73.104
otter.port = 8080 #WEB端口
otter.database.driver.url = jdbc:mysql://192.168.73.101:3306/otter #otter数据库配置
otter.database.driver.username = otter
otter.database.driver.password = Otter@2020
otter.communication.manager.port = 1099 #manager端口,与node通信
otter.zookeeper.cluster.default = 192.168.73.104:2181 #zk配置
6、启动并验证
./startup.sh
netstat -tlnup|grep 8080查看端口是否正常
http://192.168.73.104:8080/ 能正常打开说明正常,管理员账号密码:admin/admin
四、otter node安装步骤
1、node安装
tar zxvf node.deployer-4.2.18.tar.gz -C otter_node/
2、node 配置(重要配置)
otter.manager.address = 192.168.73.104:1099
3、生成node id
在WEB管理端--机器管理--zookeeper管理,添加安装的zookeeper
在WEB管理端--机器管理--node管理,添加node节点信息--保存
4、配置node id
echo 1 > conf/nid
5、启动node
./startup.sh
netstat -tlnup|grep 2088 查看端口是否正常
WEB管理端--机器管理--node管理页面,查看node状态是否为已启动
五、同步任务配置(单向同步任务)
1、配置canal
数据库地址:是源端的IP:PORT。
其他信息可以后期更改。
2、数据源配置
输入源端和目标端MySQL的信息
3、添加表配置
添加源表和目标表
4、在同步管理中配置Channel
行模式:整行记录同步
列模式:根据binlog中变更的具体字段,按需同步
5、添加pipeline
点击刚刚新增的Channel,配置pipeline
6、配置映射关系
点击刚刚添加的pipeline,配置映射关系--配置同步的字段等
7、导出源表数据到目标表、记录位点信息并配置
{"journalName":"bin-log.000029","position":8254691,"timestamp":0,"gtid":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5533:1001480-1001579,d41f6cc1-9fc2-11ea-925d-000c293ddb5b:1-43"};
TIPS:字符集这里不能设置为UTF8MB4,这里并不是数据库的字符集,是获取binlog时候用的字符集。
8、新增第二张同步的表
假设新增的表为空表,在源端建表。
a、在配置管理--数据表配置,添加新增的表。
b、在同步管理中现停用channel通道,然后在channel管理--pipeline管理--映射关系列表中添加映射关系。
c、启动channel通道,观察日志
假设新增的表不空,建议在源端将该表设置为只读,然后在按照步骤添加;或者另新增canal、channel等。
六、主备源配置
1、配置管理-主备配置
添加主备数据库信息
2、canal配置
数据库地址:添加主库信息
HA机制:选择media
media group key:输入主备配置处的key值
3、数据源配置
URL:配置为jdbc:mysql://groupKey=1(1为主备配置中的key值)
4、其他配置参考《五、同步任务配置》中的2~7。
七、模拟主库故障
1、Channel配置中停用当前的同步任务。
2、在node03主库上新增一条记录,并关闭node03主库。
3、切换主备
配置管理--主备配置页面点击切换按钮
4、推送新主给Channel
Channel管理页面点击推送
5、查看同步状态与进度
Channel管理--Pipeline管理--监控--同步进度查看同步状态,可以发现已经切换到node04。
TIPS:早期使用file:position作为同步起点时,主挂了,则只能重新在canal中重新配置起点。得益于GTID的集群唯一性,现在切换变得简单了。但是要想使用主备配置,从库必须开启log_slave_updates,否则主备切换时,会找不到对应的binlog。
八、注意事项
1、otter只支持ROW模式的数据同步,其他两种模式不支持
2、源库只支持mysql,目标库支持mysql和oracle
3、同步的表必须要有主键
4、支持部分ddl同步 (支持create table / drop table / alter table / truncate table / rename table / create index / drop index,其他类型的暂不支持,比如grant,create user,trigger等等),同时ddl语句不支持幂等性操作,所以出现重复同步时,会导致同步挂起,可通过配置高级参数:跳过ddl异常,来解决这个问题。
5、不支持带外键的记录同步
附录:
· Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成
· Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成
· DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等
· DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义
· DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia
· ColumnPair : 定义字段映射关系
· ColumnGroup : 定义字段映射组
· Node : 处理同步过程的工作节点,对应一个jvm
标签:node,同步,配置,--,增量,192.168,MySQL,OTTER,otter From: https://www.cnblogs.com/harda/p/16996186.html