单个MySQL Instance 接多个 Master 的一点想法
作者:sky | 分类: 大话技术 | 标签: | 日期:2011-01-20
时常遇到一些希望从多个 MySQL 实例将数据复制到单个MySQL 实例上的需求场景,又苦于原生的 MySQL 并不支持这样的实现方案,开源社区中也没有哪位大拿提供解决这方面需求的插件。 有时候就想,要不公司里面组织力量修改一下 MySQL 代码来搞定这个问题得了。可转念一想,后面如果需要升级版本的时候怎么办呢?再修改一次代码?这样的成本有多大呢?如此的问题让人很是纠结。 最近突然想明白了:为啥非要在现在代码中来实现这个需求呢?为啥不能通过在外部想办法呢?我们需要的不是看上去的美,而是最终的结果。看上去漂亮完美的架构方案并不一定就是最好的。 如是就有了下面这样的想法:
- 通过在 Master 和 Slave 之间增加一层复制代理服务
- 多个线程连接上多个 Master 上请求 Binlog(完全模拟 Slave 上的IO线程)
- 多个线程连接上单个 Slave 实例,直接以类似于应用程序的方式并行应用 Binlog中的Event(部分模拟Slave 上的SQL线程)
- 由于很清楚业务场景,在应用线程方面可以在一些特定规则约束下实现并行应用以改善 Slave 端延时
由于 MySQL 开源的特性,实现上述功能其实很简单,还可以保持原生 MySQL 不会被动任何手术即可完成我们的需求,看来是该动手的时候了。
BTW: 我的需求中,各个 Master 中的数据是不会有任何重叠的。
有8人发表了评论 ↓发表评论↓



b( ̄▽ ̄)d
期待中
杨华杰 @ January 24, 2011 |
(─.─||)为什么要用多个master呢?大概是因为写的操作太多了,单入应付不了了.那么你多主,slave一样要写数据啊,所以你就把多个master的压力一起压到了单个slave上面了,不是吗?
cookur @ January 26, 2011 |
回楼上:
或许master不能有超时,但slave慢一点没关系
hiying @ April 2, 2011 |
博主您好,请问如何保证多个主操作的时序性,即使是在slave上建一个队列,如何保证网络情况带来的操作序列被打乱,同时造成了一定的操作覆盖情况? 希望博主指教
bernie @ April 19, 2011 |
RepSync: 解决MySQL的多个主库到备库的并发复制方案
xiyu @ May 19, 2011 |
思路不错。不过与直接patch到MySQL内部相比有两个问题:
1、增加模块一个维护成本;
2、放弃了原来的主从方式,属于重复造轮子过程。而且自己实现的功能,恐怕要实现现有主从同步的一些管理功能,复杂性也不低。
PS:已经实现并应用了吗?
dingqi @ June 12, 2011 |
这个方法却是很好
丰胸产品 @ October 25, 2011 |
同意,修改源代码的确会限制版本的升级
之前在开发一个使用mongodb做数据库的项目,mongodb不支持trigger造成了很大困扰,当时也想过修改mongodb的源代码,也是考虑升级的问题没有使用这种方案,最后使用AOP在DAO层加了动态代理实现了trigger
wangyuxuan @ February 12, 2012 |