Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Otter数据同步服务部署与数据同步最佳实践

Otter数据同步服务部署与数据同步最佳实践

原创
作者头像
Jerly.Yan
发布于 2024-01-11 13:03:17
发布于 2024-01-11 13:03:17
1.2K0
举报

一、概述

otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统

工作原理:

原理描述:

1. 基于Canal开源产品,获取数据库增量日志数据

2. 典型管理系统架构,manager(web管理)+node(工作节点)

a. manager运行时推送同步配置到node节点

b. node节点将同步状态反馈到manager上

3.基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

1.1 环境准备

  • otter所需组件:mysql、jdk、zookeeper、otter、aria2
  • otter官方地址:https://github.com/alibaba/otter
  • otter官方文档:Home · alibaba/otter Wiki · GitHub

本文档使用的组件版本:mysql5.7、jdk1.8.0_77、zookeeper3.9、otter4.2.18、aria2-1.36.0

相关主机信息:

角色

主机ip

组件

Otter manager

172.17.6.4

otter manager 、otter node、jdk 、zookeeper 、mysql

otter node

172.17.6.19

otter node、jdk、zookeeper

mysql (源)主机自建

172.17.6.47

jdk、zookeeper 、mysql server

mysql (目标)腾云 实例

172.17.6.16

二、安装otter manager

2.1 zookeeper 集群部署

1.安装zookeeper

代码语言:shell
AI代码解释
复制
#安装jdk
rpm -ivh jdk-8u301-linux-x64.rpm
#安装zookeeper
tar -zxf apache-zookeeper-3.9.1-bin.tar.gz
mv apache-zookeeper-3.9.1-bin /data/zookeeper
mkdir /data/zookeeper/data
cd /data/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
#编辑配置文件:
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
server.1=172.17.6.4:2888:3888
server.2=172.17.6.47:2888:3888
server.3=172.17.6.19:2888:3888

2.将配置复制到其他节点

代码语言:shell
AI代码解释
复制
mkdir -p /data/zookeeper/zkdata 
mkdir -p /data/zookeeper/zklog 

3.在每个节点生成节点id

代码语言:shell
AI代码解释
复制
#在172.17.6.4 节点操作
echo 1 > /data/zookeeper/zkdata/myid
#在172.17.6.19 节点操作
echo 2 > /data/zookeeper/zkdata/myid 
#在172.17.6.47 节点操作
echo 3 > /data/zookeeper/zkdata/myid 

4.启动

代码语言:shell
AI代码解释
复制
/bin/zkServer.sh start

2.2 安装 otter manager

1.下载地址:

https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz

代码语言:shell
AI代码解释
复制
mkdir -p ./otter/manager 
cd ./otter/manager 
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz
tar zxf manager.deployer-4.2.18.tar.gz
  1. 安装mysql

略……

otter manager 需要mysql 的支持。

  1. 配置otter manager
代码语言:shell
AI代码解释
复制
 wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

1)将初始化 manager 数据库

代码语言:shell
AI代码解释
复制
mysql >create database otter
mysql >use otter 
mysql>source otter-manager-schema.sql

2)创建数据库用户

代码语言:shell
AI代码解释
复制
CREATE USER 'otter'@'%' IDENTIFIED BY '123456';     #安装时请修改密码
GRANT ALL ON otter.* TO 'otter'@'%'; 
flush privileges;
  1. 修改配置

修改conf/otter.properties,修改如下信息:

代码语言:shell
AI代码解释
复制
otter.domainName = 62.234.27.223                                        #otter manager管理后台的域名或访问ip,页面跳转时会用这个值,为了方便访问,填写了公网IP
otter.port = 80   						                        #otter manager管理后台的访问端口,默认为8080
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://172.17.6.4:3308/otter	    #otter数据库地址
otter.database.driver.username = otter				                #otter数据库账号
otter.database.driver.password = 123456				            #otter数据库密码

otter.communication.manager.port = 1099  				            #otter通讯地址,默认可不改
otter.communication.pool.size = 10             			            #otter通讯连接池,默认可不改

otter.zookeeper.cluster.default = 172.17.6.4:2181,172.17.6.47:2181,172.17.6.19:2181		        #zk连接地址

三、安装otter node

下载地址:https://github.com/alibaba/otter/releases/download/otter-4.2.18/node.deployer-4.2.18.tar.gz

代码语言:shell
AI代码解释
复制
mkdir -p /data/otter/node
tar -zxf node.deployer-4.2.18.tar.gz -C /data/otter/node

安装aria2c

node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端

aria2c下载地址:Releases · aria2/aria2 · GitHub

代码语言:shell
AI代码解释
复制
wget https://github.com/aria2/aria2/releases/download/release-1.36.0/aria2-1.36.0.tar.gz 
tar zxvf aria2-1.36.0.tar.gz
cd aria2-1.36.0
./configure 
make 
cd src 
cp aria2c /usr/local/bin

注意:编译aria2c 报错:

缺少 gcc11 的包 ,安装

代码语言:shell
AI代码解释
复制
yum install gcc-c++

执行make 时报错:

系统缺少依赖包,执行以下安装命令

代码语言:shell
AI代码解释
复制
yum install gcc gcc-c++ kernel-devel libgcrypt-devel libxml2-devel openssl-devel gettext-devel cppunit

四、配置 otter

访问 otter manager

3.1 添加zookeepr集群

注:zookeeper 集群地址以逗号分隔,以分号结束

3.2 添加node 节点

输入如下信息:

  • 机器名称:可以随意定义,方便自己记忆即可
  • 机器ip:对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通讯的入口,实际情况千万别使用127.0.0.1,否则多个机器的node节点会无法识别)
  • 机器端口:对应node节点将要部署时启动的数据通讯端口,建议值:2088
  • 下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090
  • 外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。
  • zookeeper集群:为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.

机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid

将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件

例如:echo 3 > conf/nid修改conf/otter.properties,修改如下信息:

代码语言:shell
AI代码解释
复制
otter.manager.address = 172.17.6.4:1099  #修改为otter master地址

启动

代码语言:shell
AI代码解释
复制
./bin/startup.sh

出现如下日志表示启动成功

验证

五、配置同步规则

配置一个otter同步任务,一般需要进行如下步骤:

1)配置数据源

a. 源库 :jdbc:mysql://172.17.6.47:3306

b. 目标库 例:jdbc:mysql://172.17.6.16:3306

2)配置数据表

a. 源数据表(db_test库的所有表):db_test.*

b. 目标数据表(db_test库的所有表):db_test.*

3)配置Canal

a. 源数据库Canal

b. 目标数据表Canal(主从单向同步不需要,双主双向同步需要)

4)配置Channel同步通道

5)配置Pipeline同步管道

a. 选择源库节点和目标库节点(可多节点选择)

b. 选择源库Canal

6)配置同步映射规则

a. 定义源表和目标表的同步关系

7)启动

  1. 测试&监控

5.1 配置数据源

1.添加数据源mysql 172.17.6.47

注:这里的用户名和密码为mysql root的账号和密码。

  1. 添加目标数据源 mysql 172.17.6.16

5.2 配置数据库表

这里以同步db_test库为例

1)添加源库的表

2)添加目标库的表

5.3 添加channel通道

添加db_test 库的 channel

位点信息为canal开始同步的位置,该信息可在mysql中使用如下语句获取:show master status\G;

5.4 配置Channel同步通道

点击同步管理 ,点击添加 ,新增channel

这里以单向同步db_test 库为例

输入Channel Name,同步一致性选择:基于当前日志更新,同步模式为:列记录模式,如果是主主双向同步模式,还需要开启数据一致性

5.5 配置pipline同步管道

在Channel列表,点击刚才创建的Channel名字,进入Pipeline管理列表

点击“添加”按钮

5.6 配置同步映射规则

在Pipeline列表,点击刚才创建的Pipeline名字,进入映射关系列表

点击添加按钮,添加映射关系

5.7 启动同步

配置完映射规则,回到同步管理主页,点击启用即可开启同步。

查看同步状态

5.6 测试&验证

在源端写入一个新的表,并insert 1000万条数据

代码语言:shell
AI代码解释
复制
mysql -h 172.17.6.47 -u root -p
MySQL [(none)]> use db_test;
Database changed
MySQL [db_test]> CREATE TABLE IF NOT EXISTS user_info (
    -> id INT PRIMARY KEY AUTO_INCREMENT,
    -> name VARCHAR(50),
    -> age INT,
    -> salary DECIMAL
    ->    ); 

#创建一个存储过程,插入1万条数据
MySQL [db_test]> CREATE PROCEDURE Insertuser()
    -> BEGIN
    -> DECLARE i INT DEFAULT 1;
    -> WHILE i <= 10000 DO
    -> INSERT INTO user_info (id, name, age, salary) VALUES (i, CONCAT('John', i), 30, 5000);
    -> SET i = i + 1;
    -> END WHILE;
    -> END //
MySQL [db_test]> DELIMITER ;
#执行存储过程
MySQL [db_test]> CALL Insertuser();

查看源端表的行数

登录目标数据库 172.17.6.16 进行验证

查看同步监控

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
otter安装 原
    https://github.com/alibaba/otter/wiki/QuickStart
尚浩宇
2018/08/17
9490
otter安装
                                                                            原
