search 2013 adfgs
作者:Sky.Jian | 可以任意转载, 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明
链接:http://isky000.com/database/one-slave-many-master | del.icio.us | Twitter it

时常遇到一些希望从多个 MySQL 实例将数据复制到单个MySQL 实例上的需求场景,又苦于原生的 MySQL 并不支持这样的实现方案,开源社区中也没有哪位大拿提供解决这方面需求的插件。 有时候就想,要不公司里面组织力量修改一下 MySQL 代码来搞定这个问题得了。可转念一想,后面如果需要升级版本的时候怎么办呢?再修改一次代码?这样的成本有多大呢?如此的问题让人很是纠结。 最近突然想明白了:为啥非要在现在代码中来实现这个需求呢?为啥不能通过在外部想办法呢?我们需要的不是看上去的美,而是最终的结果。看上去漂亮完美的架构方案并不一定就是最好的。 如是就有了下面这样的想法:

  • 通过在 Master 和 Slave 之间增加一层复制代理服务
  • 多个线程连接上多个 Master 上请求 Binlog(完全模拟 Slave 上的IO线程)
  • 多个线程连接上单个 Slave 实例,直接以类似于应用程序的方式并行应用 Binlog中的Event(部分模拟Slave 上的SQL线程)
  • 由于很清楚业务场景,在应用线程方面可以在一些特定规则约束下实现并行应用以改善 Slave 端延时

由于 MySQL 开源的特性,实现上述功能其实很简单,还可以保持原生 MySQL 不会被动任何手术即可完成我们的需求,看来是该动手的时候了。

BTW: 我的需求中,各个 Master 中的数据是不会有任何重叠的。

已经有6个回复

  1. asword Says @ 11-01-5 11:25 pm

    如果实时性要求不高的话,个人觉得也可以采取类似数据仓库同步数据的方法,用dhw同步数据到某一台指定的mysql吧?这样就可以使用现成的工具了

  2. P.Linux Says @ 11-01-6 10:00 pm

    @asword
    DHW做法对数据库有入侵,会带来很大的读IO,请求binlog的方式直接获取日志,都是连续IO,tps很小。导入时DHW需要使用SQL,binlog导入的方式不需要解析SQL,binlog基于ROW方式无须解析SQL。

  3. 朝阳 Says @ 11-01-11 1:29 pm

    @asword
    我们还是希望能尽可能保留原生的MySQL,不希望动他,呵呵

  4. Suntanic Says @ 11-01-13 4:47 pm

    不错的构建

  5. windows7下载 Says @ 11-02-9 4:52 pm

    不错的想法!

Trackbacks & Pingbacks

看完了要说点啥么?