查看: 17473|回复: 62

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

[复制链接]
认证徽章
论坛徽章:
24
技术图书徽章
日期:2013-08-16 14:31:52问答徽章
日期:2013-11-04 08:53:14目光如炬
日期:2013-12-23 06:00:11目光如炬
日期:2013-12-30 06:00:11明星写手
日期:2014-02-22 06:00:12马上有钱
日期:2014-03-31 14:09:05沸羊羊
日期:2015-05-20 12:42:59秀才
日期:2015-06-24 13:05:36秀才
日期:2015-07-13 09:48:14
发表于 2012-10-24 09:52 | 显示全部楼层 |阅读模式
说起MySQL大家都不陌生,它是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL的特性
•使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
•支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
•为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
•支持多线程,充分利用CPU资源,支持多用户。
•优化的SQL查询算法,有效地提高查询速度。
•既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
•提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
•提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
•提供用于管理、检查、优化数据库操作的管理工具。
•可以处理拥有上千万条记录的大型数据库。

今天我们讨论的话题就是几个MySQL同步时常见的问题:

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

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

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

讨论时间:2012.10.24-2012.11.11

讨论奖励:抽取五位回帖积极,内容丰富的会员赠送《MySQL技术内幕:InnoDB存储引擎》一本。
4afbfbedab64034f90a2fa92afc379310a551d32.jpg

获奖名单:buptdream    rushm   zeromyth     xfzhi888    jief  


论坛徽章:
11
ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:372014年新春福章
日期:2014-02-18 16:41:11技术图书徽章
日期:2013-11-19 14:48:37ITPUB社区12周年站庆徽章
日期:2013-10-08 17:44:422013年新春福章
日期:2013-04-08 17:42:482013年新春福章
日期:2013-02-25 14:51:24奥运纪念徽章
日期:2012-11-28 09:37:30奥运纪念徽章
日期:2012-11-27 15:37:34奥运纪念徽章
日期:2012-11-27 09:46:24奥运会纪念徽章:篮球
日期:2012-10-12 15:12:02
发表于 2012-10-25 09:30 | 显示全部楼层
话题范围较宽,我讨论一点。

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

要实现MySQL的高可用性,可以使用MySQL复制、MySQL集群之类的解决方案。对于MySQL复制来说,MySQL本身支持单向、异步复制。MySQL复制以一台服务器为主机,其它一个或多个MySQL服务器为从机。这一点恰恰与MySQL集群相反,因为MySQL集群是同步复制。

MySQL的异步数据复制意味着数据从一个机器拷贝到另一个机器时,存在一定的延迟。通常,这种延迟是由网络带宽、可用资源,以及管理员预先设定的时间间隔所决定。但是,只要对MySQL进行了正确配置和调整,复制在很多应用中可以认为是即时的。同步复制意味着数据可以在同一时刻向一台或是多台机器提交,通常叫做“双步提交”。

标准的MySQL复制,MySQL主服务器将更新写到二进制日志文件并且维护一个索引文件以保存日志的更新轨迹。二进制日志里保存的更新记录将会被发送到从机。当MySQL从机连接至主机,从机会从日志里读取从最后一次成功更新的位置。然后会执行从那个时间点之后的所有更新, 完了就一直处于等待状态。
MySQL主从配置示意图.jpg

MySQL主从复制有很多优点:

1. 一旦主机故障,应用可以转移到从机。

2. 在MySQL主机和从机之间进行负载分片,可以带来更快的响应时间。简单“读”数据的查询,如SELECT,可以用从机处理以减少主机的压力。修改记录的查询被分到主机处理,以便结果数据能及时得到反馈。这种负载均衡策略在更新比较少的应用中非常有效。这也是业内常说的MySQL“读写分离”。

3. MySQL数据库的备份可以使用从机来做,而且不会影响主机的资源。在备份进行时,主机可以继续处理更新。

4. MySQL主从复制可以进行灾难恢复。MySQL主从复制可以在地理位置上实现冗余,以防备可能的灾难。MySQL可以实现复制环境,以应对灾后恢复工作。当然,这些架构的实施有一定的特殊要求,比如复制所用的带宽、通信协议的安全性、应用故障发生后预期的切换时间等。

使用道具 举报

回复
招聘 : 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
发表于 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数据库。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
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
发表于 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.如何使用复制来提供冗余/高可用性?

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

使用道具 举报

