当前位置:首页 > 文章列表 > 数据库 > MySQL > 数据同步——otter

数据同步——otter

来源:SegmentFault 2023-01-22 16:15:47 0浏览 收藏

本篇文章向大家介绍《数据同步——otter》,主要包括MySQL、Java,具有一定的参考价值,需要的朋友可以参考一下。

参考文献:Otter-入门篇1(阿里开源项目Otter介绍)

一、背景

本人是一名应届毕业生,,还在努力挖坑。最近两个月被外派到其他公司做一个升级系统,做到现在一个多月。学到的东西很多,想总结的东西也很多,可是。。。时间是让人猝不及防的东西。好吧,现在先来总结otter数据同步。升级系统需要做到内网数据库(主)和外网的n个数据库(从)进行数据同步,考虑的方案有:
  1. 直接在项目配置n个从数据库加1个主库,但是码代码太麻烦了,有工具多好使。
  2. 用percona-tookit
    下载链接:https://www.percona.com/downl...
    github demo:https://github.com/mrjgreen/d...(表示还没看。。)
  3. 用otter(分布式数据库同步系统),纯java编写,支持windows,linux。阿里开源项目,数据同步的解决方案。链接:http://pan.baidu.com/s/1eR5ccQe
    密码:r5cp,github:https://github.com/alibaba/otter

二、Otter是什么?

Ottter是由阿里巴巴开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)。

Otter工作原理:

  1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal,
    请点击https://github.com/alibaba/canal
  2. 典型管理系统架构,manager(web管理)+node(工作节点)
    manager运行时推送同步配置到node节点
    node节点将同步状态反馈到manager上
  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.(otter node依赖于zookeeper进行分布式调度,需要安装一个zookeeper节点或者集群)

整体架构
  • db : 数据源以及需要同步到的库
  • Canal : 用户获取数据库增量日志,目前主要支持mysql
  • manager : 配置同步规则设置数据源同步源等
  • zookeeper : 协调node进行协调工作
  • node : 负责任务处理处理接受到的部分同步工作

三、Canel是什么?

阿里的开源项目。mysql数据库binlog的增量订阅&消费组件基于日志增量订阅&消费支持的业务:数据库镜像、数据库实时备份、级索引 (卖家和买家各自分库索引)、search build、业务cache刷新、价格变化等重要业务消息。github:https://github.com/alibaba/canal

首先来看mysql主备复制的原理:

mysql主备复制

再看canel的原理:

图片描述

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

四、otter环境搭建(所需文件已在上方下载链接)

先看看安装后的目录

目录
  1. 安装好mysql
  2. 安装好jdk,配置环境变量,zookeeper和Otter-manager都需要依赖java
  3. 安装配置zookeeper,这里配置的是单机模式,它还有集群模式,可以看
    http://blog.csdn.net/mark_lq/...http://blog.csdn.net/kongxx/a...

    图片描述

       修改bin/zkEnv.sh脚本:
       将ZOO_LOG_DIR="."修改为ZOO_LOG_DIR="/tmp/zookeeper/data"
       将ZOO_LOG4J_PROP=”INFO,CONSOLE”修改为ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
       修改bin/zkServer.sh脚本:
       将ZOOBIN="${BASH_SOURCE-$0}"修改为ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
       修改bin/zkCli.sh脚本:
       将ZOOBIN="${BASH_SOURCE-$0}"修改为ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
       启动:到bin目录,./zkServer.sh start
  4. 安装配置manager
    先安装manager
    图片描述

    再安装ottermanager的数据库
    图片描述

    这里可能会有权限问题,grant一下权限就ok
    修改配置文件otter.properties
    图片描述

    启动:到bin目录 ./startup.sh
    日志可以去/tmp/manager/logs/manager.log查看
    启动成功后,打开http://192.168.0.212:8080/,即可访问到
    图片描述
  5. 安装配置aria2,保证需要同步的数据通过极快的速度同步到需要同步的服务器上。
    安装,windows上安装需要配置环境变量。这个也是个神器哦
    图片描述
  6. 安装配置node节点,node主要负责接受manage下发任务的处理
    图片描述

    注意:这里配置完后,需到manager管理页面进行配置node信息,然后再来开启node建立连接!

五、otter配置单向同步

概念步骤:先开启mysql——>开启zookeeper——>开启manager——>配置node——>启动node——>后续
机器/数据库实例(mysql5.6):192.168.0.212(master),192.168.5.223(slave)
这里需要改一下配置文件,my.inf(linux,在etc/my.inf),my.ini(windows)

log_bin = mysql-bin    #打开日志
binlog_format = ROW  #设置row模式的日志格式
server-id = 2 #id不能重复

我在212上安装了mysql,zookeeper,manager,aria2,node。场景是这样的,212作为管理后台的服务器,在上面的数据库有otter_manager的数据库,和管理后台的数据库,223作为接口服务器,数据库有升级接口数据库。此时管理后台每加数据需要同步到接口这来。

打开manager的web页面,登录在右上角,默认用户名密码都是admin
  1. 添加zookeeper
    图片描述
  2. 添加node
    图片描述

    看序号,序号为2,则去conf下执行echo 2 > nid,对应且唯一。还有修改配置文件otter.properties,otter.manager.address = 192.168.0.212:1099,确认manager的地址。好了,接下来可以去启动node,若一直都是未启动状态可以查阅/tmp/node/logs中的日志
  3. 给两台数据库实例建两个结构格式一样的数据库
  4. 数据源配置——添加数据源
    从库
    图片描述

    主库
    图片描述

    添加完后
    图片描述
  5. 数据表配置——添加数据表
    需要同步到的表
    图片描述

    需要同步的表
    图片描述

    添加后
    图片描述
  6. 配置同步规则——canel配置
    图片描述
  7. 同步管理——添加channel——添加Pipeline——源和目标表的配置
    图片描述

    保存后点击channel1进去添加Pipeline
    图片描述

    添加后点击Pipeline进去配置源和目标表
    图片描述
  8. 启用channel
    图片描述
  9. 测试单向同步完美成功。如若失败,请去监控管理——日志记录查看日志。

六、otter配置单向同步

概念步骤:先开启mysql——>开启zookeeper——>开启manager——>配置node——>启动node——>后续
机器:192.168.0.212(master),192.168.5.223(slave)
说明:我在212上安装了mysql,zookeeper,manager,aria2,node,在223上安装了aria2,node,双向同步,需要配置n个node,因为manager是下派任务给node去执行的。场景是这样的,212作为管理后台的服务器,在上面的数据库有otter_manager的数据库,和管理后台的数据库,223作为接口服务器,数据库有升级接口数据库。此时管理后台每加数据需要同步到接口这来。

  1. 添加zookeeper,同上
  2. 添加两个node,对应两台数据库
    图片描述

    分别去node安装路径的conf下执行echo 1 > nid,echo 2 > nid,对应且唯一。并且otter.properties的otter.manager.address = 192.168.0.212:1099要对应安装manager的地址。接着启动
    图片描述
  3. 给两台数据库实例建两个结构格式一样的数据库,ottmanage(主库),ottupdate(从库)
  4. 数据源配置配置——添加数据源
    图片描述
  5. 数据表配置——添加数据表
    图片描述

    图片描述
  6. 配置同步规则——canel配置(两个,每一个对应一个数据库信息,从配置的数据库中,拉取bin-log信息)
    图片描述
  7. 同步管理——添加channel
  8. 点击添加好的channel,添加Pipeline
    图片描述

    图片描述

    注意:第二个这里要点击高级设置,取消ddl支持,因为双向同步中,一个channel只允许有一个ddl,即只允许有一个主站。
  9. 点击Pipeline1,添加主库要往从库同步的数据源映射关系配置
  10. 点击Pipeline2,添加从库要往主库同步的数据源映射关系配置
  11. 由于是双向同步,所以还需要点击使用文档-》数据库初始化页面,在双机房的数据库同时执行初始化SQL。
  12. 启动,和可能遇到的问题,一般日志记录那只会记录异常记录。
    图片描述

    图片描述

理论要掌握,实操不能落!以上关于《数据同步——otter》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
MySQL学习记录:SQL编程常见问题MySQL学习记录:SQL编程常见问题
上一篇
MySQL学习记录:SQL编程常见问题
MySQL 预处理语句prepare、execute、deallocate的使用
下一篇
MySQL 预处理语句prepare、execute、deallocate的使用
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3179次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3390次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3418次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4525次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3798次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码