otter安装与使用终极总结

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

otter简介

Otter项目地址:https://github.com/alibaba/otter

Otter文档地址:https://github.com/alibaba/otter/wiki

Ottter是由阿里开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步。核心就一个分布式数据库同步系统。

otter架构与概念介绍

名称:otter ['ɒtə(r)]

译意: 水獭,数据搬运工

语言: 纯java开发

定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统

名称:canal [kə'næl]

译意: 水道/管道/沟渠

语言: 纯java开发

定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

            Channel:

         同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成;Pipeline:从源端到目标端的整个过程描       述,  主要由一些同步映射过程组成;

            DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等;

            DataMedia: 抽象的数据介质概念,可以理解为数据表/mq队列定义;

            DataMediaSource: 抽象的数据介质源信息,补充描述DateMedia;

            ColumnPair: 定义字段映射关系;

            ColumnGroup: 定义字段映射组;

            Node: 处理同步过程的工作节点,对应一个jvm;

工作原理图

原理描述:

1. 基于Canal开源产品,获取数据库增量日志数据。

2. 典型管理系统架构,manager(web管理)+node(工作节点)

    a. manager运行时推送同步配置到node节点

    b. node节点将同步状态反馈到manager上

3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

canal 支持mysql系列的5.1 ~ 5.6版本,目前maridb经测试暂不支持.   (全面支持ROW/STATEMENT/MIXED几种binlog格式的解析)mysql做为master,otter只支持ROW模式的数据同步,其他两种模式不支持.  (只有ROW模式可保证数据的最终一致性)

canal同步mysql数据原理(主从复制)

Cannal是基于数据库增量日志解析,提供增量数据订阅,消费,目前主要支持mysql。

 这里我们首先来说一下mysql自己的master/slave是实现原理:

主要分为三步:

                   1:master将改变记录到二进制日志(binarylog)中

                    2:slave将master的binary logevents 拷贝到自己的中继日志(relay log)

                    3: slave重做relay log 中的事件,将改变反应到自己的数据库中

                   了解了mysql主从复制的基本原理,canal就简单多了:
 

canal的工作原理:

原理相对比较简单:

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)

说明:

   a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node)

   b. node节点可以有failover / loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)

otter核心model关系图

 

otter的S/E/T/L stage阶段模型

说明:为了更好的支持系统的扩展性和灵活性,将整个同步流程抽象为Select/Extract/Transform/Load,这么4个阶段.

Select阶段: 为解决数据来源的差异性,比如接入canal获取增量数据,也可以接入其他系统获取其他数据等。

Extract/Transform/Load 阶段:类似于数据仓库的ETL模型,具体可为数据join,数据转化,数据Load的

otter安装

环境准备

otter的环境需要mysql ,jdk, zookeeper , node , manager,aria2

这里zk,jdk的安装就不在讲了,我的其他博客有介绍,主要介绍,node和manager的安装流程

otter数据初始化

      otter manager依赖于mysql进行配置信息(元数据)的存储,所以需要预先安装mysql用于存储otter的元数据,并初始化otter manager所需的系统库和表,source otter-manager-schema.sql, 执行show databases可以看到脚本创建了一个名字叫otter的数据库。manager依赖于mysql进行配置信息的存储,所以需要预先安装mysql

# yum install -y mysql-server mysql mysql-devel
# service mysqld start         //启动mysql服务
# mysqladmin -u root password 'root' // 给root账号设置密码为 root

otter元数据库的一些信息

安装manager,在master机器上面安装

初始化otter manager系统表(元数据表):
otter-manager-schema.sql下载地址:

# wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

启动otter的元数据mysql载入sql:
# mysql -uroot -proot

/root/cloud/otter-manager-schema.sqlotter的安装目录

mysql> source /root/cloud/otter-manager-schema.sql

manager下载安装

                 下载页面:https://github.com/alibaba/otter/releases/

                  下载manager

wget https://github.com/alibaba/otter/releases/download/v4.2.14/manager.deployer-4.2.14.tar.gz

                  创建manager目录 : mkdir ~/manager

                  tar  zxvf manager.deployer-4.2.14.tar.gz  -C ~/manager           

修改manager的配置文件

进入conf下面修改,添加otter的元数据库信息

# vim otter.properties

otter.domainName = ip    修改为manager的ip,用户web访问
## otter manager database config     manager上面的mysql信息
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter
otter.database.driver.username = root
otter.database.driver.password = *******(保密)
## default zookeeper address   选择一个就近的zookeeper集群地址
otter.zookeeper.cluster.default = 本地ip:2181

准备启动
# bin/startup.sh

查看日志
tail -f logs/manager.log

出现如下图的日志表示安装成功

验证
访问: http:// 127.0.0.1::8080/,出otter面,即代表启成功

初始密码为admin/admin,点击右上角即可完成登。目前:匿名用只有只读查看的限,登录为管理才可以有操作

到此manager安装完成。

这里访问主页时报了一个错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections,将mysql连接数调大就行了

安装node

node会受到otter manager进行管理,需要在manager页面为node配置信息,并生成一个唯一id

a. 首先访问manager页面的机器管理,添加zookeeper管理,点添加

b. 访问manager页面的机器管理,点击node管理,点击添加机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid

几点说明:
      机器名称:可以随意定义,方便自己记忆即可
      机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通讯的入口,        实际情况千万别使用127.0.0.1,否则多个机器的node节点会无法识别)
      机器端口:对应node节点将要部署时启动的数据通讯端口,建议值:2088
     下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090
      外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。
      zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.
      node这种设计,是为解决单机部署多实例而设计的,允许单机多node指定不同的端口通过上面的操作,获取到了              node节 点对应的唯一标示,称之为node id,简称:nid. 记录该nid,后续启动nid时会使用