回复
论坛徽章:
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
发表于 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、如何使用复制来提供冗余/高可用性?
复制可将数据同步到多台机器上,可达到机某台机器宕机实现冷热切换,很多高可用方案楼上也提了。。灵活多样

使用道具 举报

回复
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2012-11-7 10:57 | 显示全部楼层
本帖最后由 buptdream 于 2012-11-7 10:58 编辑

1.怎样强制主服务器阻塞更新直到从服务器同步?
  复制是将主数据库的DML 操作通过日志传到从服务器上,使得从服务器实现了对主服务器的远程备份,并且可以通过应用使得在主服务器繁忙的时候分担一部分负载。mysql 支持同时向多台从服务器进行复制。
缺点:不能保证主从同步,只能实现异步复制。
      在复制的过程中,需要经常查看slave状态
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
1 row in set (0.00 sec)
      主要检查Slave_IO_Running 和Slave_SQL_Running 这两个进程状态是否是yes,这两个进程的含义如下:
      Slave_IO_Running:此进程负责slave 从master 服务器上读取binlog 日志,并写入
      slave 服务器上的中继日志中
      Slave_SQL_Running:此进程负责读取并且执行中继日志中的binlog 日志
   只要其中有一个进程的状态是no,则表示复制进程停止,错误原因可以从Last_Errno后面看到。
   如果两边不一致的情况下,可以先关闭掉主服务器产生日志到从服务器上,具体的操作步骤如下:
1. 在主服务器上,执行这些语句:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
记录SHOW 语句的输出的日志名和偏移量。这些是复制坐标。
2. 在从服务器上,发出下面的语句,其中Master_POS_WAIT()函数的参量是前面步骤中
的得到的复制坐标值:
mysql> SELECT MASTER_POS_WAIT('log_name', log_offset);
SELECT 语句阻塞直到从服务器达到指定的日志文件和偏移量。此时,从服务器与主服
务器同步,语句返回。
3. 在主服务器上,发出下面的语句允许主服务器重新开始处理更新:
mysql> UNLOCK TABLES;

在这个过程中,可以查看SHOW SLAVE STATUS 语句的Seconds_Behind_Master 列的结果。

2.MySQL复制能够何时和多大程度提高系统性能?
   我们可以通过mysql复制来提高系统的性能,应将一个服务器设置为主服务器并且将所有写指向该服务器。然后根据预算配置尽可能多的从服务器以及栈空间,并且在主服务器和从服务器之间分发读取操作。可以用--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL选项启动从服务器,以便在从服务器端提高速度。在这种情况下,为了提高速度,从服务器使用非事务MyISAM表来代替InnoDB和BDB表。
   为了使用高性能的复制,可以使用replace工具自动进行转换,该工具随标准MySQL一起发布,或可以自己编写转换脚本。理想情况,代码使用一致的程序转换风格。
    MySQL复制对于频繁读和频繁写的系统具有最大好处。理论上,通过使用单个主服务器/多从服务器设置,可以通过添加更多的从服务器来扩充系统,直到用完网络带宽,或者你的更新负载已经增长到主服务器不能处理的点。
    在获得的收益开始吃平之前,为了确定可以有多少从服务器,以及可以将你的站点的性能提高多少,需要知道查询模式,并且要通过基准测试并根据经验确定一个典型的主服务器和从服务器中的读取(每秒钟读取量,或者max_reads)吞吐量和写(max_writes)吞吐量的关系。通过一个假设的带有复制的系统,我们给出了一个非常简单的计算结果。

假设系统负载包括10%的写和90%的读取,并且我们通过基准测试确定max_reads是1200 –2 × max_writes。换句话说,如果没有写操作,系统每秒可以进行1,200次读取操作,平均写操作是平均读操作所用时间的两倍,并且关系是线性的。我们假定主服务器和每个从服务器具有相同的性能,并且我们有一个主服务器和N个从服务器。那么,对于每个服务器(主服务器或从服务器),我们有:

reads = 1200 – 2 × writes

reads = 9 × writes / (N + 1) (读取是分离的, 但是写入所有服务器)

9 × writes / (N + 1) + 2 × writes = 1200

writes = 1200 / (2 + 9/(N+1))

最后的等式表明了N个从服务器的最大写操作数,假设最大可能的读取速率是每分钟1,200次,读操作与写操作的比率是9。

