楼主: arron刘

【每周一议】MySQL同步时如何使用复制来提供冗余/高可用性?

[复制链接]
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
11#
发表于 2012-10-25 17:20 | 只看该作者
hanaka 发表于 2012-10-24 10:53
沙发

•可以处理拥有上千万条记录的大型数据库。

有局限性,要看业务情况来,该坼分表的还是需要坼分表的。

使用道具 举报

回复
论坛徽章:
4
奥运会纪念徽章:游泳
日期:2012-07-28 15:39:12ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
12#
发表于 2012-10-25 17:30 | 只看该作者
很少用mysql,纯支持下!

使用道具 举报

回复
论坛徽章:
14
2012新春纪念徽章
日期:2012-01-04 11:58:44 2014年世界杯参赛球队: 德国
日期:2014-05-30 12:58:23优秀写手
日期:2013-12-18 09:29:11凯迪拉克
日期:2013-11-19 14:35:20路虎
日期:2013-11-18 16:25:37灰彻蛋
日期:2013-05-31 08:48:322013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2012-11-13 11:23:38蜘蛛蛋
日期:2012-11-02 16:35:05奥运会纪念徽章:排球
日期:2012-07-10 09:51:40
13#
发表于 2012-10-26 09:37 | 只看该作者
mchdba 发表于 2012-10-25 16:54
对mysql主从同步的延时,需要做实时监控报警,一旦延时超过设定的阀值,就短信报警或者email报警,甚至可 ...

恩,延时的时候,我这里也做了实时监控报警。我赞同这种做法

但我不赞同,slave延时后,master强制阻塞更新。

使用道具 举报

回复
招聘 : Javascript开发
论坛徽章:
4
奥运纪念徽章
日期:2012-11-15 10:00:34奥运纪念徽章
日期:2012-11-28 09:37:30ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:11蓝色妖姬
日期:2015-01-05 16:02:09
14#
发表于 2012-10-26 11:07 | 只看该作者
本帖最后由 xfzhi888 于 2012-10-26 11:26 编辑

1.怎样强制主服务器阻塞更新直到从服务器同步?

看到很多朋友在说为何强制阻塞,在此就不讨论为何要强制阻塞更新了。
仅说说版主的问题,怎么强制主服务器阻塞更新。
操作如下:
1).主服务器执行以下语句
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
记录SHOW语句的输出的日志名和偏移量
2).从服务器执行以下语句
mysql> SELECT MASTER_POS_WAIT('log_name', log_offset);
SELECT语句阻塞直到从服务器达到指定的日志文件和偏移量。此时,从服务器与主服务器同步,语句返回
3).在主服务器上,执行下面的语句允许主服务器重新开始处理更新
mysql> UNLOCK TABLES;


2.MySQL复制能够何时和多大程度提高系统性能?

MySQL的复制不仅限于支持故障恢复,它还可用于读操作的横向扩展(scaleout),它可以实现大量服务器的高效复制。对于那些读频繁的应用,在商用硬件上支持大量查询是一个低成本的有效策略。
MySQL复制还有其他有用的应用。在线DDL是关系型数据库管理系统中非常复杂的一个特性。MySQL不支持在线DDL,但通过使用复制,往往可以足够好地部分实现它。

3.如何使用复制来提供冗余/高可用性?

复制是将主数据库的DML操作通过日志传到从服务器上,使得从服务器实现了对主服务器的远程备份,并且可以通过应用使得在主服务器繁忙的时候分担一部分负载。mysql支持同时向多台从服务器进行复制,从而提供冗余。缺点:不能保证主从同步,只能实现异步复制。目前Mysq形成很多套实现高可用方案,并且均都已在生产环境中应用,主要为这几种:mysql + replication 、mysql + heartbeat + 存储、mysql + drbd + heartbeat 、 mysql cluster。
客户可以从以上方案中综合费用和数据安全、时效性进行综合考虑选择。


另外大家可以看看这本美国人写的《高可用MySQL:构建健壮的数据中心 》(已被国内翻译)可以更深入的去理解mysql 的复制应用,以及如何构建高可用性和高性能的mysql数据库。

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
15#
发表于 2012-10-26 16:02 | 只看该作者
zhangshengdong 发表于 2012-10-26 09:37
恩,延时的时候,我这里也做了实时监控报警。我赞同这种做法

但我不赞同,slave延时后,master强制阻塞 ...

master强制阻塞,这个我都不知道怎么去实现呢?不是太懂!
期待楼主下,为什么会提出这个观点呢?对实际应用有何好处?

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
16#
发表于 2012-10-26 16:05 | 只看该作者
xfzhi888 发表于 2012-10-26 11:07
1.怎样强制主服务器阻塞更新直到从服务器同步?

看到很多朋友在说为何强制阻塞,在此就不讨论为何要强制 ...

你的办法属于暴力破解啊!