安装aria2

只需要node节点上安装,找个目录,安装即可,manager不需要

node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端,所以我们现在需要安装aria2node 需要aria2支持,在slave1和slave2机器上分别安装了一套。

aria2下载地址:http://sourceforge.net/projects/aria2/files/stable/

# tar -zxvf aria2-1.17.1.tar.gz

进入目录: cd aria2-1.17.1
编译:  
./configure

可能会出如下错误

configure: error: in `/root/cloud/aria2-1.17.1':
configure: error: no acceptable C compiler found in $PATH

# yum -y install gcc

然后./configure在就成功通了。

# make   报错的话,再重新执行一次/configure这个就好了。
# make install

安装node

 下载node

wget https://github.com/alibaba/otter/releases/download/v4.2.14/node.deployer-4.2.14.tar.gz

注意1:node要在其他的slave机器上安装

# mkdir node

# tar -zxvf node.deployer-4.2.13.tar.gz -C node

配置修改
nid配置 (将上面取到的序号,保存到conf下的nid文件,比如我添加的机器对应序号为1)

# echo 1 > conf/nid 

注意2:这步一定要有,不然node启动报错不同node的nid就是在manager页面指定的nid号

otter.properties配置修改

## otter arbitrate & node connect manager config
otter.manager.address =managerip:1099      修改为manager服务地址,1099不用改,只改地址

准备启动
# sh startup.sh

查看日

看到如上日志,代表node完成.

验证
访问: http:// ipÇ:8080对应点状,如果变为了已启,代表已正常启(ps,如果是未启,会是一个色高亮)

注意:如果发现一直都是未启可以查阅/node/logs中的日志,查看具体原因

slave2机器上也安装上面的部署安装aria2和node

到此otter安装成功。

Otter进行数据同步

前提:

有一点特注意:目前canal支持mixed,row,statement多种日志协议的解析,但配合otter进行数据库同步,目前仅支持row协议的同步,使用时需要注

  1. 需要修改row协议
  2. 需要给同步的账户赋予同步的权限
  3. 必须开启bin-log为ON
  4. 编辑/etc/my.cnf,检查一下配置
    binlog_format=ROW #修改成ROW
    server-id = 1 #
    不同mysql的server-id设置为不同的值
  5. bin-log模式修改命令
SET SESSION binlog_format = 'ROW';
SET GLOBAL binlog_format = 'ROW';

第一步: 添加数据,点配置管理,选择数据源配置

配置顺序:数据源-->数据表-->canal-->channel配置-->pipline

配置完后,编辑完后可以验证

在源mysql上面

注意:源数据可以任意,就是你需要拉数据的数据库,一定要和otter的元数据数据库分清

在元数据库上键库建表: create database otter ;

CREATE TABLE IF NOT EXISTS `user`(
   `name`  VARCHAR(100) NOT NULL,
   `age`  VARCHAR(100) NOT NULL,
   `money` VARCHAR(40) NOT NULL,
   PRIMARY KEY ( `name` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8

源数据库配置完成,目标库一样,选取目标库的URL地址即可。

置完后如下

第二步:同步数据源,源库和目标库的库和表

 

目标库一样的配置方式

配置完后

第三步:配置同步库mater源的cannal

然后点击保存.

注意:canal中的数据源类型可以配多个,多个用分号隔开,看你的需求。切、且只需要配置源数据库的url地址即可。你需要从几个源数据库拉取数据,就写几个源数据库的url地址。

第四步: 添加channel,点同步管理,选择添加

第五步:添加pipeline,点同步管理

注意: 选取运行机器和load机器时,一个就可以,多个的意思是,其中一个挂了,其他的顶替。

选择刚才新创建的channel

第六步:添加同步映射规则,点配置管理,选择canal配置

Pipeline管理中才新建的pip1,然后点添加

注意,如果是mysql到mysql ,两个白方框里面什么都不用写

注意:红框表明的是自己自定义代码,也可以为空,那么就是mysql->mysql的同步

最后:选择创建的cahnal启动,进入查看pipline是否正常启动,如果延时时间在500ms以内为正常。

异常表现为:chananl挂起,可查看pipline日志进行查看

FQA(踩过的坑)

  1. 注意同步数据库的权限问题:
  1. 开启row模式(不配日志会立刻报错)
  2. 赋予同步用户同步权限(日志会报权限问题)
  3. 开启bin-log同步(日志不报错,但是没有同步现象,定位并解决问题用了1天)

三步缺一不可,尤其第三步bin-log开启,否则

  1. 版本问题
  1. cannal采用了1.2版本数据走通了,刚开始采用高版本无论如何没有数据流入(定位并解决一周)
  2. otter在数据同步的,cannal->pipline->数据源同步(定位原因并解决用时3天)

自定义版本的kafka版本与实际kafka版本统一,否则报各种异常数据,后来采用0.8.2.2版本与生产环境版本一致最终解决

3、node日志没有打印出来,需要配置log4j.properties(定位并解决用时1天)

4、故障:channel挂起,从未同步主表数据。(解决方案同DDL语句不能     执行故障Exception: no support ddl for
   解决方案;otter的管理界面,点同步管理,停用Channel,击进Pipeline==>管理=>最下面高>ddl异常

5、故障;node未找到

原因:node机器添加完成后,跳到机器列表面,对应的机器序号nid,node节点对应的唯一

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

 

 


 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值