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,运?时候会出现莫名其妙的数据问题。
|