Otter 初识----简介和基本架构图
前阵子做的一个安防平台的项目,其中有一个需求,就是满足22个车站的数据库同步,虽然之前也接触过数据库同步,但是只是做过简单的master/slave,对于22个跨机房的数据库同步还真没做过,经过一番的交流讨论之后暂定使用阿里巴巴的开源项目otter,来解决这个问题。
Otter是早先阿里巴巴为了解决杭州和美国异地机房数据库同步而编写的解决方案,现在基本阿里巴巴B2B内部的本地/异地机房同步都用的otter,还是有很高的可靠性的。
otter是基于数据库增量日志解析,准实时同步到本地机房或者异地机房的mysql/oracle数据库分布式同步系统
1:基于canal开源产品,通过canal获取数据库增量日志数据
2:典型管理系统架构,manager+node
node节点中通过S(select)与cannal接入,然后进行ETC(extract/transform/load)数据提取转换和加载,node节点将同步状态反馈到manager上,manager运行时推送同步到node节点。
3:基于zookeeper,解决分布式的调度,允许多个node节点之间协同工作。
Cannal是基于数据库增量日志解析,提供增量数据订阅,消费,目前主要支持mysql。
这里我们首先来说一下mysql自己的master/slave是实现原理:
主要分为三步:
1:master将改变记录到二进制日志(binarylog)中
2:slave将master的binary logevents 拷贝到自己的中继日志(relay log)
3: slave重做relay log 中的事件,将改变反应到自己的数据库中
1:canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
2:mysql master收到dump请求,开始推送binary log给slave(也就是canal)
3:canal解析binary log对象(原始为byte流)