Otter入门简介

前言:最近接了一个新的需求,须要在伦敦机房作一个数据同步方案,同步到北京。由于以前搭建过公网之间的同步,一是延迟比较大,另外一个是由于同步常常会断。临时解决方案就是搭建一个多源复制,隔断时间全量一次数据到北京机房,可是这个传输时间也是个头疼的问题java

 

1、Otter简介

1.1  otter是什么?

Ottter是由阿里开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到如今,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。node

Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)mysql

1.2  otter工做原理

  • db : 数据源以及须要同步到的库
  • Canal : 用户获取数据库增量日志
  • manager : 配置同步规则设置数据源同步源等
  • zookeeper : 协调node进行协调工做
  • node : 负责任务处理处理接受到的部分同步工做

1.3  otter的特性

  • 使用纯JAVA开发,占时资源比较高
  • 基于Canal获取数据库增量日志,Canal是阿里爸爸另一个开源产品
  • 使用manager(web管理)+node(工做节点),manager负责配置监控,node负责处理任务
  • 基于zookeeper,解决分布式状态调度的,容许多node节点之间协同工做
  • 使用aria2多线程传输技术,对网络依赖带宽依赖较低

1.4  otter能解决什么问题

一、异构库同步linux

Otter支持从Mysql同步到Mysql/oracle,咱们能够把mysql同步到oraclegit

二、单机房同步github

能够做为一主多从同步方案,对于单机房内网来讲效率很是高,还能够作为数据库版本升级,数据表迁移,二级索引等这类功能web

三、异地机房同步算法

异地机房同步能够说是Otter最大的亮点之一,能够解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景能够作到数据多机房容灾sql

四、双向同步数据库

双向同步是在数据同步中最难搞的一种场景,Otter能够很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性

五、文件同步

站点镜像,进行数据复制的同时,复制关联的图片,好比复制产品数据,同时复制产品图片

 

2、Manager安装配置

2.1  环境初始化

咱们把下载好的文件存放到/home/work/optar目录下:

[root@localhost optar]# ls
aria2-1.17.1.tar.gz         jdk-7u79-linux-x64.tar.gz       mysql-5.7.18.tar.gz
dbproxy.tar.gz              jdk-8u65-linux-x64.tar.gz       node.deployer-4.2.13.tar.gz
go1.8.1.linux-amd64.tar.gz  manager.deployer-4.2.13.tar.gz  zookeeper-3.4.6.tar.gz

荐使用OneinStack进行环境配置(默认会更新GCC,cmake等减小依赖出现的问题)

oneinstack官网地址

wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
tar xzf oneinstack-full.tar.gz
cd oneinstack
./install.sh

2.2  安装配置JDK

JDK配置也能够经过上方oneinstack中选择web服务tomcat来配置

首先咱们应该要安装配置JDK,应为zookeeper和Otter-manager都依赖与java环境

tar -zxvf jdk-7u79-linux-x64.tar.gz
mv jdk1.7/ /usr/local/

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

export JAVA_HOME=/usr/local/jdk1.7
export JRE_HOME=/usr/local/jdk1.7/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:
export PATH=$JAVA_HOME/bin:$PATH

更改后,执行命令使其生效

source /etc/profile

执行 java -version 会看到以下版本信息证实已经安装成功

[root@localhost local]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

2.3  安装zookeeper

安装配置zookeeper单机模式 

cd /home/work
tar zxvf zookeeper-3.4.5-cdh4.3.0.tar.gz
mv zookeeper-3.4.5-cdh4.3.0 zookeeper
cd /home/work/zookeeper/
mv conf/zoo_sample.cfg conf/zoo.cfg
mkdir -p /home/work/data/zookeeper/{data,log}
cd /home/work/data/zookeeper/data
echo 1 > myid #将本节点id设定到data/myid文件中

修改bin/zkEnv.sh脚本:

将ZOO_LOG_DIR="."修改成

ZOO_LOG_DIR="/home/work/data/zookeeper/log"

将ZOO_LOG4J_PROP=”INFO,CONSOLE”修改成

ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

修改bin/zkServer.sh脚本:

将ZOOBIN="${BASH_SOURCE-$0}"修改成

ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

修改bin/zkCli.sh脚本:

将ZOOBIN="${BASH_SOURCE-$0}"修改成

ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

创建软链接到PATH:

ln -s /home/work/zookeeper/bin/zkServer.sh /usr/local/bin/zk-server
ln -s /home/work/zookeeper/bin/zkCli.sh /usr/local/bin/zk-cli

使用以下命令便可启动zookeeper:

zk-server start
#如下输出为运行成功
JMX enabled by default
Using config: /tmp/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.4  安装manager

准备工做作好了咱们来一同安装manager

mkdir /home/work/manager
cd /home/work/optar
tar zxvf manager.deployer-4.2.13.tar.gz  -C /home/work/manager

安装manager的数据库

wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 
mysql -uroot -p
#输入mysql密码
source /home/work/manager/otter-manager-schema.sql

修改vim conf/otter.properties 配置文件

## otter manager domain name #修改成正确访问ip(内网访问配置内网地址外网访问配置外网地址),生成URL使用
otter.domainName = 127.0.0.1    
## otter manager http port
otter.port = 8080

## otter manager database config ,修改成正确数据库信息
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter
otter.database.driver.username = root
otter.database.driver.password = hello

## default zookeeper address,修改成正确的地址,手动选择一个地域就近的zookeeper集群列表,zookeeper默认端口 2181
otter.zookeeper.cluster.default = 127.0.0.1:2181

启动manager

./bin/startup.sh

PS:manager 编译时间大约须要1分钟

检查日志:

tailf logs/manager.log

以下输出则为启动成功:

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

咱们在访问咱们设置的能够访问的地址的8080端口,注意要关掉8080的防火墙不然一直会访问不通

看到以下显示咱们的manager就已经配置好了

 

3、Node的安装配置

3.1  安装配置aria2

咱们在介绍otter的特性里面有说起到aria2,它是一个文件通道来保证须要同步的数据经过极快的速度同步到须要同步的服务器上

cd /home/work/
tar zxvf aria2-1.17.1.tar.gz
mv aria2-1.17.1 aria2
cd aria2
./configure
make
make install
# 验证安装是否成功
aria2c -v
# 会输出
aria2 version 1.17.1	
Copyright (C) 2006, 2013 Tatsuhiro Tsujikawa

3.2  安装配置node

接下来咱们来配置node,node主要负责接受manage下发任务的处理

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

配置完成以后咱们不要着急启动node,由于启动了node要是manager没有配置是无法创建链接的,顺序是先配置好manager在开启node.

3.3  关联manager,zookeeper和node

最后咱们来吧manager,zookeeper和node关联起来,咱们先进入manager的管理界面,点击右边的登录:

使用默认用户名密码admin:admin登录进去:

找到机器管理的zookeeper配置点击进去:

选择添加一个zookeeper:

填好本身本地的zookeeper地址和端口保存:

在选择机器管理的node管理点击进去:

选择添加一个node:

配置好node的一些参数

  • 机器名称:能够随意定义,方便本身记忆便可
  • 机器ip:对应node节点将要部署的机器ip,若是有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通信的入口,实际状况千万别使用127.0.0.1,不然多个机器的node节点会没法识别)
  • 机器端口:对应node节点将要部署时启动的数据通信端口,建议值:2088
  • 下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090
  • 外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,容许通信的时候走公网处理。
  • zookeeper集群:为提高通信效率,不一样机房的机器可选择就近的zookeeper集群.

node这种设计,是为解决单机部署多实例而设计的,容许单机多node指定不一样的端口:

这个时候就能够启动咱们的node了:

cd /home/work/node/bin/
./startup.sh

注意:若是发现启动不了能够查看node的日志

等带一段时间后刷新会发现状态已经变为了启动,这个时候就已经成功了:

而且这个时候咱们在zookeeper页面点击查看选项能够看到zookeeper已经在运行了:

注意:若是发现一直都是未启动状态能够查阅/tmp/node/logs中的日志


4、单向同步配置实践

4.1  准备工做

建一个测试库

别注意:库名中千万不要带有符号好比"-"这种符号会直接引发同步开启不成功(须要验证)

create database dqd_test;

CREATE TABLE `dqd_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

4.2  配置manager

首先咱们须要配置数据链接,也就是数据源

添加完以后必定要验证一下

一样的操做添加另一个数据源

4.3  配置同步数据表

配置好数据源后进行须要同步的数据表的配置

4.4  配置同步规则

在同步管理里面添加一个channel

添加配置好一个channel使用的master库

4.5  开启同步

 

 

至此,简单的一个单向同步方案完。可是还有不少问题没有解决:好比otter的监控,数据一致性校验,otter同步比mysql跨公网同步的优点(在网络中断时,otter和原生的跨公网同步有什么区别),otter的限制等等。路漫漫兮其修远......

参考博客:https://my.oschina.net/wenzhenxi/blog?catalog=3663174&temp=1509356134467

为了方便你们交流,本人开通了微信公众号(关注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一块儿来交流吧

相关文章
相关标签/搜索