https://github.com/alibaba/otterjava
名称:otter ['ɒtə(r)]node
译意: 水獭,数据搬运工mysql
语言: 纯java开发git
定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统github
https://github.com/alibaba/canalweb
名称:canal [kə'næl]算法
译意: 水道/管道/沟渠sql
语言: 纯java开发数据库
定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql服务器
关键词: mysql binlog parser / real-time / queue&topic
工做原理
原理描述:
1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击
2. 典型管理系统架构,manager(web管理)+node(工做节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
3. 基于zookeeper,解决分布式状态调度的,容许多node节点之间协同工做.
canal 支持mysql系列的5.1 ~ 5.6版本,目前maridb经测试暂不支持. (全面支持ROW/STATEMENT/MIXED几种binlog格式的解析)
mysql作为master,otter只支持ROW模式的数据同步,其余两种模式不支持. (只有ROW模式可保证数据的最终一致性)
otter的环境须要mysql ,jdk, zookeeper , node , manager
软件名称 | 版本 | 安装服务器 | 端口 | 安装目录 |
---|---|---|---|---|
zookeeper | 3.4.5 | 172.17.210.100 | 2181 | /usr/local/yunsea/zookeeper-3.4.5/ |
manager | 4.2.10 | 172.17.210.98 | 18888 | /usr/local/belle/otter/manager |
node | 4.2.10 | 172.17.210.98\172.17.210.99 | /usr/local/belle/otter/node |
otter manager依赖于mysql进行配置信息的存储,因此须要预先安装mysql,并初始化otter manager所需的系统库和表。
source otter-manager-schema.sql
执行show databases能够看到脚本建立了一个名字叫otter的数据库
安装一个zookeeper到172.17.210.100机子(整个otter架构依赖了zookeeper进行多节点调度,因此须要预先安装zookeeper),也可使用其它已经安装好的zookeeper,能够共用,这里不作安装说明。
建立安装目录 /usr/local/belle/otter/manager
tar -zxvf manager.deployer-4.2.10.tar.gz /usr/local/belle/otter/manager
修改mamager的配置文件信息(/conf/otter.properties)
otter.domainName = 172.17.210.98
otter.port = 18888
## otter manager 所依赖的数据库配置 ,修改成正确数据库信息
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://172.17.210.98:3306/otter
otter.database.driver.username = root #用户名和密码请DBA配合受权
otter.database.driver.password = 123456
## otter communication port(manager和node通信端口,保留默认1099)
otter.communication.manager.port = 1099
## otter communication pool size
otter.communication.pool.size = 10
## manager依赖的zookeeper 地址
otter.zookeeper.cluster.default = 172.17.210.100:2181
## default zookeeper sesstion timeout = 90s
otter.zookeeper.sessionTimeout = 90000
## otter arbitrate connect manager config
otter.manager.address = ${otter.domainName}:${otter.communication.manager.port}
准备启动
进入安装目录/bin/下,输入:sh startup.sh启动manager web网站
生成nid
完成manager安装后,须要在manager页面为node定义配置信息,并生一个惟一id.
从”node管理”菜单中选择添加node按钮,往manager注册一个node节点信息。
几点说明:
3.node启动步骤
建立安装目录 /usr/local/belle/otter/node
解压到安装目录 tar -xzvf node.deployer-4.2.10.tar -C /usr/local/belle/otter/node
修改配置
nid配置 (将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件,好比我添加的机器对应序号为1)
echo 1 > conf/nid otter.properties配置修改
打开文件/conf/otter.properties
vi /conf/otter.properties,修改以下内容:
##修改成正确的manager服务地址
otter.manager.address = 172.17.210.98:1099
启动
进入目录 /usr/local/belle/otter/node/bin/
sh startup.sh
按照此方法安装NODE2
数据同步分2种,一、A库和B库同时上线 二、A库已经存在好久,B库才须要同步。第一种状况比较简单,第二种须要把A库须要同步的表导出数据导入到B库,而且记录A库同步位置点。
show master status \G;
一、数据准备
在172.17.210.98\172.17.210.99数据库中分别建立一个测试表
CREATE TABLE `otter_sync` (
`id` varchar(32) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`desc` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、建立canal
三、 建立数据源(添加表映射用到)
四、添加源库的表和目的库的表
五、新建同步通道channel
同步一致性选择基于当前日志变动,同步模式选择“行记录模式”,不开启数据一致性。
六、新建一个pipeline
七、 新建表映射
安装配置参与官网
https://github.com/alibaba/otter/wiki/Manager_Quickstart
https://github.com/alibaba/otter/wiki/Node_Quickstart
Otter高可用性
https://github.com/alibaba/otter/wiki/Otter%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7
FAQ