免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5191 | 回复: 21
打印 上一主题 下一主题

【讨论中】如何真正的实现master-slave读写分离 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-25 05:36 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2012-10-25 16:15 编辑

大家好

目前我的数据库在跑一个大型的更新,这使得平时够用的数据库变的非常忙,网页打开的非常慢

现在这个数据库有一个 slave,是做日常备份的,这个 slave 是只读的

我考虑将网站指向到 slave 数据库,master 数据库只用来应付更新的

但是问题来了

网站有读写还有更新的操作,如果都指向到 slave,那么任何一个写和更新都会让 slave 从 master 更新失败

所以这里想请教下大家,怎么做到 master-slave 的读写分离?

就是插入和更新、删除,都去 master, select 去 slave?

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
2 [报告]
发表于 2012-10-25 09:49 |只看该作者
@songday
你们跑大型更新是何目录,如果大型更新只是后台用,并且和前台数据没冲突,可以考虑把大型更新放到slave做。
如果要读写分离,你说的问题完全不存在,只要让所有的读访问slave,写访问master就行了。读写分离很多方法,自己google下。但是你不能解决大型更新的问题,到时候slave一样会出现现在的问题。

所以核心问题还是如何处理大型更新。

论坛徽章:
0
3 [报告]
发表于 2012-10-25 09:50 |只看该作者
要注意,任何在master里的写操作,最终都会跑到slave上去的

论坛徽章:
0
4 [报告]
发表于 2012-10-25 10:15 |只看该作者
chinafenghao 发表于 2012-10-25 09:49
@songday
你们跑大型更新是何目录,如果大型更新只是后台用,并且和前台数据没冲突,可以考虑把大型更新放 ...


后台更新就是修改显示在前台的一样错误数据哈

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
5 [报告]
发表于 2012-10-25 10:37 |只看该作者
@songday
嗯、总会有办法的。
比如增加前台缓存,将数据库拆分,十分繁忙的系统单独划分出来,增加硬盘,调整IO等等
前提的了解你们系统,知道大量更新的瓶颈在哪里,一般来说每秒几百个更新还是可以抗的住的。

论坛徽章:
0
6 [报告]
发表于 2012-10-25 10:51 |只看该作者
回复 4# songday


    如果这只是临时工作的话,考虑 read 同时访问 master 和 slave(如果两者性能差不多的话),读操作只针对slave的话,slave也会承受不了的,原因我上面说过。如果还是承受不了的话,建议再临时增加一个slave.

如果不能修改代码,可以用mysql proxy。

论坛徽章:
0
7 [报告]
发表于 2012-10-25 10:55 |只看该作者
chinafenghao 发表于 2012-10-25 10:37
@songday
嗯、总会有办法的。
比如增加前台缓存,将数据库拆分,十分繁忙的系统单独划分出来,增加硬盘, ...


目前更新的这个表十分庞大,有几千万条记录
数据库拆分我现在想的是,按半年或3个月来分,不过这个给搜索带来了些困难

现在的瓶颈在 talbe lock 上,这个表是MyISAM的

论坛徽章:
0
8 [报告]
发表于 2012-10-25 10:57 |只看该作者
chylli 发表于 2012-10-25 10:51
回复 4# songday



我也考虑再增加一个slave,不过设置slave的话,要和master同步,在同步的时候,master不能进数据和更新数据
这个是不能接受的

之前我是通过直接拷贝数据库目录来实现同步,不过 innoDb有问题,现在是通过 mysqlDump 来同步
可能是数据没有拷贝完整?

论坛徽章:
0
9 [报告]
发表于 2012-10-25 10:59 |只看该作者
songday 发表于 2012-10-25 10:57
我也考虑再增加一个slave,不过设置slave的话,要和master同步,在同步的时候,master不能进数据和更 ...

啥意思? 同步时master不能进数据?
直接从现在的slave copy一份数据出来,然后同步不就行了?

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
10 [报告]
发表于 2012-10-25 11:01 |只看该作者
@songday
那直接换innodb撒。毫无压力
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP