Otter入门简介
一、Otter简介
1.1 otter是什么?
otter
译意: 水獭,数据搬运工
语言: 纯java开发
定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。Ottter是由阿里开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,也有全量同步的,如果我们有全表更新或者想要历史数据的需求怎么办?这就涉及到otter的ziyou门功能。
1.2 otter工作原理
原理描述:
1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击
2. 典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
4.db : 数据源以及需要同步到的库
1.3 otter的特性
- 使用纯JAVA开发,占时资源比较高
- 基于Canal获取数据库增量日志,Canal是阿里爸爸另外一个开源产品
- 使用manager(web管理)+node(工作节点),manager负责配置监控,node负责处理任务
- 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作
- 使用aria2多线程传输技术,对网络依赖带宽依赖较低
1.4 otter能解决什么问题
1、异构库同步
Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle
2、单机房同步
可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能
3、异地机房同步
异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾
4、双向同步
双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性
5、文件同步
站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片
二、Manager安装配置
2.1 环境初始化
官方地址:https://github.com/alibaba/otter
我们把下载好的文件存放到/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
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就已经配置好了
三、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.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的限制等等。路漫漫兮其修远......
Otter入门简介的更多相关文章
- 掌握 Ajax,第 1 部分: Ajax 入门简介
转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...
- MongoDB入门简介
MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- NodeJS入门简介
NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...
- ASP.NET Core学习之一 入门简介
一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...
- webservice入门简介
为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 webservice入门简介 1.什么是webservice? webservice是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓的远 ...
- Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
- Nginx入门简介
Nginx入门简介 Nginx 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二 ...
随机推荐
- linux shell脚本: 自动监控网站状态并发送提醒邮件
1.创建监控脚本:$ vi /alidata/shell/webcheck.sh #!/bin/sh weblist="/alidata/shell/weblist.txt" my ...
- Java语言实现简单FTP软件------>源码放送(十三)
Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...
- make编译一
在C和C++中,首先要把源文件编译成中间代码文件,在windows下就是obj文件,linux下就是.o文件:object file.这个动作叫做编译,然后再把大量的object file合成执行文件 ...
- 跨域与ie浏览器的相关问题
文章出处url:https://segmentfault.com/a/1190000002647143 产生跨域问题的原因 跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性. 跨域 ...
- SQL性能优化常用语句(摘录网上)
1.把trace文件导入到表中 , ) AS RowNumber,* into TableName FROM fn_trace_gettable('trace.trc', default) 2.查询C ...
- SpringBoot学习笔记(4):添加自定义的过滤器
SpringBoot:学习笔记(4)——添加自定义的过滤器 引入自定义过滤器 SpringBoot提供的前端控制器无法满足我们产品的需求时,我们需要添加自定义的过滤器. SpringBoot添加过滤器 ...
- AbstractQueuedSynchronizer(一)
应该将子类定义为非公共内部帮助器类,一般并发包类用内部类Sync sync来继承并实现.为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量.事件,等等)提供一个框架.此类的设计目 ...
- 每天一个Linux命令(24)tar命令
tar命令可以为linux的文件和目录创建档案. (1)用法: 用法: tar [选项] [文件参数] (2)功能: 功能: 用来压缩和解压文件.tar本身不 ...
- pt-table-checksum检验主从数据不一致
测试环境:主从架构,操作系统liunx 运行pt-table-checksum需要先安装以下依赖包: yum install perl-IO-Socket-SSL perl-DBD-MySQL per ...
- vary的用法
对于vary的用法,网上有许多种说法,云里雾里的,在此仅阐述一下本人的一些理解,首先是官方解释: Vary头域值指定了一些请求头域,这些请求头域用来决定: 当缓存中存在一个响应,并且该缓存没有过期失效 ...