菜鸟笔记
提升您的技术认知

mysql跨机房同步方案-ag真人游戏

随着用户量的不断累积,mysql从单实例单节点发展到多实例多节点的主备,再到一个机房几十台myql实例,但是现在,一个机房也开始慢慢无法承受庞大的数据吞吐,多机房的理念开始构建。

        假设现有两个机房,需要做到数据同步。

        以下是架构图(实际架构图根据现有机房架构和实际会比下图复杂,但整体思路不变):

        mycat、canal、otter是关键的三项技术:

        mycat:数据库分库分表中间件,可以管理一个mysql集群,屏蔽了mysql集群,对外伪装成mysql server,用户无感知mysql集群。

        canal:阿里巴巴开源产品,可以读取mysql二进制日志文件,并解析成想要的数据。

        otter:阿里巴巴开源产品,配合canal可以做到读取二进制文件,解析出增量数据sql,然后执行sql到指定连接。

        流程:

            1、用户插入一条数据到mycat

            2、mycat解析sql,分配sql到指定mysql数据库

            3、mysql(假设m1接收到数据)数据库接收数据,根据主从配置,写出二进制日志。

            4、mysql(m2)读取二进制日志同步数据,mysql(s)读取二进制日志同步数据,并写出二进制日志

            5、canal读取二进制日志,解析成sql

            6、otter接到sql,获取连接,在机房b的mycat上执行sql

            7、otter收到sql执行回执,执行完毕。

原理相对比较简单:

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)

 

网站地图