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

时间:2021-03-27 08:28:34


一、介绍

https://github.com/alibaba/otter

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

译意: 水獭,数据搬运工

语言: 纯java开发

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

https://github.com/alibaba/canal

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

译意: 水道/管道/沟渠

语言: 纯java开发

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

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


工作原理

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


原理描述:

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模式可保证数据的最终一致性)

二、环境准备

       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。
    阿里MYSQL数据搬运工具 otter安装配置
  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

三、配置数据同步

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

    show master status \G;

  

     1、数据准备

     在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


   2、创建canal

  


3、  创建数据源(添加表映射用到)


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


5、新建同步通道channel

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


6、新建一个pipeline


7、 新建表映射


四、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表同步.)


五、参考

安装配置参与官网

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