资讯专栏INFORMATION COLUMN

数据同步——otter

baiy / 1935人阅读

摘要:阿里开源项目,数据同步的解决方案。基于数据库增量日志解析,支持数据库进行同步在最新的已经支持以及阿里云提供的数据库使用童鞋的福音。

参考文献:Otter-入门篇1(阿里开源项目Otter介绍)

一、背景
本人是一名应届毕业生,,还在努力挖坑。最近两个月被外派到其他公司做一个升级系统,做到现在一个多月。学到的东西很多,想总结的东西也很多,可是。。。时间是让人猝不及防的东西。好吧,现在先来总结otter数据同步。升级系统需要做到内网数据库(主)和外网的n个数据库(从)进行数据同步,考虑的方案有:

直接在项目配置n个从数据库加1个主库,但是码代码太麻烦了,有工具多好使。

用percona-tookit
下载链接:https://www.percona.com/downl...,
github demo:https://github.com/mrjgreen/d...(表示还没看。。)

用otter(分布式数据库同步系统),纯java编写,支持windows,linux。阿里开源项目,数据同步的解决方案。链接:http://pan.baidu.com/s/1eR5ccQe
密码:r5cp,github:https://github.com/alibaba/otter

二、Otter是什么?
Ottter是由阿里巴巴开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)。

Otter工作原理:

基于Canal开源产品,获取数据库增量日志数据。 什么是Canal,
请点击https://github.com/alibaba/canal

典型管理系统架构,manager(web管理)+node(工作节点)
manager运行时推送同步配置到node节点
node节点将同步状态反馈到manager上

基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.(otter node依赖于zookeeper进行分布式调度,需要安装一个zookeeper节点或者集群)

db : 数据源以及需要同步到的库

Canal : 用户获取数据库增量日志,目前主要支持mysql

manager : 配置同步规则设置数据源同步源等

zookeeper : 协调node进行协调工作

node : 负责任务处理处理接受到的部分同步工作

三、Canel是什么?
阿里的开源项目。mysql数据库binlog的增量订阅&消费组件基于日志增量订阅&消费支持的业务:数据库镜像、数据库实时备份、级索引 (卖家和买家各自分库索引)、search build、业务cache刷新、价格变化等重要业务消息。github:https://github.com/alibaba/canal

首先来看mysql主备复制的原理:

再看canel的原理:

原理相对比较简单:
模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
mysql master收到dump请求,开始推送binary log给slave(也就是canal)
canal解析binary log对象(原始为byte流).
四、otter环境搭建(所需文件已在上方下载链接)
先看看安装后的目录

安装好mysql

安装好jdk,配置环境变量,zookeeper和Otter-manager都需要依赖java

安装配置zookeeper,这里配置的是单机模式,它还有集群模式,可以看
http://blog.csdn.net/mark_lq/...,http://blog.csdn.net/kongxx/a...

   修改bin/zkEnv.sh脚本:
   将ZOO_LOG_DIR="."修改为ZOO_LOG_DIR="/tmp/zookeeper/data"
   将ZOO_LOG4J_PROP=”INFO,CONSOLE”修改为ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
   修改bin/zkServer.sh脚本:
   将ZOOBIN="${BASH_SOURCE-$0}"修改为ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
   修改bin/zkCli.sh脚本:
   将ZOOBIN="${BASH_SOURCE-$0}"修改为ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
   启动:到bin目录,./zkServer.sh start

安装配置manager
先安装manager

再安装ottermanager的数据库

这里可能会有权限问题,grant一下权限就ok
修改配置文件otter.properties

启动:到bin目录 ./startup.sh
日志可以去/tmp/manager/logs/manager.log查看
启动成功后,打开http://192.168.0.212:8080/,即可访问到

安装配置aria2,保证需要同步的数据通过极快的速度同步到需要同步的服务器上。
安装,windows上安装需要配置环境变量。这个也是个神器哦

安装配置node节点,node主要负责接受manage下发任务的处理

