关键词:
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目录下生成manager和node的代码包:
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.cnf2.2.2重启mysql2.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的复制是在数据库之间对数据和数据库对象进行复制和分发并 进行同步以确保其一致性... 查看详情