阿里otter系统部署手册.docx
《阿里otter系统部署手册.docx》由会员分享,可在线阅读,更多相关《阿里otter系统部署手册.docx(19页珍藏版)》请在冰豆网上搜索。
阿里otter系统部署手册
阿里otter应用
系统部署手册
版本号
日期
作者
备注
0.1
2016-4-29
fashchina
初始
一、产品说明
名称:
otter['ɒtə(r)]
译意:
水獭,数据搬运工
语言:
纯java开发
定位:
基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库.一个分布式数据库同步系统。
二、工作原理
一、原理描述:
1.基于Canal开源产品,获取数据库增量日志数据。
什么是Canal,请点击
2.典型管理系统架构,manager(web管理)+node(工作节点)
a.manager运行时推送同步配置到node节点
b.node节点将同步状态反馈到manager上
3.基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
二、什么是canal?
otter之前开源的一个子项目,开源链接地址:
三、otter能解决什么?
1.异构库同步
a.mysql->mysql/oracle.(目前开源版本只支持mysql增量,目标库可以是mysql或者oracle,取决于canal的功能)
2.单机房同步(数据库之间RTT<1ms)
a.数据库版本升级
b.数据表迁移
c.异步二级索引
3.异地机房同步(比如阿里巴巴国际站就是杭州和美国机房的数据库同步,RTT>200ms,亮点)
a.机房容灾
4.双向同步
a.避免回环算法(通用的解决方案,支持大部分关系型数据库)
b.数据一致性算法(保证双A机房模式下,数据保证最终一致性,亮点)
5.文件同步
a.站点镜像(进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片).
四、初步性能指标
1.单机房同步
a.100tps,延迟100ms
b.5000tps,延迟1s
2.中美异地机房同步
a.100tps,延迟2s
b.5000tps,延迟10s
ps.性能指标取决于目标数据库性能,数据大小等多个因素,单机房100b大小,极限tps可以1w+
五、名词解释
Pipeline:
从源端到目标端的整个过程描述,主要由一些同步映射过程组成。
Channel:
同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成。
DataMediaPair:
根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等。
DataMedia:
抽象的数据介质概念,可以理解为数据表/mq队列定义。
DataMediaSource:
抽象的数据介质源信息,补充描述DateMedia。
ColumnPair:
定义字段映射关系。
ColumnGroup:
定义字段映射组。
Node:
处理同步过程的工作节点,对应一个jvm。
六、otter的S/E/T/Lstage阶段模型
说明:
为了更好的支持系统的扩展性和灵活性,将整个同步流程抽象为Select/Extract/Transform/Load,这么4个阶段.
Select阶段:
为解决数据来源的差异性,比如接入canal获取增量数据,也可以接入其他系统获取其他数据等。
Extract/Transform/Load阶段:
类似于数据仓库的ETL模型,具体可为数据join,数据转化,数据Load的
七、环境准备
1.操作系统
a.otter为纯java编写,windows/linux均可支持
b.jdk建议使用1.6.25以上的版本,稳定可靠,目前阿里巴巴使用基本为此版本
2.整个otter同步由manager、node部分组成,需要预先进行安装,
3.otternode依赖于zookeeper进行分布式调度,需要安装一个zookeeper节点或者集群.在manager启动完成后,需要首先定义不同机房的zookeeper机器集群。
(一)网络要求
千兆网络
八、环境安装
(一)MANAGER的安装
a)环境准备
1.ottermanager依赖于mysql进行配置信息的存储,所以需要预先安装mysql,并初始化ottermanager的系统表结构
a.安装mysql,这里略过。
b.初始化ottermanager系统表
找到安装脚本otter-manager-schema.sql,然后登入MYSQL后执行下面语句:
sourceotter-manager-schema.sql
2.整个otter架构依赖了zookeeper进行多节点调度,所以需要预先安装zookeeper,不需要初始化节点,otter程序启动后会自检.
a.manager需要在otter.properties中指定一个就近的zookeeper集群机器
b)环境安装
网上下载或者自己下源码打包都可以,如果是网上下载,直接从官网下载,如果自己编译,通过GIT进行checkout,具体命令如下:
gitclone:
alibaba/otter.git
cdotter;
mvncleaninstall-Dmaven.test.skip-Denv=release
执行上面命令后会生成软件包名字为manager.deployer-x.y.z.tar.gz,进行解压
mkdir/usr/local/manager
tarzxvfmanager.deployer-$version.tar.gz-C/usr/local/manager
进行/usr/local/manager/conf目录,对otter.properties文件进行修改
##ottermanagerdomainname#修改为正确访问ip,生成URL使用
otter.domainName=127.0.0.1
##ottermanagerhttpport
otter.port=8080
##jettywebconfigxml
otter.jetty=jetty.xml
##ottermanagerdatabaseconfig,修改为正确数据库信息
otter.database.driver.class.name=com.mysql.jdbc.Driver
otter.database.driver.url=jdbc:
mysql:
//127.0.01:
3306/ottermanager
otter.database.driver.username=root
otter.database.driver.password=hello
##ottercommunicationport
munication.manager.port=1099
##ottercommunicationpoolsize
munication.pool.size=10
##defaultzookeeperaddress,修改为正确的地址,手动选择一个地域就近的zookeeper集群列表
otter.zookeeper.cluster.default=127.0.0.1:
2181
##defaultzookeepersesstiontimeout=90s
otter.zookeeper.sessionTimeout=90000
##otterarbitrateconnectmanagerconfig
otter.manager.address=${otter.domainName}:
${munication.manager.port}
PS:
注意上面标红的地方,这些地方都是需要调整的。
启动和关闭
/usr/local/manager/bin/startup.sh启动
/usr/local/manager/bin/stop.sh关闭
通过看日志信息获得是否正常
cd/usr/local/manager
tail–flogs/manager.log
如果启动日志中包含下面语句则说明manager配置成功。
2013-08-1413:
19:
45.911[]WARNcom.alibaba.otter.manager.deployer.JettyEmbedServer-##JettyEmbedServerisstartup!
2013-08-1413:
19:
45.911[]WARNcom.alibaba.otter.manager.deployer.OtterManagerLauncher-##themanagerserverisrunningnow......
验证
访问:
,出现otter的页面,即代表启动成功
访问:
,初始密码为:
admin/admin,即可完成登录.目前:
匿名用户只有只读查看的权限,登录为管理员才可以有操作权限
PS:
上述127.0.0.1和8080是在otter.properties中配置。
(二)NODE节点安装
a)环境准备
1.otternode会受ottermanager进行管理,所以需要预先安装ottermanager。
2.完成manager安装后,需要在manager页面为node定义配置信息,并生一个唯一id.
a.首先访问manager页面(通过admin/admin登录)的机器管理页面,点击添加机器按钮
上面配置说明如下:
机器名称:
可以随意定义,方便自己记忆即可
机器ip:
对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露.(此ip是整个集群通讯的入口,实际情况千万别使用127.0.0.1,否则多个机器的node节点会无法识别)
机器端口:
对应node节点将要部署时启动的数据通讯端口,建议值:
2088
下载端口:
对应node节点将要部署时启动的数据下载端口,建议值:
9090
外部ip:
对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。
zookeeper集群:
为提升通讯效率,不同机房的机器可选择就近的zookeeper集群.
node这种设计,是为解决单机部署多实例而设计的,允许单机多node指定不同的端口。
b.机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid
通过这两部操作,获取到了node节点对应的唯一标示,称之为nodeid,简称:
nid.记录该nid,后续启动nid时会使用
3.node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端。
b)环境安装
1、安装aria2
软件包列表
安装顺序如下:
rpm–ivhnettle-2.2-1.el6.rf.x86_64.rpm
rpm–ivhnettle-devel-2.2-1.el6.rf.x86_64.rpm
rpm–ivharia2-1.16.4-1.el6.rf.x86_64.rpm
2、安装node
网上下载或者自己下源码打包都可以,如果是网上下载,直接从官网下载,如果自己编译,通过GIT进行checkout,具体命令如下:
gitclone:
alibaba/otter.git
cdotter;
mvncleaninstall-Dmaven.test.skip-Denv=release
执行上面命令后会生成软件包名字为node.deployer-x.y.z.tar.gz,进行解压。
mkdir/usr/local/node
tarzxvfmanager.deployer-$version.tar.gz-C/usr/local/node
配置修改
a.nid配置(将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件,比如我添加的机器对应序号为1)
echo1>conf/nid
b.进行/usr/local/node/conf目录,对otter.properties文件进行修改
#otternoderootdir
#上述为/usr/local/node路径
otter.nodeHome=${user.dir}/../node
##otternodedir
otter.htdocs.dir=${otter.nodeHome}/htdocs
otter.download.dir=${otter.nodeHome}/download
otter.extend.dir=${otter.nodeHome}/extend
##defaultzookeepersesstiontimeout=90s
otter.zookeeper.sessionTimeout=90000
##ottercommunicationpoolsize
munication.pool.size=10
##otterarbitrate&nodeconnectmanagerconfig,
#ottermanager的otter.properties中的
#munication.manager.port值
otter.manager.address=127.0.0.1:
1099
启动和关闭
/usr/local/node/bin/startup.sh启动
/usr/local/node/bin/stop.sh关闭
查看日志
cd/usr/local/node
tail–flog/node/node.log
如果manager页面的ip配置不正确,会出现类似错误
Exceptioninthread"main"java.lang.IllegalArgumentException:
node[1]ip[127.0.0.1]port[2088],butyourhostip[10.12.48.215]isnotmatched!
atcom.alibaba.otter.node.etl.OtterController.checkNidVaild(OtterController.java:
245)
atcom.alibaba.otter.node.etl.OtterController.initNid(OtterController.java:
230)
atcom.alibaba.otter.node.etl.OtterController.start(OtterController.java:
73)
atcom.alibaba.otter.node.deployer.OtterLauncher.main(OtterLauncher.java:
25)
时修改ip为对应的hostip后,再次启动即可。
日志出现下述文字则表明配置启动准确。
2013-08-1415:
42:
16.886[main]INFOcom.alibaba.otter.node.deployer.OtterLauncher-INFO##theotterserverisrunningnow......
验证
在manager控制管理页的节点管理,如果显示已启动,则表明manager和node通讯正常。
(三)MYSQL以及JDK的安装配置
MYSQL和JDK的安装本文不做介绍,请参考其他相关指南完成安装和配置,另外otter只支持5.6及以下版本的Mysql,不支持maridb,请务必注意。
在mysql安装完成后,修改mysql的配置文件f文件,主要是打开bin-log以及调整bin-log-format方式,具体如下:
vi/etc/f
log-bin=mysql-bin
#binaryloggingformat-mixedrecommended
#binlog_format=mixed
binlog_format=ROW#修改成ROW
server-id=1#确保serverid设置为不一样的值
ps:
注意上面红色标注的配置。
加入cannel用户权限
用管理员用户登录mysql
#暂且定mysql的管理员用户名和密码为root/123456
mysql–uroot–p123456
登录成功后,以此在mysql终端输入下面SQL
CREATEUSERcanalIDENTIFIEDBY'canal';
GRANTSELECT,REPLICATIONSLAVE,REPLICATIONCLIENTON*.*TO'canal'@'%';
FLUSHPRIVILEGES;
showgrantsfor'canal';
(四)Zookeeper的安装和配置
otter使用zookeeper作为集群管理,zookeeper可以用单机运行模式,但是强烈建议使用集权模式在增强zookeeper的可用性,由于安装配置简单,具体安装配置请参考其他资料进行,此次不再进行阐述。
九、MANAGER的配置管理
(一)添加Node
在manager的界面,添加Node,如下图:
机器管理—》Node管理
如图,点击添加按钮,添加内容参考下图:
添加完成后,根据添加后的node序号,如下图中,192.168.85.10中对应的序号是1,那么进入10机器下的node目录,执行echo1>conf/nid,然后启动node。
(二)添加Zookeeper
机器管理-》Zookeeper管理
如图,点击添加按钮,添加内容参考下图:
(三)数据源配置
配置管理-》数据源配置,点击添加按钮
数据源配置填写需要同步的两个数据库信息
添加内容如下图所示,添加完成后,点击验证连接数据源
(四)数据表配置
配置管理-》数据表配置,点击添加按钮。
数据表配置需要同步的表的信息
添加数据库的名称,数据表的名称和数据源名称,并点击验证连接表
如果需要同步整个数据库,那么数据库表以“.*”代替。
(五)canal配置
配置管理-》canal配置,点击添加按钮
canal需要添加两个,每一个对应一个数据库信息,从配置的数据库中,拉取bin-log信息。
(六)同步管理
1)添加channel
点击添加按钮
2)channel下需要配置pipeline,点击channel的名字,可以添加pipeline
3)添加完成pipeline后,点击pipeline的名字,添加映射关系,映射关系配置同步的原表和目标表。
4)配置完成后,启动channel.
十、附录:
双写配置
由于目前是单写模式,如果双写,则需要在执行下面步骤
1)点击使用文档-》数据库初始化页面。
在双机房的数据库(需要同步数据的数据库,而非manager自己的数据库)同时执行初始化SQL。