KM.*_*KM. 8 mysql replication architecture clustering
我们正在实施在 MySQL 上运行的新 CMS (Drupal 6.x)。我们有两个数据中心——主要的和次要的——它们之间的延迟是已知的。我们不确定我们将运行哪个版本的 MySQL……社区或企业,但这是一个待定的时间。看起来我们将运行 InnoDB 引擎,操作系统将是 RedHat EL 5.5 主服务器将处于活动状态,而辅助服务器将处于被动或热备用状态。
我想在 MySQL 中跨两个数据中心实现复制、高可用性和自动故障转移。
在故障转移到辅助服务器后,当我们故障恢复到主服务器时,我们希望将数据从辅助数据库快速完整地同步到主数据库,以便我们可以继续提供来自主服务器的内容。
我很想知道可以使用哪些技术/工具/最佳实践来解决/解决这些问题。此外,任何陷阱或啊哈时刻也将不胜感激。我已经阅读了 MySQL 复制、集群和一些 3rd 方工具,如 Tungsten 和 Dolphinics,但我不确定什么是最好的行动方案。
感谢您的时间!
知识管理
为了简单起见,我仅推荐 MySQL 循环复制。原因如下:
有许多技术和拓扑远远优于 MySQL 循环复制。毫无疑问,我最喜欢的是DRBD(分布式复制块设备)。然而,当服务器对位于同一建筑物、数据中心和机架中时,DRBD 效果很好。如果在 192.168.xx 子网中 DRBD 主设备和 DRBD 辅助设备之间使用交叉电缆,效果会更好。不幸的是,尽管 DRBD 仍然可以工作,但 DRBD 在两个位置之间的距离上表现很糟糕。没有网络拓扑可以为您提供两个数据中心之间所需的令人满意的 DRBD 性能。
一旦您在两个不同数据中心的两个数据库服务器之间设置了 MySQL 循环复制,唯一需要的调整就是网络。本质上,复制性能是网络设置(MySQL 复制设置中二进制日志传输的速度/延迟)和磁盘 I/O (DRBD) 的函数。
作为示例,您可能需要更好的冗余的替代方案如下:
在两个位置设置 DRBD
对 站点 #1 中的 DRBD 与 VIP 111.111.111.111
站点#2 中的 DRBD 与 VIP 222.222.222.222配对
在以下条件下在 DRBD 主服务器之间设置 MySQL 循环复制:
对于站点 #1,使用 222.222.222.222 作为 MySQL 中的 Master_Host
对于站点 #2,使用 111.111.111.111 作为 MySQL 中的 Master_Host
虽然引入了一定程度的复杂性,但现在您有两个级别的冗余:每个站点内的 DRBD 和站点之间的 MySQL 循环复制。通过 mysqldump 在热备用服务器的 DRBD 主服务器上运行备份还有其他好处。
至于故障转移,DRBD 可以在任一站点提供自动故障转移。
只有在数据中心完全不可用的情况下,您才会在热备站点上使用 DB VIP。
更新
我刚刚仔细看了看,注意到您正在使用 Drupal6。我很高兴您将所有 drupal 表转换为 InnoDB。这将消除 MyISAM 表更新导致表锁冻结仅读取 MyISAM 表的数据库连接的任何可能性。针对 MyISAM 表的任何 DML 更新(INSERT、UPDATE、DELETE)将始终执行完整的表锁定!使用InnoDB将引入行级锁定,从而消除全表锁定。
此外,当一切都是 InnoDB 时,DRBD 就会成为您的朋友,因为 DRBD 对之间的崩溃恢复将保持一致。相反,带有 MyISAM 的 DRBD 不会给您带来任何好处,因为 DRBD 主数据库上崩溃的 MyISAM 表只是简单地复制到 DRBD 辅助数据库,正如您猜到的那样,一个崩溃的 MyISAM 表。
更新#2
您应该使用两级冗余
Level 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,并且
彼此充当主节点和从节点
我已经为客户端设置了这样的拓扑,我认为它非常稳定。
归档时间: |
|
查看次数: |
10787 次 |
最近记录: |