MySQL具有延迟的高可用性,故障转移和复制


8

我们正在实施在MySQL上运行的新CMS(Drupal 6.x)。我们有两个数据中心-主数据中心和辅助数据中心,它们之间的延迟已知。我们不确定我们将运行哪个MySQL版本...社区还是企业,但这是一个待定。看来我们将运行InnoDB引擎,操作系统将为RedHat EL 5.5。主服务器将处于活动状态,而辅助服务器将处于被动或热备用状态。

我想在两个数据中心的MySQL中实现复制,高可用性和自动故障转移。

故障转移到辅助服务器后,当我们故障回复到主服务器时,我们希望将数据从辅助数据库快速而完整地同步到主数据库,以便我们可以继续从主服务器提供内容。

我很想知道可以使用哪些技术/工具/最佳实践来解决/解决这些问题。同样,任何陷阱或啊哈时刻也将不胜感激。我已经阅读了有关MySQL复制,群集和Tungsten和Dolphinics等某些第三方工具的资料,但是我不确定什么是最佳方法。

感谢您的时间!

KM

Answers:


3

为了简单起见,我建议仅使用MySQL循环复制。原因如下:

有许多技术和拓扑远远优于MySQL循环复制。我最喜欢的是DRBD(分布式复制块设备)。但是,当服务器对位于同一建筑物,数据中心和机架中时,DRBD的效果很好。在DRBD Primary和DRBD Secondary之间的192.168.xx子网中使用交叉电缆时,效果更好。不幸的是,尽管DRBD仍然可以工作,但在两个位置之间的距离上,DRBD的性能都很差。周围没有网络拓扑可为您提供两个数据中心之间所需的令人满意的DRBD性能。

在两个不同数据中心的两个数据库服务器之间设置MySQL循环复制后,唯一需要的调整就是网络。本质上,复制性能是网络设置(MySQL复制设置中二进制日志传输的速度/延迟)和磁盘I / O(DRBD)的函数。

为了示例,您可能希望获得更好的冗余度的替代方法是:

在两个位置均设置DRBD对,
在站点#1
中使用VIP 111.111.111.111对DRBD对在站点#2中使用VIP 222.222.222.222对DRBD对

在以下情况下,在DRBD主服务器之间设置MySQL循环复制:
对于站点1,在MySQL中使用222.222.222.222作为Master_Host
对于站点2,在MySQL中使用111.111.111.111作为Master_Host

尽管引入了一定程度的复杂性,但是现在您有两个冗余级别:每个站点内的DRBD和站点之间的MySQL循环复制。您还具有在热备用服务器的DRBD主服务器上通过mysqldump运行备份的其他好处。

至于故障转移,DRBD可在任何一个站点上提供自动故障转移。

只有在数据中心完全不可用的情况下,您才可以在热备用站点上使用DB VIP。

更新

我只是做了两遍,发现您正在使用Drupal6。我很高兴您将所有的drupal表都转换为InnoDB。这将消除MyISAM表更新的任何机会,这些更新会导致表锁冻结仅读取MyISAM表的数据库连接。针对MyISAM表的任何DML更新(INSERT,UPDATE,DELETE)都将始终进行全表锁定!使用InnoDB将引入行级锁定,从而消除了全表锁定。

此外,当一切都是InnoDB时,DRBD成为您的朋友,因为DRBD对之间的崩溃恢复将保持一致。相反,带有MyISAM的DRBD不会给您带来任何好处,因为DRBD Primary上崩溃的MyISAM表只是复制到DRBD Secondary上,就像您猜到的那样,是MyISAM表崩溃了。

更新#2

您应该使用两个级别的冗余

级别1:在每个数据库中心,使用DRBD。
http://dev.mysql.com/doc/refman/5.1/en/ha-drbd.html

在DRBD主数据库上设置一对数据库服务器
启动DRBD
启动MySQL

这将在磁盘级别创建冗余数据。

级别2:您应该在
DataCenter#1的DRBD主数据库和DataCenter#2的DRBD主数据库之间设置MySQL循环复制

每个DRBD主数据库都将运行MySQL,并且
彼此充当主服务器和从服务器

我已经为这样的客户端拓扑设置了,我认为它非常稳定。


感谢@RolandoMySQLDBA。将负载平衡VIP用于数据中心中断的观点很有意义。因此,我们在每个数据中心都有一个从站,对吗?如果发生故障回复,您认为确保主数据库是最新的最佳方法是什么?另外,我一直在研究循环复制,看起来它是基于MySQL集群的吗?NDB?我认为Drupal 6无法与NDB(drupal.org/node/391130)配合使用。再次感谢您的宝贵时间!
KM。

我已经更新了答案!顺便说一句,我从未提到过NDB。MySQL循环复制只是双向实现的主从。
RolandoMySQLDBA 2011年

感谢您的澄清。一些MySQL循环复制参考提到了NDB,所以我想仔细检查(-:BTW,如何使用这些拓扑自动进行故障转移?
KM.11年

DRBD旨在使用Linux HeartBeat或ucarp(ucarp.org/project/ucarp)促进自动故障转移。我的公司LogicWorks是一家果皮店。ucarp允许两台机器共享一个虚拟IP(VIP)地址。DRBD Master可以在其上运行带有MySQL的VIP。DRBD Secondary将运行ucarp,并等待一定比例的时间触发自动故障转移。ucarp假定数据库VIP的上下脚本应包括安装DRBD磁盘,将其设置为主数据库以及启动MySQL。Down脚本将停止MySQL卸载DRBD,进入Secondary并杀死VIP。
RolandoMySQLDBA 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.