文章目录
Otter⽬前⽀持了什么
- 单向同步, mysql/oracle互相同步
- 双向同步,⽆冲突变更
- ⽂件同步,本地/aranda⽂件
- 双A同步,冲突检测&冲突补救
- 数据迁移,中间表/⾏记录同步
导历史表还需要程序代码实现吗? 还在⽤mysql的主从复制吗? Otter都能为你解决。
典型的场景是账户信息表和账户交易明细表,更新账户余额后需要登记⼀条账户明细,并且保证在⼀个事务⾥,⽤户可以通过交易明细表查看交易记录,但是交易明细表的数据量是逐步递增的,⽤户量多的系统,⼏个⽉下来的数据超过千万了,表数据量⼀多就导致查询和 插⼊变慢,⽽⼀开始就对账户明细做分表处理就难于保证强⼀致性事务,通过otter可以将记录同步导历史表,并且进⾏分表处理,⽤户往 年的交易记录就可以查询历史表了,⽽原交易明细表就可以删除⼀个⽉甚⾄⼏天前的数据;
实际测试中,otter的同步速度相⽐于mysql的复制,约有5倍左右的性能提升,这取决于其同步算法的实现. 抛弃了强⼀致性,得到了 性能提升。
整体架构
原理描述:
基于Canal开源产品,获取数据库增量⽇志数据。
典型管理系统架构,manager(web管理)+node(⼯作节点)
a. manager运⾏时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
基于zookeeper,解决分布式状态调度的,允许多node节点之间协同⼯作.
名词解释:
Channel:同步通道,单向同步中⼀个Pipeline组成,在双向同步中有两个Pipeline组成;
Pipeline:从源端到⽬标端的整个过程描述,主要由⼀些同步映射过程组成;
DataMediaPair:根据业务表定义映射关系,⽐如源表和⽬标表,字段映射,字段组等;
DataMedia: 抽象的数据介质概念,可以理解为数据表/mq队列定义;
DataMediaSource: 抽象的数据介质源信息,补充描述DateMedia;
ColumnPair: 定义字段映射关系;
ColumnGroup: 定义字段映射组;
Node: 处理同步过程的⼯作节点,对应⼀个jvm;
环境准备
- otter manager依赖于mysql进⾏配置信息的存储,所以需要预先安装mysql,并初始化otter manager的系统表结构
a. 安装mysql - 整个otter架构依赖了zookeeper进⾏多节点调度,所以需要预先安装zookeeper,不需要初始化节点,otter程序启动后会⾃检.
manager需要在otter.properties中配置zookeeper集群机器 - 安装jdk1.6+
下载安装
创建manager⽬录 : mkdir ~/manager
tar zxvf manager.deployer-4.2.14.tar.gz -C ~/manager
创建node⽬录: mkdir ~ /node
tar zxvf node.deployer-4.2.14.tar.gz -C ~ /node
修改配置⽂件运⾏
Manager
- otter.properties配置修改 vi ~/manager/conf/otter.properties
##修改为正确访问ip,⽣成URL使⽤,node的配置需要⽤到
otter.domainName= 127.0.0.1
##manage页⾯的访问端⼝
otter.port =8080
##修改为正确数据库信息
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager
otter.database.driver.username = root
otter.database.driver.password = hello
##为node连接manager的端⼝, node的配置需要⽤到
otter.communication.manager.port= 1099
##配置zookeeper集群机器
otter.zookeeper.cluster.default= 127.0.0.1:2181
其它使⽤默认配置即可
- Manager启动
Linux : sh ~/manager/bin/startup.sh
Windows:startup.bat
查看⽇志: vi ~/manager/logs/manager.log
现在访问我们地址的8080端口,要关掉8080的防火墙,否则访问不通。
出现如下界面,则表示manager配置成功
- 关闭manager
sh ~/manager/bin/stop.sh
Node
node会受ottermanager进⾏管理,所以需要预先安装otter manager,完成manager安装后,需要在manager页⾯为node定义 配置信息,并⽣⼀个唯⼀id。
- 添加zookeeper
⾸先确保你的zookeeper已启动成功。
otter依赖zookeeper,访问manager页⾯的机器管理页⾯,选择菜单进⼊“机器管理→zookeeper管理”页⾯:
点击添加进⼊“添加Zookeeper集群”页⾯
- 添加node
Zookeeper添加成功后,进⼊“机器管理→Node管理”页⾯:
点击添加进⼊添加机器页⾯
- 机器名称:可以随意定义,⽅便⾃⼰记忆即可
- 机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中⼀个ip进⾏暴露. (此ip是整个集群通讯的⼊⼝,实际情况千万 别使⽤127.0.0.1,否则多个机器的node节点会⽆法识别)
- 机器端⼝:对应node节点将要部署时启动的数据通讯端⼝,建议值:2088
- 下载端⼝:对应node节点将要部署时启动的数据下载端⼝,建议值:9090
- 外部ip :对应node节点将要部署的机器ip,存在的⼀个外部ip,允许通讯的时候⾛公⽹处理。
- zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.
- node这种设计,是为解决单机部署多实例⽽设计的,允许单机多node指定不同的端⼝
- 配置nid
机器添加完成后,跳转到机器列表页⾯,获取对应的机器序号nid:
通过这⼏步操作,获取到了node节点对应的唯⼀标⽰,称之为node id,简称nid,⽐如我添加的机器对应序号为1
执⾏echo 1 >~/node/conf/nid , 保存到conf⽬录下的nid⽂件;
- otter.properties配置修改 vi ~/otter/conf/otter.properties
#node的安装⽬录
otter.nodeHome = ${user.dir}/node
#manager的服务地址
otter.manager.address = 127.0.0.1:1099
- 启动
Linux:sh~/node/bin/startup.sh
Windows:startup.bat
打开⽇志: vi ~/node/logs/node/node.log,出现以下的错误,表⽰manager页⾯的ip配置不正确,此时修改ip为对应的host ip 后,再次启动即可。
关闭:sh ~/node/bin/stop.sh
配置⼀个同步任务
搭建⼀个数据库同步任务,源数据库必须开启binlog,并且binlog_format为ROW,即在mysql的配置⽂件加上以下两⾏
log-bin=mysql-bin
binlog-format=ROW
如果源库已开启binlog,通过mysql客户端命令show master status查看
添加canal
Otter使⽤canal开源产品获取数据库增量⽇志数据,可以把cannal看作是源库的⼀个伪slave。
原理: canal模拟mysql slave的交互协议,伪装⾃⼰为mysql slave,向mysql master发送dump协议,mysql master收到dump 请求,开始推送binarylog给slave(也就是canal), canal解析binary log对象(原始为byte流)。
- 在Otter Manager“配置管理-canal配置”页⾯点击添加:
- 进⼊添加cannal页⾯:
Node集成了cannal,所以不需要单独下载cannal;
Cannal 存储机制分为memory和file,也可以在运⾏模式选项选择作为独⽴服务运⾏;
勾选其他参数设置,可以设置cannal的服务端⼝;
必须配置位点信息,否则如果你的数据库已有存量数据,第⼀次运⾏时需要等待⽐较长的时间,可以通过连接源库客户端执⾏sql获 取,如下:
添加数据源
源库和⽬标库的schema需要⼀致,不然⽆法执⾏ddl语句(可以不一致,在设置Pipeline同步关系时可以指定同步某几个字段)
添加数据表配置
“配置管理-数据表配置”进⼊数据表管理页⾯:
点击添加,进⼊添加数据表页⾯:
table⽰例说明
- 单表配置:alibaba.product
- 分表配置:alibaba[1-64].product , alibaba.product[01-32]
- 正则配置:(.).(.)
- schema name和table name都设置成.*表⽰全库同步
添加⼀个channel
如下图,点击添加按钮进⼊添加channel页⾯,输⼊Channel Name后保存,则成功添加⼀个channel;
配置⼀个pipeline
添加channel成功后,点击Channel名字,进⼊Pipeline管理页⾯,添加⼀个pipeline;
进⼊添加pipeline页⾯
如上图填好所需信息,勾选⾼级设置,可以选是否过滤ddl同步等选项,点击保存,成功后会返回Pipeline管理页⾯。
添加映射关系
添加pipeline成功后,点击Pipeline名字
进⼊映射关系列表页⾯,点击添加
进⼊添加映射关系页⾯
点击保存返回映射关系列表页⾯,如果源数据表是只同步⼀个表可以点击下⼀步,选择需要同步的字段映射关系;
点击下一步后,出现两个表的所有字段,将需要同步的字段下移,注意顺序一一对应。
再点击下一步后,出现字段确认,此时将所有字段下移即可。
启⽤同步
以上配置,⼀个简单的同步任务就完成了,返回Channel管理页⾯
点击“启⽤”,运⾏状态就变为“运⾏”;
现在可以新增⼀个表,插⼊记录,查看数据是否同步过去了。
点击Channel名字,进⼊Pineline管理页⾯,可点击“监控”查看同步状态
避坑指南
同⼀个源表,同步到多个不同表,如果配置了Event Processor:source,运⾏时候会出现莫名其妙的数据问题
转载:https://blog.csdn.net/A_art_xiang/article/details/125254667
标签:node,同步,manager,添加,mysql,oracle,otter From: https://www.cnblogs.com/harda/p/16995617.html