首页 > 数据库 >使用otter实现数据同步——mysql、oracle的数据同步利器

使用otter实现数据同步——mysql、oracle的数据同步利器

时间:2022-12-21 10:11:43浏览次数:60  
标签:node 同步 manager 添加 mysql oracle otter

文章目录

 

Otter⽬前⽀持了什么

  1. 单向同步, mysql/oracle互相同步
  2. 双向同步,⽆冲突变更
  3. ⽂件同步,本地/aranda⽂件
  4. 双A同步,冲突检测&冲突补救
  5. 数据迁移,中间表/⾏记录同步

导历史表还需要程序代码实现吗? 还在⽤mysql的主从复制吗? Otter都能为你解决。

典型的场景是账户信息表和账户交易明细表,更新账户余额后需要登记⼀条账户明细,并且保证在⼀个事务⾥,⽤户可以通过交易明细表查看交易记录,但是交易明细表的数据量是逐步递增的,⽤户量多的系统,⼏个⽉下来的数据超过千万了,表数据量⼀多就导致查询和 插⼊变慢,⽽⼀开始就对账户明细做分表处理就难于保证强⼀致性事务,通过otter可以将记录同步导历史表,并且进⾏分表处理,⽤户往 年的交易记录就可以查询历史表了,⽽原交易明细表就可以删除⼀个⽉甚⾄⼏天前的数据;

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

整体架构

在这里插入图片描述
原理描述:
基于Canal开源产品,获取数据库增量⽇志数据。
典型管理系统架构,manager(web管理)+node(⼯作节点)
a. manager运⾏时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
基于zookeeper,解决分布式状态调度的,允许多node节点之间协同⼯作.

名词解释:
Channel:同步通道,单向同步中⼀个Pipeline组成,在双向同步中有两个Pipeline组成;
Pipeline:从源端到⽬标端的整个过程描述,主要由⼀些同步映射过程组成;
DataMediaPair:根据业务表定义映射关系,⽐如源表和⽬标表,字段映射,字段组等;
DataMedia: 抽象的数据介质概念,可以理解为数据表/mq队列定义;
DataMediaSource: 抽象的数据介质源信息,补充描述DateMedia;
ColumnPair: 定义字段映射关系;
ColumnGroup: 定义字段映射组;
Node: 处理同步过程的⼯作节点,对应⼀个jvm;

环境准备

  1. otter manager依赖于mysql进⾏配置信息的存储,所以需要预先安装mysql,并初始化otter manager的系统表结构
    a. 安装mysql
  2. 整个otter架构依赖了zookeeper进⾏多节点调度,所以需要预先安装zookeeper,不需要初始化节点,otter程序启动后会⾃检.
    manager需要在otter.properties中配置zookeeper集群机器
  3. 安装jdk1.6+

下载安装

创建manager⽬录 : mkdir ~/manager
tar zxvf manager.deployer-4.2.14.tar.gz -C ~/manager

创建node⽬录: mkdir ~ /node
tar zxvf node.deployer-4.2.14.tar.gz -C ~ /node

修改配置⽂件运⾏

Manager

  1. otter.properties配置修改 vi ~/manager/conf/otter.properties

##修改为正确访问ip,⽣成URL使⽤,node的配置需要⽤到
otter.domainName= 127.0.0.1
##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 = hello
##为node连接manager的端⼝, node的配置需要⽤到
otter.communication.manager.port= 1099
##配置zookeeper集群机器
otter.zookeeper.cluster.default= 127.0.0.1:2181

其它使⽤默认配置即可

  1. Manager启动

Linux : sh ~/manager/bin/startup.sh
Windows:startup.bat
查看⽇志: vi ~/manager/logs/manager.log

现在访问我们地址的8080端口,要关掉8080的防火墙,否则访问不通。
出现如下界面,则表示manager配置成功
在这里插入图片描述

  1. 关闭manager

