Otter 双向同步mysql

article/2025/10/20 13:22:50

一、Otter目前支持了什么

        1. 单向同步, mysql/oracle互相同步

        2. 双向同步,无冲突变更

        3. 文件同步,本地/aranda文件

        4. 双A同步,冲突检测&冲突补救

        5. 数据迁移,中间表/行记录同步

实际测试中,otter的同步速度相比于mysql的复制,约有5倍左右的性能提升,这取决于其同步算法的实现. 抛弃了强一致性,得到了性能提升。

otter是一款基于Java且免费、开源基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案。

二、官方文档

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

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

    演示视频: http://video.tudou.com/v/XMTc4NjU1MjM4NA==.html

三、原理描述

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

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

  1. manager运行时推送同步配置到node节点
  2. node节点将同步状态反馈到manager上

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

工作流程:otter基于zookeeper解决分布式状态调度,由manager(web管理)和node(工作节点)组成。manager运行时推送同步配置到node节点上,node节点将同步状态反馈到manger上。

四、安装环境

主机1 : 192.168.71.146(安装mysql)

主机2:192.168.71.246(部署otter环境)

从机:192.168.69.136 

系统  : CentOS release 6.10 (Final)

主机 Mysql : 10.1.18-MariaDB

从机 Mysql : 5.6

Zookeeper: 3.4.13

otter: 4.2.17

Canal : 1.1.3-SNAPSHOT

JDK:1.8

 

五、安装mysql并运行初始化脚本

  1. 主机1,从机 都安装mysql(根据需求统一版本,开启mysql  binlog日志)

      在mysql配置文件/etc/my.cnf 中添加配置

    [mysqld]
    log-bin=mysql-bin
    binlog-format=ROW
    character_set_server=utf8
    # 这里manager端为1, node端为大于1的数字,每个node不重复 数值随意配置,但要保证不重复
    server-id=1
    # 允许外部访问
    # bind-address = 0.0.0.0

     如果源库已开启binlog,通过mysql客户端命令show master status查看

  2. 在主机1 mysql中初始化otter manager系统表
    # 初始化manager系统表  可直接下载在工具中直接执行
    wget https://github.com/alibaba/otter/blob/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sqlmysql -uroot -proot < otter-manager-schema.sql# show databases;# +---------------------+
    # | Database |
    # +---------------------+
    # | information_schema |
    # | mysql |
    # | otter |
    # | performance_schema |
    # +---------------------+
    # 4 rows in set (0.01 sec)

     

    3. 分别在主机1,从机中执行retl数据库初始化命令

wget https://github.com/alibaba/otter/blob/master/node/deployer/src/main/resources/sql/otter-system-ddl-mysql.sql
mysql -uroot -p < otter-system-ddl-mysql.sql# show databases;
# +--------------------+
# | Database |
# +--------------------+
# | information_schema |
# | mysql |
# | otter |
# | performance_schema |
# | retl |
# +--------------------+
# 5 rows in set (0.00 sec)
  •  

五、下载安装  (安装在192.168.71.246机器)     

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

                  下载manager:wget https://github.com/alibaba/otter/releases/download/v4.2.17/manager.deployer-4.2.17.tar.gz

                  创建manager目录 : mkdir /usr/local/otter/manager

                  tar  zxvf manager.deployer-4.2.17.tar.gz  -C /usr/local/otter/manager

                 下载node: wget https://github.com/alibaba/otter/releases/download/v4.2.17/node.deployer-4.2.17.tar.gz

                  创建node目录: mkdir /usr/local/otter/node

                  tar  zxvf node.deployer-4.2.14.tar.gz  -C /usr/local/otter/node 

六、修改配置文件运行

(1)  Manager

     1) otter.properties配置修改  vi /usr/local/otter/manager/conf/otter.properties

         ##修改为正确访问ip,生成URL使用,node的配置需要用到

         otter.domainName= 192.168.71.246  

         ##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 = root

         ##为node连接manager的端口, node的配置需要用到

         otter.communication.manager.port= 1099

         ##配置zookeeper集群机器

         otter.zookeeper.cluster.default= 192.168.71.246 :2181

       其它使用默认配置即可

    2) Manager启动

         Linux : sh  ~/manager/bin/startup.sh

         Windows:startup.bat

         查看日志: vi  ~/manager/logs/manager.log

         启动成功后浏览器访问http://192.168.71.246 :8080,出现otter的页面

     访问:http://192.168.71.246 :8080/login.htm,初始密码为:admin/admin,即可完成登录. 目前:匿名用户只有只读查看的权限,登录为管理员才可以有操作权限

 3) 关闭manager(此处暂不关闭)

      sh  ~/manager/bin/stop.sh

(2)Node  (在主机2和从机上同时配置)

           node会受ottermanager进行管理,所以需要预先安装otter manager,完成manager安装后,需要在manager页面为node                        定义配置信息,并生一个唯一id。

    1)   添加zookeeper

           首先确保你的zookeeper已启动成功。

           otter依赖zookeeper,访问manager页面的机器管理页面,选择菜单进入“机器管理→zookeeper管理”页面:

           点击添加进入“添加Zookeeper集群”页面

 2)  添加node

          Zookeeper添加成功后,进入“机器管理→Node管理”页面:

 点击添加进入添加机器页面

 

    机器名称:可以随意定义,方便自己记忆即可

    机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通讯的入口,实际情况             千万别使用127.0.0.1,否则多个机器的node节点会无法识别)

    外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。

 

    zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.

    node这种设计,是为解决单机部署多实例而设计的,允许单机多node指定不同的端口

3)  配置nid(状态为未启动本文档是启动后截图)

        机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid:

 

通过这几步操作,获取到了node节点对应的唯一标示,称之为node id,简称nid,比如我添加的机器对应序号为1

       执行echo 1 >/usr/local/otter/node/conf/nid , 保存到conf目录下的nid文件;

4)  otter.properties配置修改  vi /usr/local/otter/node/conf/otter.properties

       # node的安装目录

       otter.nodeHome = ${user.dir}/node

       #manager的服务地址

       otter.manager.address = 192.168.71.246:1099

5)  启动

      Linux:sh /usr/local/otter/node/bin/startup.sh

      打开日志: vi /usr/local/otter/node/logs/node/node.log,出现以下的错误,表示manager页面的ip配置不正确,此时修改ip为对应的host ip后,再次启动即可。

   访问: http://192.168.71.246:8080/,查看“机器管理-Node管理”页面,对应的节点状态,如果变为了已启动,代表已经正常启动。

  #关闭:sh /usr/local/otter/node/bin/stop.sh(暂不执行)

七、配置同步任务

  添加canal

        Otter使用canal开源产品获取数据库增量日志数据,可以把cannal看作是源库的一个伪slave。

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

        Canal官方文档:https://github.com/alibaba/canal/wiki

1)  在Otter Manager“配置管理-canal配置”页面点击添加:

   2)  进入添加cannal页面:在数据库中执行

查看当前正在写入的binlog文件
show master status\G

获取当前时间戳
SELECT unix_timestamp(now());

          Node集成了cannal,所以不需要单独下载cannal;

          Cannal 存储机制分为memory和file,也可以在运行模式选项选择作为独立服务运行;

          勾选其他参数设置,可以设置cannal的服务端口;

          必须配置位点信息,否则如果你的数据库已有存量数据,第一次运行时需要等待比较长的时间,可以通过连接源库客户端                   执行sql获取

         其他配置默认

双向同步需要配置两个canal信息 用于存储从表数据配置方法同上 替换从表链接及账号密码,binlog日志同步点

   2.  添加数据源

“配置管理-数据表配置”进入数据表管理页面:

  源库和目标库的schema需要一致,不然无法执行ddl语句

   3.  添加数据表配置

        “配置管理-数据表配置”进入数据表管理页面:

  点击添加,进入添加数据表页面:

table示例说明     

单表配置:alibaba.product

分表配置:alibaba[1-64].product , alibaba.product[01-32]

正则配置:(.*).(.*) 

schema name和table name都设置成.*表示全库同步

 4.  添加一个channel

        如下图,点击添加按钮进入添加channel页面,输入Channel Name后保存,则成功添加一个channel;

   5.  配置一个pipeline

        添加channel成功后,点击Channel名字,进入Pipeline管理页面,添加一个pipeline;

双向同步需要配置两个pipeline用于不同同步方向的指定 不能配置两个channal

进入添加pipeline页面

 

