阿里MYSQL数据搬运工具 otter安装配置


1、介绍

https://github.com/alibaba/otterjava

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

译意: 水獭,数据搬运工mysql

语言: 纯java开发git

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

https://github.com/alibaba/canalweb

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

译意: 水道/管道/沟渠sql

语言: 纯java开发数据库

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

关键词: mysql binlog parser / real-time / queue&topic


工做原理



原理描述:

1. 基于Canal开源产品,获取数据库增量日志数据。 什么是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模式可保证数据的最终一致性)

2、环境准备

       otter的环境须要mysql ,jdk, zookeeper , node , manager

软件名称 版本 安装服务器 端口 安装目录
zookeeper 3.4.5 172.17.210.100 2181 /usr/local/yunsea/zookeeper-3.4.5/
manager 4.2.10 172.17.210.98 18888 /usr/local/belle/otter/manager
node 4.2.10 172.17.210.98\172.17.210.99   /usr/local/belle/otter/node


1.1 otter数据库初始化

       otter manager依赖于mysql进行配置信息的存储,因此须要预先安装mysql,并初始化otter manager所需的系统库和表。

       source otter-manager-schema.sql

       执行show databases能够看到脚本建立了一个名字叫otter的数据库

1.2 zookeeper安装

      安装一个zookeeper到172.17.210.100机子(整个otter架构依赖了zookeeper进行多节点调度,因此须要预先安装zookeeper),也可使用其它已经安装好的zookeeper,能够共用,这里不作安装说明。

1.3 manager安装

    建立安装目录 /usr/local/belle/otter/manager

    tar -zxvf manager.deployer-4.2.10.tar.gz    /usr/local/belle/otter/manager

    修改mamager的配置文件信息(/conf/otter.properties)

    otter.domainName = 172.17.210.98

    otter.port = 18888

   

  ## otter manager 所依赖的数据库配置 ,修改成正确数据库信息
  otter.database.driver.class.name = com.mysql.jdbc.Driver
  otter.database.driver.url = jdbc:mysql://172.17.210.98:3306/otter
  otter.database.driver.username = root #用户名和密码请DBA配合受权
  otter.database.driver.password = 123456
## otter communication port(manager和node通信端口,保留默认1099)
otter.communication.manager.port = 1099
 
## otter communication pool size
otter.communication.pool.size = 10
 
## manager依赖的zookeeper 地址
otter.zookeeper.cluster.default = 172.17.210.100:2181
## default zookeeper sesstion timeout = 90s
otter.zookeeper.sessionTimeout = 90000
 
## otter arbitrate connect manager config

otter.manager.address = ${otter.domainName}:${otter.communication.manager.port}

准备启动

进入安装目录/bin/下,输入:sh startup.sh启动manager web网站

http://172.17.210.98:18888

1.4 NODE安装

生成nid

完成manager安装后,须要在manager页面为node定义配置信息,并生一个惟一id.

  1. 首先访问manager web页面”机器管理”菜单,选择“zookeeper管理”子菜单,点击页面“添加”按钮以注册一个zookeeper。
  2. 从”node管理”菜单中选择添加node按钮,往manager注册一个node节点信息。

    几点说明:

    • 机器名称:能够随意定义,方便本身记忆便可
    • 机器ip:对应node节点将要部署的机器ip,若是有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通信的入口,实际状况千万别使用127.0.0.1,不然多个机器的node节点会没法识别)
    • 机器端口:对应node节点将要部署时启动的数据通信端口,建议值:2088
    • 下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090
    • 外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,容许通信的时候走公网处理。
    • zookeeper集群:为提高通信效率,不一样机房的机器可选择就近的zookeeper集群.
    • 机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid


    • 经过这两部操做,获取到了node节点对应的惟一标示,称之为node id,简称:nid. 记录该nid,后续启动nid时会使用

      3.node启动步骤

      建立安装目录 /usr/local/belle/otter/node
      解压到安装目录 tar -xzvf node.deployer-4.2.10.tar -C /usr/local/belle/otter/node

     修改配置

           nid配置 (将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件,好比我添加的机器对应序号为1)

      echo 1 > conf/nid
  otter.properties配置修改

         打开文件/conf/otter.properties

        vi /conf/otter.properties,修改以下内容:

         ##修改成正确的manager服务地址

         otter.manager.address = 172.17.210.98:1099


        启动

       进入目录 /usr/local/belle/otter/node/bin/     

        sh startup.sh

    按照此方法安装NODE2

3、配置数据同步

     数据同步分2种,一、A库和B库同时上线  二、A库已经存在好久,B库才须要同步。第一种状况比较简单,第二种须要把A库须要同步的表导出数据导入到B库,而且记录A库同步位置点。

    show master status \G;

  

     一、数据准备

     在172.17.210.98\172.17.210.99数据库中分别建立一个测试表


CREATE TABLE `otter_sync` (

  `id` varchar(32) NOT NULL,

  `name` varchar(50) DEFAULT NULL,

  `desc` varchar(200) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8


   二、建立canal

  


三、  建立数据源(添加表映射用到)


四、添加源库的表和目的库的表


五、新建同步通道channel

同步一致性选择基于当前日志变动,同步模式选择“行记录模式”,不开启数据一致性。


六、新建一个pipeline


七、 新建表映射


4、otter目前存在的同步限制

  1. 暂不支持无主键表同步.  (同步的表必需要有主键,无主键表update会是一个全表扫描,效率比较差)
  2. 支持部分ddl同步  (支持create table / drop table / alter table / truncate table / rename table / create index / drop index,其余类型的暂不支持,好比grant,create user,trigger等等),同时ddl语句不支持幂等性操做,因此出现重复同步时,会致使同步挂起,可经过配置高级参数:跳过ddl异常,来解决这 个问题.  
  3. 不支持带外键的记录同步.  (数据载入算法会打算事务,进行并行处理,会致使外键约束没法知足)
  4. 数据库上trigger配置慎重.  (好比源库,有一张A表配置了trigger,将A表上的变化记录到B表中,而B表也须要同步。若是目标库也有这trigger,在同步时会插入一次A 表,2次B表,由于A表的同步插入也会触发trigger插入一次B表,因此有2次B表同步.)


5、参考

安装配置参与官网

https://github.com/alibaba/otter/wiki/Manager_Quickstart

https://github.com/alibaba/otter/wiki/Node_Quickstart

Otter高可用性

https://github.com/alibaba/otter/wiki/Otter%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7

FAQ

https://github.com/alibaba/otter/wiki/Faq