sh ~/manager/bin/stop.sh

Node

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

  1. 添加zookeeper

⾸先确保你的zookeeper已启动成功。
otter依赖zookeeper,访问manager页⾯的机器管理页⾯,选择菜单进⼊“机器管理→zookeeper管理”页⾯:
在这里插入图片描述
点击添加进⼊“添加Zookeeper集群”页⾯
在这里插入图片描述

  1. 添加node

Zookeeper添加成功后,进⼊“机器管理→Node管理”页⾯:
在这里插入图片描述
点击添加进⼊添加机器页⾯
在这里插入图片描述

  • 机器名称:可以随意定义,⽅便⾃⼰记忆即可
  • 机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中⼀个ip进⾏暴露. (此ip是整个集群通讯的⼊⼝,实际情况千万 别使⽤127.0.0.1,否则多个机器的node节点会⽆法识别)
  • 机器端⼝:对应node节点将要部署时启动的数据通讯端⼝,建议值:2088
  • 下载端⼝:对应node节点将要部署时启动的数据下载端⼝,建议值:9090
  • 外部ip :对应node节点将要部署的机器ip,存在的⼀个外部ip,允许通讯的时候⾛公⽹处理。
  • zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.
  • node这种设计,是为解决单机部署多实例⽽设计的,允许单机多node指定不同的端⼝
  1. 配置nid

机器添加完成后,跳转到机器列表页⾯,获取对应的机器序号nid:
在这里插入图片描述
通过这⼏步操作,获取到了node节点对应的唯⼀标⽰,称之为node id,简称nid,⽐如我添加的机器对应序号为1
执⾏echo 1 >~/node/conf/nid , 保存到conf⽬录下的nid⽂件;

  1. otter.properties配置修改 vi ~/otter/conf/otter.properties

#node的安装⽬录
otter.nodeHome = ${user.dir}/node
#manager的服务地址
otter.manager.address = 127.0.0.1:1099

  1. 启动

Linux:sh~/node/bin/startup.sh
Windows:startup.bat

打开⽇志: vi ~/node/logs/node/node.log,出现以下的错误,表⽰manager页⾯的ip配置不正确,此时修改ip为对应的host ip 后,再次启动即可。
在这里插入图片描述
关闭:sh ~/node/bin/stop.sh

配置⼀个同步任务

搭建⼀个数据库同步任务,源数据库必须开启binlog,并且binlog_format为ROW,即在mysql的配置⽂件加上以下两⾏
log-bin=mysql-bin
binlog-format=ROW
如果源库已开启binlog,通过mysql客户端命令show master status查看
在这里插入图片描述

添加canal

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

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

  1. 在Otter Manager“配置管理-canal配置”页⾯点击添加:
    在这里插入图片描述
  2. 进⼊添加cannal页⾯:
    在这里插入图片描述
    Node集成了cannal,所以不需要单独下载cannal;
    Cannal 存储机制分为memory和file,也可以在运⾏模式选项选择作为独⽴服务运⾏;
    勾选其他参数设置,可以设置cannal的服务端⼝;

必须配置位点信息,否则如果你的数据库已有存量数据,第⼀次运⾏时需要等待⽐较长的时间,可以通过连接源库客户端执⾏sql获 取,如下:
在这里插入图片描述

添加数据源

在这里插入图片描述
源库和⽬标库的schema需要⼀致,不然⽆法执⾏ddl语句(可以不一致,在设置Pipeline同步关系时可以指定同步某几个字段)

添加数据表配置

“配置管理-数据表配置”进⼊数据表管理页⾯:
在这里插入图片描述
点击添加,进⼊添加数据表页⾯:
在这里插入图片描述
table⽰例说明

  • 单表配置:alibaba.product
  • 分表配置:alibaba[1-64].product , alibaba.product[01-32]
  • 正则配置:(.).(.)
  • schema name和table name都设置成.*表⽰全库同步

