利用otter实现跨机房数据同步

author author     2022-11-10     761

关键词:

Otter:

     otter是阿里开源的一个分布式数据库同步系统,尤其是在跨机房数据库同步方面,有很强大的功能。它是基于数据库增量日志解析,实时将数据同步到本机房或跨机房的mysql/oracle数据库。 


环境:(由于环境隐私原因,环境中使用的外部IP隐藏)

网络图:

技术分享图片

实验环境:

A机房(公司内网)《===》B机房(云服务环境内网)

 

数据源(mysql需开启binlog,binlog_format=ROW):

Mysql_A:192.168.1.20:3306(外部IP:xx.xx.xx.xx:3306)

Mysql_B:192.168.123.12:3306(外部IP:yy.yy.yy.yy:3306)

 

角色分布:

Zookeeper:192.168.1.20:3181(外部IP:xx.xx.xx.xx:3181)

Manager:192.168.1.19:2333

Node1(云服务):192.168.123.12(外部IP:yy.yy.yy.yy:2088)

Node2(公司内网):192.168.1.228:2088(外部IP:xx.xx.xx.xx:2088)

 

注:由于在现实环境中,考虑到跨机房同步的问题,所以很多时候需要使用到外部IP来进行服务之间的访问,因此mysql,zookeeper以及nodes都需讲相应的端口开放到外网(其中node需开放2088以及9090端口)。


部署otter:

Otter打包

1,下载:https://github.com/alibaba/otter

 

2,打包机器上安装mvn打包工具。

 

3,解压otter包,并搭建otter所需环境。

#unzip otter-4.2.15.zip
# cd otter-4.2.15/lib
# sh install.sh
# cd ../ && mvn clean install


4,打包。

# mvn clean install -Dmaven.test.skip -Denv=release

    打包成功后会在target目录下生成managernode的代码包:

技术分享图片



Manager安装

1,把打好的manager代码包传至manager节点,并解压。

# tar -zxvf manager.deployer-4.2.16-SNAPSHOT.tar.gz -C /usr/local/otter-manager

 

2,在mysql中,新建otter所需的库,并执行otter提供的初始化sql。(初始化sql在otter的代码包中能找到)

Mysql > create database otter_fjhb;
Mysql > source /path/otter-4.2.15/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

 

3,Manager配置文件,配置manager端口以及mysql和zookeeper的连接信息。

技术分享图片


4,启动manager。

# /usr/local/otter-manager/bin/starup.sh


Node安装

1,打开manager页面,配置zookeeper信息,注意node节点需能访问zookeeper信息,这里的zk需填写外部IP来访问。

技术分享图片

2,添加node1(华为云),启用外部IP。

技术分享图片

添加node2(华博内网),启用外部IP:

技术分享图片

3,进入node服务器,把打包好的node包传上去,并解压配置。

# tar -zxvf node.deployer-4.2.16-SNAPSHOT.tar.gz -C /usr/local/otter-node

 

4,配置manager的地址。

 技术分享图片


5,配置nid (根据node id配置来配置)。

# echo '1' > conf/nid

 

6,安装aria2工具(在node节点之间提供文件传输通道)。

# tar -zxvf aria2-1.33.1.tar.gz
# cd aria2-1.33.1/ && ./configure &&make && make install

 

7,启动node。

# /path/bin/startup.sh

 

8,Node正确启动后,可以查看node状态。

技术分享图片

 

注:安装node要先在manager页面上配置node信息,否则启动node的时候会报错:‘在manager上找不到node x’。



Otter单向数据同步

这里配置华博内网mysql到华为云内网mysql的单向数据同步。

其中有如下步骤:

1:配置同步双方的mysql数据源:配置管理à数据源配置。

   这里填写的mysql用户不一定要用root,只要有操作需同步数据的库表的相关权限即可。

技术分享图片

技术分享图片

2:配置同步双方的相关mysql数据源表,配置管理==》数据表配置。这里可以配置一个schema下的单张表,也可匹配schema下的所有表,这里我们配置同步所有表。

技术分享图片

技术分享图片