如上分析可以得到下面的结论:

         如果N = 0(这表明没有复制),系统每秒可以处理大约1200/11 = 109个写操作。

         如果N = 1,每秒得到184个写操作。

         如果N = 8,每秒得到400个写操作。

         如果N = 17,每秒得到480个写操作。
  最后,当 N 趋于无穷大(以及我们预算的负无穷大)时,可以得到非常接近每秒600个写操作,系统吞吐量增加将近5.5倍。然而,如果只用8个服务器,增加接近4倍。
  请注意,这些计算假设网络带宽无穷大并忽略掉了其它一些因素,那些因素可能对系统产生重要的影响。在许多情况下,不能执行与刚才类似的计算,即如果添加N台复制从服务器,应该准确预报系统将发生哪些影响。回答下面的问题应能够帮助你确定复制是否和在多大程度上能够提高系统的性能:      
1:系统上的读取/写比例是什么?
2:如果减少读取操作,一个服务器可以多处理多少写负载?
3:网络带宽可满足多少从服务器的需求?

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

   利用目前的可用特性,必须设置一个主服务器和一个从服务器(或多个从服务器),以及写一个脚本来监视主服务器是否启动。如果主服务器失败,通知应用程序和从服务器切换主服务器。下面是一些建议:
1:告知从服务器更改其主服务器,使用CHANGE MASTER TO语句。
2:通知应用程序主服务器位置的一个很好的方法是对主服务器提供动态DNS入口。用bind可以使用nsupdate动态更新DNS。
3:应该用--logs-bin选项而不用 --logs-slave-updates选项运行从服务器。这样,一旦你在其它从服务器上发出STOP SLAVE; RESET MASTER, 以及CHANGE MASTER TO语句,该从服务器可以切换为主服务器。
下面通过例子来说明一下:
mysql 复制1.jpg

Master代表主服务器,Slave代表从服务器,用户代表发出数据库写和读取操作的客户;只发出数据库读取操作的客户没有给出,因为它们不需要切换。Slave1、Slave2以及Slave3是从服务器,用--logs-bin选项而没有用--logs-slave-updates运行。因为从服务器收到的主服务器的更新没有记录在二进制日志中,除非指定 --logs-slave-updates选项,每个从服务器上的二进制日志是空的。如果因为某些原因M 变得不可用,你可以选取一个从服务器变为新的主服务器。例如,如果你选取了Slave1,所有用户应该重新指向Slave1和Slave2,并且Slave3然后应从S1复制。
确保所有从服务器已经处理了中继日志中的所有语句。在每个从服务器上,发出STOP SLAVE IO_THREAD语句,然后检查SHOW PROCESSLIST语句的输出,直到你看到Has read all relay log。当所有从服务器都执行完这些,它们可以被重新配置为一个新的设置。在被提升为主服务器的从服务器Slave1上,发出STOP SLAVE和RESET MASTER语句。
在其它从服务器Slave2和Slave3上,使用STOP SLAVE和CHANGE MASTER TO MASTER_HOST='S1'(其中'S1'表示S1实际的主机名)。为CHANGE MASTER添加关于从Slave2或Slave3如何连接到Slave1的所有信息(user、password、port)。在CHANGE MASTER命令中,不需要指定从其读取的Slave1的二进制日志名或二进制日志位置:我们知道它是第1个二进制日志,位置是4,这是CHANGE MASTER命令的默认值。最后,在Slave2和Slave3上使用START SLAVE 命令。
然后,指示所有用户 把它们的语句指向Slave1。此后用户发出的所有发送到Slave1的更新语句被写入Slave1 二进制日志,Slave1则包含Master死掉之后的发送到 Slave1的每一个更新语句。
结果是下面的配置:
mysql 复制2.jpg
当 Master重新启动后,你必须在Master上发出相同的CHANGE MASTER语句,与在Slave2和Slave3上发出的语句一样,以便Master变为Slave1的从服务器并且恢复在它宕机后丢失的所有用户写操作。要把 Master 再次作为主服务器(例如,因为它是功能最强的机器),使用前面的步骤,好像Slave1不可用并且Master变为一个新的主服务器一样。在这个过程中,在Slave1、Slave2以及Slave3作为Mster的从服务器之前,不要忘记在Master上运行RESET MASTER。否则,它们可能拾取Master变得不可用之前的旧用户写操作。
目前正在MySQL集成自动主服务器选择系统,但在准备好之前,你必须创建自己的监控工具。


使用道具 举报

回复
论坛徽章:
37
秀才
日期:2015-08-26 09:00:13秀才
日期:2015-08-26 09:00:13嫦娥
日期:2015-08-26 10:44:22ITPUB14周年纪念章
日期:2015-10-26 17:23:44
发表于 2012-10-24 10:53 | 显示全部楼层
沙发

