【多数据中心】分布式数据同步设计方案

介绍

       JD_databus是为满足多数据中心项目的mysql在数据中心间复制的需求所产生的。最开始JD_databus是在LinkedIn的databus的基础上开发的,本次设计考虑到可维护性、代码的简洁、需求的快速迭代,决定重新开发。设计和开发过程中参考了Databus、Canal/Otter的一些好的思路,对于Binlog解析部分则直接使用了她的dbsync模块。

特性

  • 基于MySQL的ROW Binlog进行双向复制,可以实现MySQL的双主、多主模式;
  • 自动负载均衡、故障切换;
  • 基于Binlog日志位置或时间点回滚/重做;
  • 可指定跳过阻塞复制的SQL;
  • 可批量合并SQL、优先并行入库,失败自动降级为串行入库;
  • 复制延迟监控报警;
  • 内置丰富的可视化节点状态、metrics;
  • 和UMP、JONE集成;

架构总述

Pipeline

复制管道由SDBI(源数据库实例)、RS(Relay Server,缩写下同)、RC(Replicator Client,缩写下同)、TDBI(目标数据库实例)这四个组件组成。RS通过mysql的复制协议拉取SDBI的binlog增量变更事件,RC通过自定义RPC协议从RS拉取事件,然后使用JDBC协议写入TDBI。

Group

若干同类pipeline的集合。最主要用于在多数据中心时区分pipeline的方向。方向之所以重要是因为跨数据中心时要优先考虑将RS和SDBI就近部署、RC和TDBI就近部署。

Scheduler

调度器将一个Group范围内的各个pipeline分配到可用的Relay Containers和Replicator Containers。一个Group下只有一个Active的调度器实例。目前默认基于Zookeeper来实现调度器的Active/Standby。

Checkpoint Store

RC拉取并处理完事件后ACK给RS,后者会将本管道SDBI的合适的事件位置(事务头尾、DDL事件前后)写入Checkpoint Store,以便故障重启时自身或其他RS从该位置继续拉取增量事件。目前默认在Zookeeper上存放。

Domain

扫描二维码关注公众号,回复: 4026995 查看本文章

同一业务域的多个group的集合。在Jingobus管理系统中,业务域会关联起JONE中的应用,获取到应用负责人和成员信息。业务域可以有自己独立隔离的Meta Service/Metrics Service/Coordinator/Config Service,也可以使用公共的服务。

Meta Service

元数据服务为RS/RC提供相关Pipeline的元数据信息,比如SDBI、TDBI等连接信息,以及库表的Schema信息(Schema服务第二期未实现,TODO)。

Metrics Service

Metrics Service为各个管道的性能指标提供存储、查询、统计服务。目前采用了Kairosdb(+Cassandra)这个时间序列数据库来实现。

Monitor Service

Monitor Service通过worker定期扫描各个管道的关键性能指标(复制延迟、心跳时间),超过阈值则报警。目前默认使用UMP的自定义报警发送给业务域相关人员,只需要在业务域中配置相应的UMP自定义报警Key即可。

Coordinator

目前通过Zookeeper来实现Group范围内Relay Containers/Replicator Containers的注册、故障切换、负载均衡。

Config Service

为 Relay Containers/Replicator Containers提供统一配置服务。(二期未实现,考虑集成交易的TPConfig,TODO)

Relay Container

最小部署单元(进程)。一个Relay Container为一个Group服务,启动后在Coordinator上注册,被Scheduler分配/取消一个Pipeline后,则内部启动/停止一个RS,并注册/反注册到Coordinator上。

Replicator Container

最小部署单元(进程)。一个Replicator Container为一个Group服务,启动后在Coordinator上注册,被Scheduler分配一个Pipeline后,则内部启动一个RC,从Coordinator上发现相应的RS,并将RC注册到Coordinator上。

Metrics Reporter

Relay Container/Replicator Container通过dropwizard的metrics库采集的各种性能指标,通过Metrcis Reporter定期上报给Metrics Service。目前直接采用Http协议。

Restful Interface

Relay Container/Replicator Container通过内置的http server(使用vertx)暴露Restful API供管理端调用,查看相关pipeline上RS/RC的各种实时状态,或重启、回滚等操作。

RR

在双向复制中,Relay Container和Replicator Container经常成对出现,为简化部署,RR组合了Relay Container和Replicator Container的功能,作为另一种最小部署单元。

猜你喜欢

转载自blog.csdn.net/weixin_42343424/article/details/83589957