Otter实现数据库同步

Otter工作原理
在这里插入图片描述
原理描述:

  1. 基于Canal开源产品,获取数据库增量日志数据。
  2. 典型管理系统架构,manager(web管理)+node(工作节点)
    a. manager运行时推送同步配置到node节点
    b. node节点将同步状态反馈到manager上
  3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
    4.db : 数据源以及需要同步到的库

Otter能解决什么问题?

  1. 1、异构库同步
    Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle
    2、单机房同步
    可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能
    3、异地机房同步
    异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾
    4、双向同步
    双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性
    5、文件同步
    站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片
    在这里插入图片描述
    说明:
    a. 数据on-Fly,尽可能不落地,更快的进行数据同步. (开启node loadBalancer算法,如果Node节点S+ETL落在不同的Node上,数据会有个网络传输过程)
    b. node节点可以有failover / loadBalancer.

在这里插入图片描述
说明:
a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node)
b. node节点可以有failover / loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)
二、Manager安装配置
下载地址https://github.com/alibaba/otter
2.1环境初始化

推荐使用oneinstack进行环境配置(默认更新gcc,cmake等减少出现的依赖问题)
1.	wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
2.	tar xzf oneinstack-full.tar.gz
3.	cd oneinstack
4.	./install.sh

2.2安装配置JDK

首先应该安装jdk,因为zookeeper和Otter-manager都依赖java环境。
1.	tar -zxvf jdk-7u79-linux-x64.tar.gz
2.	mv jdk1.7/ /usr/local/

设定JAVA_HOME环境变量,编辑vim /etc/profile 加入如下内容

1.	export JAVA_HOME=/usr/local/jdk1.7
2.	export JRE_HOME=/usr/local/jdk1.7/jre
3.	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:
4.	export PATH=$JAVA_HOME/bin:$PATH
  1. 更改后,执行命令使其生效
  2. source /etc/profile
  3. 执行 java -version 会看到如下版本信息证明已经安装成功
    2.3安装zookeeeper
1.	tar -zxvf zookeeper-3.4.5-cdh4.3.0.tar.gz
2.	mv zookeeper-3.4.5-cdh4.3.0 zookeeper
3.	cd /usr/local/zookeeper/
4.	mv conf/zoo_sample.cfg conf/zoo.cfg
5.	mkdir -p  /usr/local/zookeeper/{data,log}
6.	cd /usr/local/zookeeper/data
7.	echo 1 > myid #将本节点id设定到data/myid文件中

修改zoo.cfg
在这里插入图片描述
启动zk

bin/zkServer.sh start

查看其状态

bin/zkServer.sh status

2.3 安装manager

mkdir /usr/local/manager
tar zxvf manager.deployer-4.2.13.tar.gz -C /usr/local/manager

导入manager的数据库
https://github.com/alibaba/otter/blob/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 将这里面的sql语句执行
mysql -uroot –p
数据库设置(需要同步日志)否则数据不能同步。
还需要给两边的数据库远程控制的权限,

>grant all privileges on *.* to 'root'@'%' identified by 'password';

在这里插入图片描述
修改vim conf/otter.properties 配置文件
将所有127.0.0.1改为内网地址

1.	## otter manager domain name #修改为正确访问ip(内网访问配置内网地址外网访问配置外网地址),生成URL使用
2.	otter.domainName = 127.0.0.1
3.	## otter manager http port
4.	otter.port = 8080
5.	 
6.	## otter manager database config ,修改为正确数据库信息
7.	otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter
8.	otter.database.driver.username = root
9.	otter.database.driver.password = hello #密码改为数据库密码
10.	 
11.	## default zookeeper address,修改为正确的地址,手动选择一个地域就近的zookeeper集群列表,zookeeper默认端口 2181
12.	otter.zookeeper.cluster.default = 127.0.0.1:2181

启动manager

./bin/startup.sh

检查日志

tailf logs/manager.log

如下输出则为启动成功:

1.	2017-11-04 11:08:20.527 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## start the manager server.
2.	2017-11-04 11:08:45.420 [] INFO com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty Embed Server is startup!
3.	2017-11-04 11:08:45.420 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the manager server is running now ......