如上图填好所需信息,勾选高级设置,可以选是否过滤ddl同步等选项,点击保存,成功后会返回Pipeline管理页面。

从节点必须取消ddl语句跳过ddl语句

同时指定主站点和从站点

6.  添加映射关系

添加pipeline成功后,点击Pipeline名字选取源数据表和目标数据表 注意方向

进入映射关系列表页面,点击添加

 进入添加映射关系页面

   点击保存返回映射关系列表页面,如果源数据表是只同步一个表可以点击下一步,选择需要同步的字段映射关系;

 

   7.  启用同步

以上配置,一个简单的同步任务就完成了,返回Channel管理页面

点击“启用”,运行状态就变为“运行”;

   现在可以新增一个表,插入记录,查看数据是否同步过去了。

  点击Channel名字,进入Pineline管理页面,可点击“监控”查看同步状态

异常日志查询

主从同步的方式,从库ddl语句无法同步到主库。

关于双A同步(数据的一致性问题)

双A同步相比于双向同步,主要区别是双A机房会在两地修改同一条记录,而双向同步只是两地的数据做互相同步,两地修改的数据内容无交集。

所以双A同步需要额外处理数据同步一致性问题. 同步一致性算法:Otter数据一致性 ,目前开源版本主要是提供了单向回环补救的一致性方案。

双A同步相比于双向同步,整个配置主要是一些参数上有变化,具体步骤:

  • channel配置中的 “是否开启数据一致性” 设置为: 是
  • channel中的两个pipeline配置中需要将基中一个设置为主站点,并且在高级设置中,将其中一个设置为false,另一个设置为 true
  • 每个pipeline各自配置canal,定义映射关系

参考文档:https://blog.csdn.net/wudufeng/article/details/78688240

https://blog.csdn.net/cx136295988/article/details/76690605


http://chatgpt.dhexx.cn/article/KHstykBr.shtml

相关文章

Otter安装说明

Otter安装说明 Mysql安装&#xff08;如果已安装则无需再安装&#xff09;&#xff1a;【忽略安装Mysql】 安装依赖 yum -y install perl perl-devel autoconf #下载Mysql包 https://github.com/alibaba/otter/releases【Otter最新版本下载】 wget https://dev.mysql.com/g…

otter mysql hbase_otter自定义扩展

otter自定义扩展 otter支持数据处理自定义过程。 Extract模块&#xff1a; EventProcessor : 自定义数据处理&#xff0c;可以改变一条变更数据的任意内容 FileResolver : 解决数据和文件的关联关系 目前两者都只支持java语言编写&#xff0c;但都支持运行时动态编译&lib包…

otter搭建

一、安装zookeeper的单机版 apache-zookeeper-3.6.1-bin.tar.gz 如果下载的是3.5及以后的&#xff0c;需要下载包名带有-bin的版本&#xff0c;从3.5.5开始&#xff0c;带有bin的包才是解压以后可以直接使用的里面有编译后二进制的包&#xff0c;而之前的普通的tar.gz里面只是…

otter安装

译意&#xff1a; 水獭&#xff0c;数据搬运工 语言&#xff1a; 纯java开发 定位&#xff1a; 基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统 otter的环境需要&#xff1a;mysql&#xff0c;jdk&#x…

Otter 安装部署维护

介绍 淘宝开源的产品&#xff0c;基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库&#xff0c;一个分布式数据库同步系统。 目前同步规模&#xff1a; 同步数据量6亿 文件同步1.5TB(2000w张图片) 涉及200个数据库实例之间的同步 80台机器…

Otter配置说明

Otter配置说明 标签&#xff1a; Otter 下载 最新版Otter下载地址 CSDN下载地址 需要下载manager.deployer-4.2.13.tar.gz&#xff0c;node.deployer-4.2.13.tar.gz和Source code (zip) 需要安装zookeeper和jdk支持&#xff0c;canal已经内置&#xff0c;不需要安装 manage…

mysql otter_MySQL数据库实现远程同步的工具alibaba otter

MySQL数据库实现远程同步的工具alibaba otter 发布时间&#xff1a;2020-06-03 15:46:57 来源&#xff1a;51CTO 阅读&#xff1a;291 作者&#xff1a;三月 本篇文章给大家主要讲的是关于MySQL数据库实现远程同步的工具alibaba otter的内容&#xff0c;感兴趣的话就一起来看看…

Otter源码深入详解(三)

分析Node的代码前&#xff0c;需要理解Node的工作机制&#xff0c;需要先了解其工作原理&#xff1a; https://github.com/alibaba/otter/wiki/Otter调度模型 这里用到了SEDA模型&#xff0c;SEDA模型这里有偏文章介绍的很好&#xff1a; https://www.jianshu.com/p/e184fdc0ad…

otter mysql教学视频_3.Otter快速上手

QuickStart 1.几点说明 有一点特别注意&#xff1a;目前canal支持mixed,row,statement多种日志协议的解析&#xff0c;但配合otter进行数据库同步&#xff0c;目前仅支持row协议的同步&#xff0c;使用时需要注意. 环境准备 操作系统 a. otter为纯java编写&#xff0c;windows/…

通过docker构建otter

本文是通过docker构建otter环境与mysql环境 一、使用docker构建otter docker pull canal/otter-all curl -fsSL https://raw.githubusercontent.com/alibaba/otter/master/docker/run.sh | bash 访问otter&#xff1a;http://192.168.102.212:8080 账号密码默认是admin/adm…

Otter详解

otter girthub链接&#xff1a; https://github.com/alibaba/otter 有兴趣的同学可以移步笔者的个人博客 更多博客 整体架构 子模块解释 zooKeeper 分布式一致性协调服务&#xff0c;主要用来调度配置好的node模块。 manager 管理中心&#xff0c;用来配置同步信息&#…

otter 配置问题笔记

otter 部署启动 : 1,启动zookeeper 2,启动manager 3,启动node 4 在manger管理界面配置zookeeper 和node 添加映射关系表 点击pipeline的名称, 点击[批量添加] (一个一个的添加, 太累) 按照以下格式输入 数据库名,表1,【数据源配置】序号,目的数据源的序号 item,s…

otter快速开始

目录 一、Otter简介二、Otter目前支持了什么三、Canal & Otter 的一些注意事项四、otter单向同步搭建测试1. 环境准备2. Manager使用&#xff08;任务配置整个流程&#xff09;配置完整流程 3. 过程问题整理3.1 Problem accessing /channelList.htm. Reason:3.2 show maste…

Otter

一.概述 Otter 阿里巴巴分布式数据库同步系统&#xff1a;https://github.com/alibaba/otter Otter底层依赖Canal接收和解析mysql binlog日志&#xff0c;提供了可配置化的同步机制&#xff0c;纯java开发&#xff0c;免费开源的&#xff0c;基于数据库增量日志解析&#xff…

otter学习 | otter 基本介绍

一、项目介绍 名称&#xff1a;otter [‘ɒtə(r)] 译意&#xff1a; 水獭&#xff0c;数据搬运工 语言&#xff1a; 纯java开发 定位&#xff1a; 基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库。 二、工作原理 原理描述&#xf…

Otter-安装配置

简介 OTTER是阿里巴巴公司为了解决杭州/美国机房数据间同步研发的一个开源软件。OTTER基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库&#xff0c;是一个分布式数据库同步系统。 工作原理图&#xff1a; 原理描述&#xff1a; 基于Can…

Otter入门简介

一、Otter简介 1.1 otter是什么&#xff1f; otter 译意&#xff1a; 水獭&#xff0c;数据搬运工 语言&#xff1a; 纯java开发 定位&#xff1a; 基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。Ottter是…

2.Otter原理介绍

Introduction 项目介绍 名称&#xff1a;otter [ɒtə(r)] 译意&#xff1a; 水獭&#xff0c;数据搬运工 语言&#xff1a; 纯java开发 定位&#xff1a; 基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库. 工作原理 image 原理描述&…

斐波那契数列输出的C语言实现

斐波那契数列输出的C语言实现 1.流程图 2.代码实现 #include <stdio.h>#define num1 0//第一项 #define num2 1//第二项int Fibonacci_Sequence(int num_n1, int num_n2, int times_0,int times_already)//num_1为第n-2位数&#xff0c;int num_n2为第n-1位数&#xf…

蓝桥杯入门训练Fibonacci数列 C语言

Fibonacci数列 C语言 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 说明: 在本题中…