注意:这里配置完后,需到manager管理页面进行配置node信息,然后再来开启node建立连接!

五、otter配置单向同步

概念步骤:先开启mysql——>开启zookeeper——>开启manager——>配置node——>启动node——>后续
机器/数据库实例(mysql5.6):192.168.0.212(master),192.168.5.223(slave)
这里需要改一下配置文件,my.inf(linux,在etc/my.inf),my.ini(windows)

log_bin = mysql-bin    #打开日志
binlog_format = ROW  #设置row模式的日志格式
server-id = 2 #id不能重复

我在212上安装了mysql,zookeeper,manager,aria2,node。场景是这样的,212作为管理后台的服务器,在上面的数据库有otter_manager的数据库,和管理后台的数据库,223作为接口服务器,数据库有升级接口数据库。此时管理后台每加数据需要同步到接口这来。

打开manager的web页面,登录在右上角,默认用户名密码都是admin

添加zookeeper

添加node

看序号,序号为2,则去conf下执行echo 2 > nid,对应且唯一。还有修改配置文件otter.properties,otter.manager.address = 192.168.0.212:1099,确认manager的地址。好了,接下来可以去启动node,若一直都是未启动状态可以查阅/tmp/node/logs中的日志

给两台数据库实例建两个结构格式一样的数据库

数据源配置——添加数据源
从库

主库

添加完后

数据表配置——添加数据表
需要同步到的表

需要同步的表
添加后

配置同步规则——canel配置

同步管理——添加channel——添加Pipeline——源和目标表的配置

保存后点击channel1进去添加Pipeline

添加后点击Pipeline进去配置源和目标表

启用channel

测试单向同步完美成功。如若失败,请去监控管理——日志记录查看日志。

六、otter配置单向同步

概念步骤:先开启mysql——>开启zookeeper——>开启manager——>配置node——>启动node——>后续
机器:192.168.0.212(master),192.168.5.223(slave)
说明:我在212上安装了mysql,zookeeper,manager,aria2,node,在223上安装了aria2,node,双向同步,需要配置n个node,因为manager是下派任务给node去执行的。场景是这样的,212作为管理后台的服务器,在上面的数据库有otter_manager的数据库,和管理后台的数据库,223作为接口服务器,数据库有升级接口数据库。此时管理后台每加数据需要同步到接口这来。

添加zookeeper,同上

添加两个node,对应两台数据库

分别去node安装路径的conf下执行echo 1 > nid,echo 2 > nid,对应且唯一。并且otter.properties的otter.manager.address = 192.168.0.212:1099要对应安装manager的地址。接着启动

给两台数据库实例建两个结构格式一样的数据库,ottmanage(主库),ottupdate(从库)

数据源配置配置——添加数据源

数据表配置——添加数据表

配置同步规则——canel配置(两个,每一个对应一个数据库信息,从配置的数据库中,拉取bin-log信息)

同步管理——添加channel

点击添加好的channel,添加Pipeline


注意:第二个这里要点击高级设置,取消ddl支持,因为双向同步中,一个channel只允许有一个ddl,即只允许有一个主站。

点击Pipeline1,添加主库要往从库同步的数据源映射关系配置

点击Pipeline2,添加从库要往主库同步的数据源映射关系配置

由于是双向同步,所以还需要点击使用文档-》数据库初始化页面,在双机房的数据库同时执行初始化SQL。

启动,和可能遇到的问题,一般日志记录那只会记录异常记录。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70216.html

相关文章

  • 【深度】| 值得收藏的阿里开源技术

    摘要:淘宝定制基于,是国内第一个优化定制且开源的服务器版虚拟机。数据库开源数据库是基于官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。淘宝服务器是由淘宝网发起的服务器项目。 Java JAVA 研发框架 SOFAStack SOFAStack(Scalable Open Financial Architecture Stack)是用于快速构建金融...

    econi 评论0 收藏0

发表评论

0条评论

baiy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<