数据同步利器-otter的搭建使用说明「建议收藏」
导历史表还需要程序代码实现吗? 还在用mysql的主从复制吗? Otter都能为你解决。
全栈程序员站长
2022/09/06
2.9K0
数据同步利器-otter的搭建使用说明「建议收藏」
Otter-入门篇3(Node搭建)
Otter-入门篇3(Node搭建) 前言 哈咯大家好呀!今天是对otter准备的最后一个流程,配置好node,并且吧manager,zookeeper和node组合起来形成一个完整可以进行Mysql
喵了个咪233
2018/03/02
2.3K0
Otter-入门篇3(Node搭建)
otter用于跨云RDS之间配置双主实时同步
客户需要将华为云rds for MySQL和天翼云rds for MySQL做一个双向同步,当华为云rds宕机的时候,可以切换到天翼云继续提供服务,而且此时,天翼云的数据也可以自动同步到华为云rds,平时只使用华为云的rds,和双A方案有点差异,需要注意的是rds环境不能安装任何的软件,所以,我目前想到的方案有:
AiDBA宝典
2023/04/26
3.4K0
otter用于跨云RDS之间配置双主实时同步
Otter-入门篇2(Manager安装配置)
Otter-入门篇2(Manager安装配置) 前言 上一节已经简单介绍了Otter的基本信息,本节我们就来开准备搭建一个我们自己的Otter环境,因为一个Otter需要Manage+node+数据库
喵了个咪233
2018/03/02
1.5K0
Otter-入门篇2(Manager安装配置)
Canal高可用架构部署
canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。
陶陶技术笔记
2021/03/24
4.3K2
Canal高可用架构部署
Otter-入门篇4(单向同步实践)
Otter-入门篇4(单向同步实践)# 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper,manage和node,本节就来完成otter第一个实际功能,单相数据同步
喵了个咪233
2018/03/02
2K0
Otter-入门篇4(单向同步实践)
Greenplum 实时数据仓库实践(5)——实时数据同步
构建实时数据仓库最大的挑战在于从操作型数据源实时抽取数据,即ETL过程中的Extract部分。我们要以全量加增量的方式,实时捕获源系统中所需的所有数据及其变化,而这一切都要在不影响对业务数据库正常操作的前提下进行,目标是要满足高负载、低延迟,难点正在于此,所以需要完全不同于批处理的技术加以实现。当操作型数据进入数据仓库过渡区或ODS以后,就可以利用数据仓库系统软件提供的功能特性进行后续处理,不论是Greenplum、Hive或是其他软件,这些处理往往只需要使用其中一种,相对来说简单一些。
用户1148526
2021/12/17
4K0
Greenplum 实时数据仓库实践(5)——实时数据同步
MySQL如何实时同步数据到ES?试试这款阿里开源的神器!
canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。
用户4172423
2020/11/11
3.5K1
MySQL如何实时同步数据到ES?试试这款阿里开源的神器!
Canal Admin 高可用集群使用教程
Canal 1.1.4 版本引入了 Canal Admin,提供了统一管理 Canal Server 的 WebUI 界面。Canal Admin 的核心概念主要有:
Se7en258
2021/10/09
3.6K0
Canal Admin 高可用集群使用教程
阿里Canal框架(数据同步中间件)初步实践
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。
java架构师
2019/05/15
1.2K0
Otter介绍及(Manager)安装「建议收藏」
名称:otter [‘ɒtə(r)] 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统.。
全栈程序员站长
2022/09/20
1.1K0
MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现
本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现。
数据和云
2019/05/14
1.8K0
Canal数据同步工具
​ Canal就是一个很好的数据库同步工具。canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。
OY
2022/03/18
1.7K0
Canal数据同步工具
去哪儿网数据同步平台技术演进与实践
井显生,2019年加入去哪儿,现负责国内机票出票、退款、改签核心业务。在领域驱动设计(DDD)、高并发有大量实践经验。
数据社
2021/08/27
1.1K0
去哪儿网数据同步平台技术演进与实践
利用 Canal 将 MySQL 数据实时同步至 Kafka 极简教程
笔者使用 Canal 将 MySQL 数据同步至 Kafka 时遇到了不少坑,还好最后终于成功了,这里分享一下极简教程,希望能帮到你。
披头
2023/09/10
2.4K0
利用 Canal 将 MySQL 数据实时同步至 Kafka 极简教程
Canal+Otter - Canal篇(1)
Canal是阿里开源产品之一,是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal主要支持了MySQL的binlog解析。
干货满满张哈希
2021/04/12
1.8K0
Canal+Otter - Canal篇(1)
拉取 binlog,自动数据同步,老板要给涨工资....
1、同步双写:字面意思,同步+双写。比如老库模型重构,数据迁移到新库,迁移过程中,如果有数据变更,既要写到老库,也要写到新库,两边同步更新。
微观技术
2022/02/10
5290
拉取 binlog,自动数据同步,老板要给涨工资....
数据同步工具
公司要搞数据平台,首当其冲的是把旧库的数据导入到新库中,原本各种数据库大部分都提供了导入导出的工具,但是数据存储到各个地方,mongdb,hbase,mysql,oracle等各种各样的不同数据库,同步起来头都大了
全栈程序员站长
2022/09/13
3.1K0
使用canal增量订阅MySQL binlog
【转载请注明出处】:https://cloud.tencent.com/developer/article/1634327
后端老鸟
2020/05/28
3K0
使用canal增量订阅MySQL binlog
推荐阅读
相关推荐
otter安装 原
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档