otter 的介绍
1, 国内某电商B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。
otter第一版本可追溯到04~05年,此次外部开源的版本为第4版,开发时间从2011年7月份一直持续到现在,目前某电商B2B内部的本地/异地机房的同步需求基本全上了otte4。
目前同步规模:
同步数据量6亿
文件同步1.5TB(2000w张图片)
涉及200+个数据库实例之间的同步
80+台机器的集群规模
项目介绍
名称:otter ['ɒtə®]
译意: 水獭,数据搬运工
语言: 纯java开发
定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统
2,如图
3,(1)工作原理图
(2)原理描述:
1). 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击
2). 典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
3). 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
什么是canal?
otter之前开源的一个子项目,开源链接地址:http://github.com/alibaba/canal
部署安装
1,1)解释
Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成
Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成
DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等
DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义
DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia
ColumnPair : 定义字段映射关系
ColumnGroup : 定义字段映射组
Node : 处理同步过程的工作节点,对应一个jvm
2)安装jdk8自行安装,不详说,需要的联系
3)zk自行安装
4)安装manager
mkdir /home/app/manager
cd /home/app/optar
tar zxvf manager.deployer-4.2.13.tar.gz -C /home/work/manager
5)安装数据库
wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
mysql -uroot -p
#输入mysql密码
source /home/app/manager/otter-manager-schema.sql
6)
##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
7)启动manager
./bin/startup.sh
8)启动成功
2.1 安装配置aria2
我们在介绍otter的特性里面有提及到aria2,它是一个文件通道来保证需要同步的数据通过极快的速度同步到需要同步的服务器上
cd /home/app/
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 © 2006, 2013 Tatsuhiro Tsujikawa
2.2 安装配置node
接下来我们来配置node,node主要负责接受manage下发任务的处理
mkdir /home/app/node
tar xf node.deployer-4.2.13.tar.gz
cd /home/app/node/
#nid配置node的ID多个node协同工作时不能重复
echo 1 > conf/nid
#修改配置文件
vim conf/otter.properties
#主要是确认连接manager地址是否正确(这里使用服务器内网地址进行配置)
otter.manager.address = 自己的ip
配置完成之后我们不要着急启动node,因为启动了node要是manager没有配置是没法建立连接的,顺序是先配置好manager在开启node.
2.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/app/node/bin/
./startup.sh
注意:如果发现启动不了可以查看node的日志
等带一段时间后刷新会发现状态已经变为了启动,这个时候就已经成功了:
并且这个时候我们在zookeeper页面点击查看选项可以看到zookeeper已经在运行了:
使用总结
1, 配置manager
1)包括管道
2, 配置同步节点
3,配置同步数据表
4,同步的表生产到测试的,异地的
5,1)其实还有好多,单向的,双向的,隔离环境的,等等,还需要多多总结;
2)基于表改变的,还有时间的,回查的
好难受,希望会好