一、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目录下:

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

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

oneinstack官网地址

  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配置也可以通过上方oneinstack中选择web服务tomcat来配置

首先我们应该要安装配置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

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

source /etc/profile

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

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

2.3  安装zookeeper

安装配置zookeeper单机模式

  1. cd /home/work
  2. tar zxvf zookeeper-3.4.5-cdh4.3.0.tar.gz
  3. mv zookeeper-3.4.5-cdh4.3.0 zookeeper
  4. cd /home/work/zookeeper/
  5. mv conf/zoo_sample.cfg conf/zoo.cfg
  6. mkdir -p /home/work/data/zookeeper/{data,log}
  7. cd /home/work/data/zookeeper/data
  8. 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:

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

使用如下命令即可启动zookeeper:

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

2.4  安装manager

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

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

安装manager的数据库

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

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

  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

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

检查日志:

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就已经配置好了

三、Node的安装配置

3.1  安装配置aria2

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

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

3.2  安装配置node

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

  1. mkdir /home/work/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 = 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了:

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

注意:如果发现启动不了可以查看node的日志

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

并且这个时候我们在zookeeper页面点击查看选项可以看到zookeeper已经在运行了:

注意:如果发现一直都是未启动状态可以查阅/tmp/node/logs中的日志

四、单向同步配置实践

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

首先我们需要配置数据连接,也就是数据源

添加完之后一定要验证一下

同样的操作添加另外一个数据源

4.3  配置同步数据表

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

4.4  配置同步规则

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

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

4.5  开启同步

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

Otter入门简介的更多相关文章

  1. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  2. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  3. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  4. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  5. ASP.NET Core学习之一 入门简介

    一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...

  6. webservice入门简介

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 webservice入门简介 1.什么是webservice? webservice是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓的远 ...

  7. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  8. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

  9. Nginx入门简介

    Nginx入门简介 Nginx 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二 ...

随机推荐

  1. 【网络与系统安全】关于SSL/TSL协议的分析

    前言 TSL协议的前身是由网景(Netscape)公司于1994年研发的安全套接字(Secure Socket Layer)协议.它建立在TCP协议栈的传输层,用于保护面向连接的TCP通信.实际TSL ...

  2. Blobstore Java API overview

    Blobstore API允许你的应用程序使用(serve)叫做Blobs的数据对象.这种数据对象比Datastore服务所允许的对象的尺寸大得多.Blobs能有效地为大文件比如视频.图片提供服务,允 ...

  3. js常用方法(。。。。不完整)

    lastIndexOf();substring();split();slice();splice(); var s="http://www.baidu.com"; var unit ...

  4. keep-alive使用笔记

    vue2.0提供了keep-alive组件,用来缓存组件,避免多次加载,减少性能消耗. 1.将整个网页缓存起来 <router-view class="view" keep- ...

  5. poj 3006 Dirichlet's Theorem on Arithmetic Progressions【素数问题】

    题目地址:http://poj.org/problem?id=3006 刷了好多水题,来找回状态...... Dirichlet's Theorem on Arithmetic Progression ...

  6. Spring Cloud之Swagger2 API接口管理

    随着微服务架构体系的发展和应用, 为了前后端能够更好的集成与对接,同时为了项目的方便交付,每个项目都需要提供相应的API文档. 来源:PC端.微信端.H5端.移动端(安卓和IOS端) 传统的API文档 ...

  7. linux常见命令2

    systemctl set-hostname HOSTNAME  在centos7上设置主机名,永久有效 curl -O -L http://www.gnu.org/software/gettext/ ...

  8. Hadoop 2.x简介

    Hadoop 2.0产生背景 Hadoop1.0中HDFS和MapReduce在高可用.扩展性等方面存在问题 HDFS存在的问题 NameNode单点故障,难以应用于在线场景 NameNode压力过大 ...

  9. JS命令模式个人理解

    JS命令模式个人理解 //BODY部分<body> <button id="execute">打开电视</button> <button ...

  10. java:Map借口及其子类HashMap四

    java:Map借口及其子类HashMap四 使用非系统对象作为key,使用匿名对象获取数据 在Map中可以使用匿名对象找到一个key对应的value. person: public class Ha ...