3:配置canal,定义源数据库,配置管理canal配置。

   这里填写的mysql用户不一定是root,但需拥有可执行show master status的权限。

技术分享图片


4:新增channel、pipline以及映射关系。

技术分享图片


根据同步的流程位置选择select机器和load机器,离源mysql近的应为select机器,离目的mysql近的应为load机器。

技术分享图片


根据同步关系选择数据源表:

技术分享图片

技术分享图片


完成以上配置后返回channel管理,启用channel,该channel中的pipline就会自动去寻找源mysql中的binglog position位置,两边的mysql就开始进入同步状态了。

技术分享图片

技术分享图片



Otter双向数据同步

双向同步本质上就是配置两个单向同步。本质上可以配置两个channel并分别配置pipline来实现,但是这种情况下,会有数据回环同步的问题。Otter里面提供了otter双向回环控制功能,可通过在一个channel里配置两个pipline来实现。

 

这里实现的是华博内网和华为云双向的数据同步,步骤和单向同步类似。

1:配置同步双方的mysql数据源。

技术分享图片技术分享图片

2:配置同步双方的相关mysql数据源表。

技术分享图片技术分享图片

3:配置canal,定义源数据库。

由于是双向同步,因此需配置两个canal。

技术分享图片技术分享图片

4:新增channel、pipline以及映射关系。

   新增channel。

技术分享图片

   添加pipline,这里根据同步方向不同,添加两个pipline。其中一个Pipline高级设置中的的“支持DDL同步”选项需关闭,否则channel会报“一个channel中只允许开启单向ddl同步!”错误。

技术分享图片技术分享图片

      在两个pipline中分别添加映射关系,添加完效果如下,形成一个双向的channel。

技术分享图片

      启用channel,状态中会显示这是一个双向channel,在完成定位后,双向同步开始工作。无论在哪个端的mysql操作数据,都会同步到另一端。但注意,由于其中的一个pipline个关闭了ddl同步功能,这里的ddl操作是单向同步的。

技术分享图片

技术分享图片


后记:

       以上操作是搭建公司两个环境mysql数据库同步的otter时顺手写的文档。其实otter还针对其他同步场景有不同的配置,比如双A配置,主从配置等等,这里由于还未测试过,没有写出来,希望后期后空可以做一下相关的实验。最终的结果效果测试没有放上来,是基于效果截图不直观的考虑。如果正确配置的话,应该同步效果都是没问题的。

      跨机房的otter配置,有个很大的问题就是网络访问问题,比如:manager需要能访问node,node之间需要能互相访问,manager和node需要能访问zookeeper,load node需要能访问源mysql等。如何把所有的关节打通是一个比较繁琐的问题,大家可以多留意manager和node的日志。

     另外,otter在使用过程中会出现许多不稳定的问题,比如pipline修改配置会造成同步延迟,pipline重启会导致定位异常等。建议给manager和node节点分配大一点的内存使用。

阿里出品otter-同步数据量6亿涉及200+个数据库实例之间的同步

...内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。otter第一版本可追溯到04~05年,此次外部开源的版本为第4版,开... 查看详情

一次业务跨库迁移过程(代码片段)

...sql日常操作有一定了解,因此主动请缨配合业务部门进行数据库迁移。一,业务背景1.将现有业务数据库B迁移到新服采购服务器上;2.将该业务线的A数据库中(100+表90G)表迁移到新数据库实例B库中;3.部分业务表涉及到多个业... 查看详情

案例分享跨机房es同步实战

背景众所周知单个机房在出现不可抗拒的问题(如断电、断网等因素)时,会导致无法正常提供服务,会对业务造成潜在的损失。所以在协同办公领域,一种可以基于同城或异地多活机制的高可用设计,在... 查看详情

数据同步工具otter谈谈binlog和canal

数据同步工具otter(一)谈谈binlog和canal之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。Otter是基于cannal开源的,canal又是基于mysqlbinlog的产品。我们... 查看详情

otter双a同步配置

...         otter双A配置  最近做跨国服务器的数据同步,用了阿里的otter开源框架,遇到了不少问题,写一下文档为以后做参考。  第一步:    下载所需的文件:otter,zookeeper,aria2    otter下载地址:https://... 查看详情

