前言:最近接了一个新的需求,须要在伦敦机房作一个数据同步方案,同步到北京。由于以前搭建过公网之间的同步,一是延迟比较大,另外一个是由于同步常常会断。临时解决方案就是搭建一个多源复制,隔断时间全量一次数据到北京机房,可是这个传输时间也是个头疼的问题java
Ottter是由阿里开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到如今,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。node
Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)mysql
一、异构库同步linux
Otter支持从Mysql同步到Mysql/oracle,咱们能够把mysql同步到oraclegit
二、单机房同步github
能够做为一主多从同步方案,对于单机房内网来讲效率很是高,还能够作为数据库版本升级,数据表迁移,二级索引等这类功能web
三、异地机房同步算法
异地机房同步能够说是Otter最大的亮点之一,能够解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景能够作到数据多机房容灾sql
四、双向同步数据库
双向同步是在数据同步中最难搞的一种场景,Otter能够很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性
五、文件同步
站点镜像,进行数据复制的同时,复制关联的图片,好比复制产品数据,同时复制产品图片
咱们把下载好的文件存放到/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等减小依赖出现的问题)
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz tar xzf oneinstack-full.tar.gz cd oneinstack ./install.sh
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)
安装配置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
准备工做作好了咱们来一同安装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就已经配置好了
咱们在介绍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
接下来咱们来配置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.
最后咱们来吧manager,zookeeper和node关联起来,咱们先进入manager的管理界面,点击右边的登录:
使用默认用户名密码admin:admin登录进去:
找到机器管理的zookeeper配置点击进去:
选择添加一个zookeeper:
填好本身本地的zookeeper地址和端口保存:
在选择机器管理的node管理点击进去:
选择添加一个node:
配置好node的一些参数
node这种设计,是为解决单机部署多实例而设计的,容许单机多node指定不一样的端口:
这个时候就能够启动咱们的node了:
cd /home/work/node/bin/ ./startup.sh
注意:若是发现启动不了能够查看node的日志
等带一段时间后刷新会发现状态已经变为了启动,这个时候就已经成功了:
而且这个时候咱们在zookeeper页面点击查看选项能够看到zookeeper已经在运行了:
注意:若是发现一直都是未启动状态能够查阅/tmp/node/logs中的日志
建一个测试库
别注意:库名中千万不要带有符号好比"-"这种符号会直接引发同步开启不成功(须要验证)
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
首先咱们须要配置数据链接,也就是数据源
添加完以后必定要验证一下
一样的操做添加另一个数据源
配置好数据源后进行须要同步的数据表的配置
在同步管理里面添加一个channel
添加配置好一个channel使用的master库
至此,简单的一个单向同步方案完。可是还有不少问题没有解决:好比otter的监控,数据一致性校验,otter同步比mysql跨公网同步的优点(在网络中断时,otter和原生的跨公网同步有什么区别),otter的限制等等。路漫漫兮其修远......
参考博客:https://my.oschina.net/wenzhenxi/blog?catalog=3663174&temp=1509356134467
为了方便你们交流,本人开通了微信公众号(关注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一块儿来交流吧