使用道具 举报

回复
认证徽章
论坛徽章:
24
技术图书徽章
日期:2013-08-16 14:31:52问答徽章
日期:2013-11-04 08:53:14目光如炬
日期:2013-12-23 06:00:11目光如炬
日期:2013-12-30 06:00:11明星写手
日期:2014-02-22 06:00:12马上有钱
日期:2014-03-31 14:09:05沸羊羊
日期:2015-05-20 12:42:59秀才
日期:2015-06-24 13:05:36秀才
日期:2015-07-13 09:48:14
发表于 2012-10-24 12:53 | 显示全部楼层
哎呦,都没人来参加活动么。哇哇哇

使用道具 举报

回复
论坛徽章:
11
迷宫蛋
日期:2011-10-24 10:43:14蛋疼蛋
日期:2013-01-10 11:03:47奥运纪念徽章
日期:2012-12-06 09:21:40ITPUB 11周年纪念徽章
日期:2012-10-31 14:48:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422012新春纪念徽章
日期:2012-01-04 11:57:13茶鸡蛋
日期:2011-12-06 16:25:55ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51ITPUB官方微博粉丝徽章
日期:2011-10-31 10:21:02
发表于 2012-10-24 16:26 | 显示全部楼层
这人们都在干吗呢,最近都不怎么活跃了。我来了

使用道具 举报

回复
论坛徽章:
11
迷宫蛋
日期:2011-10-24 10:43:14蛋疼蛋
日期:2013-01-10 11:03:47奥运纪念徽章
日期:2012-12-06 09:21:40ITPUB 11周年纪念徽章
日期:2012-10-31 14:48:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422012新春纪念徽章
日期:2012-01-04 11:57:13茶鸡蛋
日期:2011-12-06 16:25:55ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51ITPUB官方微博粉丝徽章
日期:2011-10-31 10:21:02
发表于 2012-10-24 16:27 | 显示全部楼层
后面的兄弟顶起来呀

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2012-10-25 13:41 | 显示全部楼层
1.怎样强制主服务器阻塞更新直到从服务器同步?

这个思路固然是好。

但是如果master下面挂载了很多slave,如果一味得为了slave可以同步,而阻塞主服务器的更新。我认为会出现更大严重情况的发生。

所以,不建议强制同步。

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2012-10-25 16:52 | 显示全部楼层
1.怎样强制主服务器阻塞更新直到从服务器同步?
   不是很明白这个意思,现在的复制都是单线程复制,延时是一个不可避免的话题,比较是先在主库上执行完了,再同步到从库,再快的网速和IO也是延时的。淘宝的tranfer多进程复制据说解决了同步延时的问题,不过没有在线用过,不知道具体性能如何?

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

  对于互联网行业来说,MySQL复制能提高读性能,用复制实现读写分离,一主多从,允许数据延时5秒之内,N个从做负载均衡,这样在高并发的在线交易上,可以用N个从库来分担频繁的读压力。特别是双十一等促销活动中,这点特别明显,还有就是用从库实现一些统计功能,比如报表比如bi数据分析统计等等,主库99%来负载写操作的压力。


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

  一主多从或者多主多从或者一主多从多从等,在7x24的互联网行业来说,从库可以用来专门做备份,而且主用来写,从用来读,读写分离,通过多pc机器的加入来实现高并发高交易量。
  
   在主库down了自后,自动切换到从库或者备库,实现高可用性。
   还有mysql cluster的sql 节点,也可以实现多主从复制功能。

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2012-10-25 16:54 | 显示全部楼层
zhangshengdong 发表于 2012-10-25 13:41
1.怎样强制主服务器阻塞更新直到从服务器同步?

这个思路固然是好。

对mysql主从同步的延时,需要做实时监控报警,一旦延时超过设定的阀值,就短信报警或者email报警,甚至可以做到电话报警。

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2012-10-25 16:57 | 显示全部楼层
对实时有要求的应用,在进行写操作的时候,要尽量避免批量操作。

1 建议每次都是根据唯一主键来进行数据的dml操作。每次操作一行数据,这样延时就会少很多。

2 主库与从库的机器性能不能差太大,特别是IO性能。

3 主库与从库要在同一个局域网,网速最好百M以上,千M更佳。

4 从库的binlog日志关闭。主库的binlog模式设置成mixed。

使用道具 举报

回复

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

本版积分规则 发表回复

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