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

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节点分配大一点的内存使用。

原文地址:http://blog.51cto.com/icenycmh/2113579

时间: 2024-11-09 02:49:48

利用otter实现跨机房数据同步的相关文章

Windows与Linux跨机房数据同步

背景: 总部研发中心需要将机房的存储SMB服务中某些文件同步到 IDC 及 分公司研发中心办公区内部SMB. IDC与总部研发中心通过IPsecVPN,形成隧道链路:分公司办公区域仅为基本网络. 难点: 办公区无硬件VPN类设备,无固定IP 总部的防火墙提供的VPN客户端Linux版本仅为1.00,需要开图形且极其不好用:  解决方法: 办公区域增加前置机安装windows版本软件VPN,实现与总部前置机联通.  网络连接拓扑如下:   应用实施拓扑及步骤如下:     实施步骤1: 配置两地S

sybase代理表 跨服务器数据同步

sybase ASE 代理表  跨服务器数据同步 之前双做了sybase服务器数据同步,使用的代理表.近期更换server1,一开始安装sybase时本地服务器名不同,server1的数据直接dump,完成后可以读取数据,但在执行代理表数据插入本地表中时报错.查询后 select @@servername 本地名为db3 查询原本地服务器名为charge 删除原名 sp_dropserver db3 设置新名,即原server1名 sp_addserver charge,local 重启syba

MySQL数据库跨服务器数据同步

1.背景介绍最近公司项目要求与开源项目Zentao做数据对接,因为改动开源项目风险较大,采用将Zentao数据库的相关表与本地数据库同步的方案.由我测试方案的可行性.mysql版本:5.7.20.本地数据库A(作为Zentao数据库),本地数据库B,本地程序C:本地为Windows环境. 2.方案探索方案1项目经理的意思是在A中写触发器,表中数据变化时将ID发给C,由C在A中查询变化的数据,写入B.过程中需要安装mysql-udf-http插件(参考:https://www.2cto.com/d

利用inotify和rsync实现数据同步

一.rsync是什么? 它是Linux系统下文件同步可数据传输的工具,采用rsync算法使客户机与服务器,主服务器与备份服务器数据同步.rsync也能实现中断后恢复传输.rsync支持增量备份.二.rsync有4种模式1.本地模式.2.远程shell模式3.查询模式4.C/S模式我们来安装rsync测试一下吧.安装很简单的tar xvf rsync-3.0.9.tar.gz cd rsync-3.0.9 ./configure make && make install rsync --he

Oracle Job定时任务详解、跨数据库数据同步

业务需求,需要与A公司做数据对接,我们公司用的Oracle,A公司用的SQL Server数据库,如何跨数据库建立连接呢?这里使用的是DBLink,不会配置的请看我的另外一篇博客:https://www.cnblogs.com/chenyanbin/p/11291752.html 如果做数据同步呢?上面我们已经通过DBLink与SQL Server建立连接了,那么我们就可以获取A公司表中的数据.在通过Oracle Job定时任务,具体JOB还有那些功能,这里不做详细介绍了,百度上一大堆,这里我们

使用HTML5 跨域共享特性解决AJAX跨域数据同步问题

HTML 5以前的标准由于考虑到浏览器安全问题并不允许直接跨域通信,于是为了达到跨域通信的目的各种蛋疼的解决办法出现了,常用的有:jsonp.使用代理文件.地址栏hash等等,这些办法的出现在达到解决跨域问题的同时,也增加了前端页面的性能开销和维护成本.HTML5新的标准中,增加了" Cross-Origin Resource Sharing"特性,这个特性的出现使得跨域通信只需通过配置http协议头来即可解决. Cross-Origin Resource Sharing 详细解释见:

[转]跨机房问题

跨机房问题一直都是一个老大难的问题,先看传统数据库的跨机房方案. Master/Slave方案 这是最常用的方案,适用于大多数需求.Master将操作日志实时地发送到Slave,Slave当成Master的一个Hot Backup.Master宕机时,服务切换到Slave,需要修改客户端逻辑使得Master失效时自动寻找新的Master. 这个方案有一个问题就是数据库的Master和Slave一般不是强同步的,所以,切换到Slave后可能丢失宕机前的少量更新.如果将Master和Slave做成强

mysql跨机房异地区的主从数据库同步备份业务实现解决方案

mysql跨机房异地区的主从数据库同步备份业务实现解决方案 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元. ps. 目前内部版本已经支持mysql和oracle部分版本的日志解析,当前的canal开源版本支持5.7及以下的版本(阿里内部mysq

利用rsync+inotify实现数据同步

利用rsync+inotify实现数据同步 一.rsync概念: rsync是Linux系统下文件同步可数据传输的工具,采用rsync算法使客户机与服务器,主服务器与 备份服务器数据同步.rsync也能实现中断后恢复传输.rsync支持增量备份. 二.rsync的模式: 1.本地模式. 2.远程shell模式 3.查询模式 4.C/S模式 安装rsync: tar xvf rsync-3.0.9.tar.gz cd rsync-3.0.9 ./configure make && make