1.怎样强制主服务器阻塞更新直到从服务器同步?
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
记录SHOW语句的输出的日志名和偏移量
2).从服务器执行以下语句
mysql> SELECT MASTER_POS_WAIT('log_name', log_offset);
SELECT语句阻塞直到从服务器达到指定的日志文件和偏移量。此时,从服务器与主服务器同步,语句返回
3).在主服务器上,执行下面的语句允许主服务器重新开始处理更新
mysql> UNLOCK TABLES;



这个read lock在7*24小时的电商来说,主库涉及订单的库,根本不可能让你这么操作。而外围的一般性业务数据,基本不会发生延时问题。

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
17#
发表于 2012-10-26 16:06 | 只看该作者
xfzhi888 发表于 2012-10-26 11:07
1.怎样强制主服务器阻塞更新直到从服务器同步?

看到很多朋友在说为何强制阻塞,在此就不讨论为何要强制 ...

xfzhi888


初级会员,


精华贴数0专家积分0技术积分38社区积分2注册时间2007-7-3论坛徽章:
技术积分才38,兄弟你潜水够深啊0

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
12
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44奥运会纪念徽章:赛艇
日期:2012-09-12 12:01:20奥运会纪念徽章:帆船
日期:2012-07-20 12:29:10ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26ITPUB元老
日期:2011-08-19 11:28:39ITPUB8周年纪念徽章
日期:2009-09-27 10:21:22生肖徽章2007版:猪
日期:2009-09-18 11:22:31生肖徽章2007版:猴
日期:2009-09-10 11:28:59授权会员
日期:2009-08-25 12:39:002009日食纪念
日期:2009-07-22 09:30:00
18#
发表于 2012-10-26 16:26 | 只看该作者
1.怎样强制主服务器阻塞更新直到从服务器同步?
这个xfzhi888兄弟在上面介绍的很详细,主要思路就是在MASTER上进行事务锁定,等slave的bin log pos和Master一致
当然方法会暴力,既然是强制,我们就理解为需要人工干预

MySQL 5.5 还提供了一种半同步复制的新功能,半同步的意思表示MASTER 只需要接收到其中一台SLAVE的返回信息,就会commit。

2.MySQL复制能够何时和多大程度提高系统性能?
MySQL复制衍生出很多架构(scale  out),比如M-M,或者1主多从,多住多从等等。都可以用来做负载均衡
1、二主多从(一主用来做线上系统写DB,第二台主用来搭配HA做7*24,从机可以用来只读)
2、二主M-M,对写入频繁的数据库做拆分(从业务上划分模块,模块A写入M1,模块2写入M2)
......

3.如何使用复制来提供冗余/高可用性?

复制在线上最大的应用就是提供冗余以及高可用性,配置灵活简单

使用道具 举报

回复
招聘 : Javascript开发
论坛徽章:
4
奥运纪念徽章
日期:2012-11-15 10:00:34奥运纪念徽章
日期:2012-11-28 09:37:30ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:11蓝色妖姬
日期:2015-01-05 16:02:09
19#
发表于 2012-10-26 16:35 | 只看该作者
本帖最后由 xfzhi888 于 2012-10-26 16:42 编辑
mchdba 发表于 2012-10-26 16:06
xfzhi888

呵呵,强制主服务器阻塞更新直到从服务器同步既然是强制,只能人工干预了,暴力一点能实现就好。可能在特定的场景下会运用到。

使用道具 举报

回复
论坛徽章:
6
蛋疼蛋
日期:2012-01-07 12:14:30ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24雪铁龙
日期:2013-11-25 14:03:13美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
20#
发表于 2012-10-26 19:03 | 只看该作者
本帖最后由 rushm 于 2012-10-26 19:03 编辑

1、这种强制阻塞会产生一写问题吧,比如连接池用得不好的情况下,容易导致processlist里边很多insert等待,然后Threads_created不断暴涨,最终导致too many connection.
强制阻塞能缓解一时之痛,达到slave同步,长期看来还得从不能同步问题入手,比如现在最新版本不是有支持多线程同步么?(我还没试用)
2、MySQL复制能够何时和多大程度提高系统性能?
复制对于当前以读为主的互联网站作用还是比较明显,分担了读压力。对高并发的读,多台slave,可以提供更多的buffer pool来缓存索引,加快查询速度;从机器总体性能上,还能分担资源压力,因为每个Threads_created,系统也有分配相应的内存、cpu等资源给它。
实现高性能方案也很多,除了楼上说的M-S,M-M等等。
如果公司内部开发强大,可以通过现成的replication架构,开发相应的模块来实现数据量巨大(数据量亿级别以上)情况下分库分表,数据插入按照某种规则分散插入各库各表中,达到分担数据量,提高插入和查询效率目的;对于复杂的join查询,还可以专门弄一台机器来做OLAP。
3、如何使用复制来提供冗余/高可用性?
复制可将数据同步到多台机器上,可达到机某台机器宕机实现冷热切换,很多高可用方案楼上也提了。。灵活多样

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表