elasticsearch实战(四十七)-canal实现mysql数据实时同步方案

...为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务trigger获取增量变更。从2010年开始,业务逐步尝试数据库日志解析获取增量变更进行同步, 查看详情

mysql数据库同步系统otter部署实践(中国与欧洲同步)(代码片段)

...不支持外网回环访问(即在本机上向本机的外网地址发送数据 查看详情

kafka使用mirrormaker跨机房数据同步实践

参考技术A南京kafka集群有200+kafkatopic数据需要镜像同步到重庆集群,源kafka现状如下:使用kafkamirrormaker可以满足此需求,mirrormaker是kafka官方提供的工具:$KAFAK_HOME/bin/kafka-mirror-maker.sh,在目标kafka集群创建好同名topic,根据使用说明... 查看详情

vitess元数据跨机房灾备解决方案

测试使用vitess的时候发现vitess元数据的实现有多种方案,etcd,etcd2,zk,zk2,由于刚开始测试的时候使用的是基于k8s集群+etcd的,以下就分步说明灾备实现方案:1.前置条件 元数据实现方式必须选择etcd2,即在启动的时候需要增加参数&n... 查看详情

跨机房微服务高可用方案:derbysoft路由服务设计与实现

跨机房微服务高可用方案:DerbySoft路由服务设计与实现导读:在微服务中,当服务跨多个公有云的可用区时候,我们采用什么样的服务访问策略以及保障其高可用?本文是DerbySoft架构师朱攀在高可用架构群的分享,介绍微服务中... 查看详情

elasticsearch实战(四十七)-canal实现mysql数据实时同步方案(代码片段)

...美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务trigger获取增量变更。从2010年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务... 查看详情

主备数据中心机房

...中心才启动。“主备”数据中心最大的特点是:一、充分利用资源,避免了 查看详情

docker安装canalmysql进行简单测试与实现redis和mysql缓存一致性(代码片段)

...,Canal主要支持了MySQL的Binlog解析,解析完成后才利用CanalClient来处理获得的相关数据。(数据库同步需要阿里的Otter中间件,基于Canal)。当前的canal支持源端MySQL版本包括5.1.x,5.5.x,5.6.x,5.7.x,8.0.x。canalgithub地址... 查看详情

mysql到mysql分表数据迁移(代码片段)

...源离线同步工具DataX3.0介绍-阿里云开发者社区datax也可以实现分表,本身没有实践,因为这是Python的。我对这个不熟悉。所以本次没采用。otter:GitHub-alibaba/otter:阿里巴巴分布式数据库同步系统(解决中美异地机房)阿里开源... 查看详情

canal实现mysql数据实时同步

Canal实现MySQL数据实时同步​​1、canal简介​​​​2、工作原理​​​​3、Canal环境搭建​​​​2.1检查binlog功能是否开启​​​​2.2开启binlog功能​​​​2.2.1修改mysql的配置文件my.cnf​​​​2.2.2重启mysql​​​​2.2.3再次登录... 查看详情

inotify实时同步数据

...步服务如何实现数据实时同步?2.1.1实现数据同步通过(利用rsync服务)rsync服务端部署rsync客户端部署2.1.2实现数据实时监控(利用inotify)inotifywait-mrq--format‘%w%f‘-ecreate,delete,moved_to,close_write/data2.2实现数据同步与实时监控结合... 查看详情

mysql数据库同步小工具(java实现)

...系统的使用,研究了一下MySQL数据库同步,下面用Java代码实现MySQL数据库同步,以便自己查阅!?数据库同步实现功能点:1.支持跨服务器跨库的多线程同步2.每张表的同步有日志记录3.每次同步记录数可配置源码和具体的使用细则... 查看详情

利用数据库复制技术实现ms-sql数据同步更新

 ********* 利用数据库复制技术 实现数据同步更新 *********    复制的概念    MicrosoftSQLServer2000的复制是在数据库之间对数据和数据库对象进行复制和分发并 进行同步以确保其一致性... 查看详情