为了简单起见,我建议仅使用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,并且
彼此充当主服务器和从服务器
我已经为这样的客户端拓扑设置了,我认为它非常稳定。