单向 mysql:Otter跨机房数据同步

重要说明:需要同步的表必须要有主键 主键 主键
otter是一款基于JAVA且免费、开源基于数据库增量日志解析,准实时同步到本机房或异地机房的MySQL/oracle数据库的解决方案 。

单向 mysql:Otter跨机房数据同步

文章插图
 
Otter目前支持了什么
1. 单向同步,mysql/oracle互相同步
2. 双向同步,无冲突变更
3. 文件同步,本地/aranda文件
4. 双A同步,冲突检测&冲突补救
5. 数据迁移,中间表/行记录同步
实际测试中,otter的同步速度相比于mysql的复制,约有5倍左右的性能提升,这取决于其同步算法的实现. 抛弃了强一致性,得到了性能提升 。
原理描述
基于Canal开源产品,获取数据库增量日志数据 。
典型管理系统架构,manager(web管理)+node(工作节点)
manager运行时推送同步配置到node节点
node节点将同步状态反馈到manager上
基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
单向 mysql:Otter跨机房数据同步

文章插图
 
工作流程:otter基于zookeeper解决分布式状态调度,由manager(web管理)和node(工作节点)组成 。manager运行时推送同步配置到node节点上,node节点将同步状态反馈到manger上 。
单向 mysql:Otter跨机房数据同步

文章插图
【单向 mysql:Otter跨机房数据同步】 
环境
Ip
操作系统
Mysql
Manager节点
Node节点
192.168.140.24
CenteOS 7.5.1804
Mysql5.7.26


192.168.140.136
CenteOS 7.5.1804
Mysql5.7.26


目标:
实现192.168.140.136到192.168.140.24的单向数据同步 。
名词解释
Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成
Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成
DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等
DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义
DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia
ColumnPair : 定义字段映射关系
ColumnGroup : 定义字段映射组
Node : 处理同步过程的工作节点,对应一个jvm
otter搭建
环境准备
[root@db192168140024 ~]# yum install java-1.8.0-openjdk-devel.x86_64
[root@db192168140024 ~]# yum install nc
[root@db192168140024software]#wget https://mirrors.tuna.tsinghua.edu.cn/Apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
[root@db192168140024 software]# tar -zxvf zookeeper-3.4.14.tar.gz
[root@db192168140024 software]# mv zookeeper-3.4.14 /usr/local/zookeeper
[root@db192168140024 software]# cd /usr/local/zookeeper/conf
[root@db192168140024 conf]# cp zoo_sample.cfg zoo.cfg
[root@db192168140024 conf]# cd ../bin
[root@db192168140024 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@db192168140024 bin]# yum install *aria2*
aria2 是一款开源、轻量级的多协议命令行下载工具,支持 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink 协议,拥有众多第三方支持插件,被誉为「下一代下载工具」和「下载神器」
otter的安装包以及脚本:
从https://github.com/alibaba/otter/releases下载,例如:
单向 mysql:Otter跨机房数据同步

文章插图
 
192.168.140.24
下载并分别解压到/usr/local/otter_node,/usr/local/otter_manager目录,如下:
单向 mysql:Otter跨机房数据同步

文章插图
 
192.168.140.136
下载node节点node.deployer-4.2.14.tar.gz 并解压到/usr/local/otter_node
单向 mysql:Otter跨机房数据同步

文章插图
 
192.168.140.24
因为otter的配置信息存储在mysql中,所有还有一个初始化脚本:
https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
网上和otter文档均提及需要先安装manager,我仔细看了下,是因为manager是被动连接的(很多应用的管理控制台是主动去连接服务的,otter则把所有的配置都存储在了manager中),node启动的时候会连接到manager获取同步相关的信息 。生成nid这一步倒没什么关系,事后不一致修改也可以 。
manager配置


推荐阅读