Otter能解决什么问题?
说明:
a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node)
b. node节点可以有failover / loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)
二、Manager安装配置
下载地址https://github.com/alibaba/otter
2.1环境初始化
推荐使用oneinstack进行环境配置(默认更新gcc,cmake等减少出现的依赖问题)
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,因为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
1. tar -zxvf zookeeper-3.4.5-cdh4.3.0.tar.gz
2. mv zookeeper-3.4.5-cdh4.3.0 zookeeper
3. cd /usr/local/zookeeper/
4. mv conf/zoo_sample.cfg conf/zoo.cfg
5. mkdir -p /usr/local/zookeeper/{data,log}
6. cd /usr/local/zookeeper/data
7. echo 1 > myid #将本节点id设定到data/myid文件中
bin/zkServer.sh start
查看其状态
bin/zkServer.sh status
2.3 安装manager
mkdir /usr/local/manager
tar zxvf manager.deployer-4.2.13.tar.gz -C /usr/local/manager
导入manager的数据库
https://github.com/alibaba/otter/blob/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 将这里面的sql语句执行
mysql -uroot –p
数据库设置(需要同步日志)否则数据不能同步。
还需要给两边的数据库远程控制的权限,
>grant all privileges on *.* to 'root'@'%' identified by 'password';
修改vim conf/otter.properties 配置文件
将所有127.0.0.1改为内网地址
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
检查日志
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配置成功,
启动的顺序是先启动zk,再启动manager,
三.Node的配置
本地与异地都配置,配置都相同
3.1安装配置aria2
,它是一个文件通道来保证需要同步的数据通过极快的速度同步到需要同步的服务器上
1. tar zxvf aria2-1.17.1.tar.gz
2. mv aria2-1.17.1 aria2
3. cd aria2
4. ./configure
5. make
6. make install
7.# 验证安装是否成功
8. aria2c -v
9.会输出
10. aria2 version 1.17.1
11. Copyright (C) 2006, 2013 Tatsuhiro Tsujikawa
3.2安装配置node
1. mkdir /usr/local/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 = 192.168.193.128:1099
异地机房的zookeeper需要配置成observer模式
3.3关联manager、zookeeper、node
进入管理界面使用admind/admin登陆。
点击机器管理,选择zookeeper,
添加zookeeper管理,
再选择机器管理的node
添加node 分配给node的序号,一定要和nid保持一致。
机器名称 : 本地node
机器ip: 192.168.193.128
机器端口 : 2088
下载端口 : 9088
Mbean端口:2090
启用外部IP: 否
zookeeper集群: 本地zookeeper
保存
再添加一次
机器名称 : 异地node
机器ip: 192.168.193.133
机器端口 : 2088
下载端口 : 9088
Mbean端口:2090
启用外部IP: 否
zookeeper集群: 本地zookeeper
这时候启动node
cd /usr/local/node/bin
./startup.sh
刷新页面,就会发现node状态会变成在运行了
四.同步配置
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
配置数据连接,就是数据源
配置管理—>数据源
数据库验证通过就ok.
4.3配置同步数据表
4.4添加canal配置
canal名称: 本地canal
运行模式:嵌入式
zookeeper集群: 本地zookeeper
数据源类型:mysql
数据库地址: 192.168.193.128:3306;
数据库账号: root
数据库密码: 123456
保存
再添加一次
canal名称: 异地canal
运行模式:嵌入式
zookeeper集群: 本地zookeeper
数据源类型:mysql
数据库地址: 192.168.193.133:3306;
数据库账号: root
数据库密码: 123456
保存
添加pipeline
同步管理 -> 本地<>异地 -> 添加
同步管理 -> 本地<>异地 -> 映射关系列表
添加完成之后启用channel,channel的运行状态会变成运行,若不能运行则调整pipeline里面select机器 和load机器选项
此时在本地的测试库里插入数据,在异地的数据库就可查询到。
因为channel只支持一个pipeline运行,想要双向传输数据再添加一个channel作为反向传输,同4.5步骤一样。
在实际生产环境,是需要对数据表做正则匹配(不可能只改一个库一个表),可以将数据表设置如下
除过系统库,其他库做修改都同步,当然其他设置和上面一样。