添加⼀个channel

如下图,点击添加按钮进⼊添加channel页⾯,输⼊Channel Name后保存,则成功添加⼀个channel;
在这里插入图片描述

配置⼀个pipeline

添加channel成功后,点击Channel名字,进⼊Pipeline管理页⾯,添加⼀个pipeline;
在这里插入图片描述
进⼊添加pipeline页⾯
在这里插入图片描述
如上图填好所需信息,勾选⾼级设置,可以选是否过滤ddl同步等选项,点击保存,成功后会返回Pipeline管理页⾯。

添加映射关系

添加pipeline成功后,点击Pipeline名字
在这里插入图片描述
进⼊映射关系列表页⾯,点击添加
在这里插入图片描述
进⼊添加映射关系页⾯
在这里插入图片描述
点击保存返回映射关系列表页⾯,如果源数据表是只同步⼀个表可以点击下⼀步,选择需要同步的字段映射关系;

点击下一步后,出现两个表的所有字段,将需要同步的字段下移,注意顺序一一对应。
再点击下一步后,出现字段确认,此时将所有字段下移即可。

启⽤同步

以上配置,⼀个简单的同步任务就完成了,返回Channel管理页⾯
在这里插入图片描述
点击“启⽤”,运⾏状态就变为“运⾏”;
在这里插入图片描述
现在可以新增⼀个表,插⼊记录,查看数据是否同步过去了。
点击Channel名字,进⼊Pineline管理页⾯,可点击“监控”查看同步状态
在这里插入图片描述

避坑指南

同⼀个源表,同步到多个不同表,如果配置了Event Processor:source,运⾏时候会出现莫名其妙的数据问题

转载:https://blog.csdn.net/A_art_xiang/article/details/125254667

标签:node,同步,manager,添加,mysql,oracle,otter
From: https://www.cnblogs.com/harda/p/16995617.html

相关文章

  • MySQL Threads Running
    1、 广电告警背景如下: 主机:xxxx:3306,MySQL运行的Thread大于30,请关注,2021-07-1515:30:002、猜测是因为业务量造成?3、mysqlthreadrunning的理解  每秒查询次数(Qu......
  • MySQL8.0—clone plugin
    1、MySQL8.0cloneplugin简介 1) 克隆插件允许从本地或远程的MySQLServer中克隆数据。克隆的数据是存储在InnoDB中的schema(database)、table(表)、tablespaces(表空间)和d......
  • MySQL中这14个牛逼的功能,惊艳到我了!!!
    前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用groupby进行分组的场......
  • Oracle数据库业务SQL优化实战-时间区间查询案例
    背景查询字段其实比较多,我选择聚焦在瓶颈点上,让我们开始吧功能背景简介:我们在一个进入数据中心的入口设置了一台记录人员进出的机器,由保卫员操作记录人员进出(通过换取通......
  • MySQL——数据库锁
    一、锁的定义?锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何......
  • MySQL
    MySQL运算符本章节我们主要介绍MySQL的运算符及运算符的优先级。MySQL主要有以下几种运算符:算术运算符比较运算符逻辑运算符位运算符算术运算符MySQL支持的算术运算......
  • mysql数据库编码、字段编码、表编码 专题
    CREATEDATABASE`mybatis-subject`/*!40100DEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_bin*/其中的/*!40100...*/这部分注释会被MySQL执行,表示服务端版本号大于......
  • Linux下如何安装MySQL?
    目标主机:centos8MySQL安装所有平台的MySQL下载地址为:https://dev.mysql.com/downloads/repo/yum/。挑选你需要的MySQLCommunityServer版本及对应的平台。注意:安......
  • MySQL中这14个牛逼的功能,惊艳到我了!!!
    前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用groupby进行分组的场......
  • 高性能Mysql主从架构的复制原理及配置详解(转)
    温习《高性能​​MySQL​​》的复制篇.1复制概述     Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过......