现在访问我们地址的8080端口,要关掉8080的防火墙,否则访问不通。
在这里插入图片描述
出现如上界面,则表示manager配置成功,
启动的顺序是先启动zk,再启动manager,
三.Node的配置
本地与异地都配置,配置都相同
3.1安装配置aria2
,它是一个文件通道来保证需要同步的数据通过极快的速度同步到需要同步的服务器上

1.	tar zxvf aria2-1.17.1.tar.gz
2.	mv aria2-1.17.1 aria2
3.	cd aria2
4.	./configure
5.	make
6.	make install
7.# 验证安装是否成功
8.	aria2c -v
9.会输出
10.	aria2 version 1.17.1
11.	Copyright (C) 2006, 2013 Tatsuhiro Tsujikawa

3.2安装配置node

1.	mkdir /usr/local/node
2.	tar xf node.deployer-4.2.13.tar.gz
3.	cd /home/work/node/
4.	# nid配置node的ID多个node协同工作时不能重复
5.	echo 1 > conf/nid
6.	# 修改配置文件
7.	vim conf/otter.properties
8.	# 主要是确认连接manager地址是否正确(这里使用服务器内网地址进行配置)
9.	otter.manager.address = 192.168.193.128:1099

异地机房的zookeeper需要配置成observer模式
在这里插入图片描述
3.3关联manager、zookeeper、node
进入管理界面使用admind/admin登陆。
点击机器管理,选择zookeeper,

在这里插入图片描述
添加zookeeper管理,
在这里插入图片描述
再选择机器管理的node
添加node 分配给node的序号,一定要和nid保持一致。

机器名称 : 本地node
机器ip:      192.168.193.128
机器端口 :   2088
下载端口 : 9088
Mbean端口:2090
启用外部IP:  否
zookeeper集群: 本地zookeeper
保存
再添加一次
机器名称 : 异地node
机器ip:      192.168.193.133
机器端口 :   2088
下载端口 : 9088
Mbean端口:2090
启用外部IP:  否
zookeeper集群: 本地zookeeper

这时候启动node

cd /usr/local/node/bin
./startup.sh

刷新页面,就会发现node状态会变成在运行了
四.同步配置
4.1建一个测试库(两边都建)

1.	create database dqd_test;
2.	 
3.	CREATE TABLE `dqd_test` (
4.	`id` int(11) NOT NULL AUTO_INCREMENT,
5.	`name` varchar(255) NOT NULL,
6.	`age` int(10) NOT NULL,
7.	PRIMARY KEY (`id`)
8.	) ENGINE=InnoDB DEFAULT CHARSET=utf8

4.2配置manager
配置数据连接,就是数据源
配置管理—>数据源
在这里插入图片描述
在这里插入图片描述
数据库验证通过就ok.
4.3配置同步数据表
在这里插入图片描述
在这里插入图片描述

4.4添加canal配置

canal名称: 本地canal
运行模式:嵌入式
zookeeper集群: 本地zookeeper
数据源类型:mysql
数据库地址: 192.168.193.128:3306;
数据库账号:  root
数据库密码:  123456
保存
再添加一次
canal名称: 异地canal
运行模式:嵌入式
zookeeper集群: 本地zookeeper
数据源类型:mysql
数据库地址: 192.168.193.133:3306;
数据库账号:  root
数据库密码:  123456
保存

4.5 配置同步规则
同步管理—>添加
在这里插入图片描述

添加pipeline
同步管理 -> 本地<>异地 -> 添加
在这里插入图片描述
同步管理 -> 本地<>异地 -> 映射关系列表
在这里插入图片描述
添加完成之后启用channel,channel的运行状态会变成运行,若不能运行则调整pipeline里面select机器 和load机器选项
此时在本地的测试库里插入数据,在异地的数据库就可查询到。
因为channel只支持一个pipeline运行,想要双向传输数据再添加一个channel作为反向传输,同4.5步骤一样。
在实际生产环境,是需要对数据表做正则匹配(不可能只改一个库一个表),可以将数据表设置如下
在这里插入图片描述
除过系统库,其他库做修改都同步,当然其他设置和上面一样。

发布了61 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wq962464/article/details/103026624