AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 1974
Accepted
KM.
KM.
Asked: 2011-03-30 06:53:31 +0800 CST2011-03-30 06:53:31 +0800 CST 2011-03-30 06:53:31 +0800 CST

MySQL 高可用性、故障转移和延迟复制

  • 772

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

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

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

我有兴趣了解可以使用哪些技术/工具/最佳实践来解决/解决这些问题。此外,任何陷阱或啊哈时刻也将不胜感激。我已经阅读了 MySQL 复制、集群以及 Tungsten 和 Dolphinics 等一些 3rd 方工具,但我不确定什么是最好的行动方案。

感谢您的时间!

公里

mysql replication
  • 1 1 个回答
  • 11059 Views

1 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-03-30T12:01:02+08:002011-03-30T12:01:02+08:00

    为了简单起见,我只推荐 MySQL 循环复制。原因如下:

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

    在两个不同数据中心的两个数据库服务器之间设置 MySQL 循环复制后,唯一需要的调整就是网络。本质上,复制性能是网络设置(MySQL Replication Setup 中二进制日志传输的速度/延迟)和磁盘 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 更新(插入、更新、删除)将始终执行全表锁定!使用 InnoDB 将引入行级锁定,从而消除全表锁定。

    此外,当一切都是 InnoDB 时,DRBD 成为您的朋友,因为崩溃恢复将在 DRBD Pair 之间保持一致。相反,带有 MyISAM 的 DRBD 对您没有任何好处,因为 DRBD 主节点上的崩溃 MyISAM 表只是简单地复制到 DRBD 辅助节点,正如您猜到的那样,崩溃的 MyISAM 表。

    更新#2

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

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

    在 DRBD Primary 上设置一对 DB Servers
    Startup DRBD Startup MySQL

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


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

    每个 DRBD 主节点都将运行 MySQL,并将
    作为彼此的主从节点

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

    • 3

相关问题

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve