设置主到多主复制的最佳方法

Elg*_*oog 7 mysql replication

原始问题: 我有多个服务器都需要充当主服务器,好像一个服务器出现故障,下一个服务器启动并接管。我只是想知道复制的最佳方式是什么。所有服务器都在不同的数据中心。

问题

  • 将每个服务器设置为具有“超级主机”的主主机是否可以?
  • 我会有什么样的冲突?
  • 有没有更好的方法来做到这一点?

更新的问题: 我们在世界各地的不同数据中心都有服务器,每台服务器都需要访问通常位于本地主机上的数据库。

每台服务器都需要能够更新数据库,每台服务器几乎都是其他服务器的镜像。这些都通过一个服务器(超级主机)保持同步,所有服务器都可以与之通信。

所有的服务器只和supermaster 通信,它们不知道任何其他服务器。超级主机本身就是其他服务器的镜像,只是附加了同步所有服务器的服务。

有时supermaster因为各种原因离线;发生这种情况时,其他服务器将照常进行,包括读取和写入数据。当超级主机恢复时,它开始同步过程并整理并解决其他服务器之间的冲突,完成后所有服务器都有数据的镜像并且全部“同步”。

因此,在对这个问题进行更多思考之后,我的问题是;

  • 有没有办法在每个服务器上拥有一个完全相同的单个数据库,而没有一个点可以像星形拓扑那样更新数据库?
  • 对于我的情况,是否有更好的选择来全面复制 mysql?

任何帮助深表感谢。

Rol*_*DBA 8

您需要组合四 (4) 个选项

选项 1:星型拓扑中的 MySQL

为了不重新发明轮子,请阅读我过去关于这个主题的帖子

选项 2:使用 DRBD

选项 3:使用半同步复制

任何网络延迟都会影响二进制日志的收集,并且通过网络传送条目可能是瓶颈。使用MySQL 5.5 的半同步复制可以让您调整 MySQL Heartbeat 特性,以最大限度地减少由于任何显着的网络延迟而导致的复制丢失。

选项 4:循环复制

如果你有多个master,循环复制是必须的。有许多产品可以提供循环复制,例如 mysql-mmm(在评论中提到),它在单个数据中心的范围内非常有用。这只是您的难题之一,因为除了循环复制之外,还必须包含四 (4) 件事:

  1. 网络延迟
  2. 地理距离
  3. 每个数据中心的磁盘级冗余(由 DRBD 处理)
  4. DRBD 的 DBVIP 主干的自动故障转移(通过 ucarp)

警告

这可能不是您的完整答案,但这些选项可以提供您可以在不同场景中尝试的想法。例如,在星型拓扑中,您​​可以执行以下操作:

情景#1

  • 让一个数据中心的 DB Server 成为持有 InnoDB 数据的 SuperMaster
  • 在同一数据中心拥有 Distribution Master(仅限二进制日志)
  • 让所有从站从分发主站复制

场景#2

  • 让一个数据中心的 DB Server 成为 SuperMaster 不持有数据,这意味着 supermaster 是 Distribution Master(仅限二进制日志)
  • 让所有从站从分发主站复制

场景#3

  • 在循环复制中的每个数据中心设置分发主服务器
  • 在每个数据中心内,拥有 MySQL Instance (Local SuperMaster),以 InnoDB 作为唯一的存储引擎
  • 从每个 Local SuperMaster 挂起两个或更多读取从设备。每个 read slave 都应该使用 MyISAM 作为主存储引擎。每个 MyISAM 表应该有 ROW_FORMAT=FIXED 以提高读取速度 20-30%

就可能性而言,这取决于您的想象力和部门预算。

MySQL 和 DRBD 的链接

用于磁盘级冗余的 DRBD 和用于 DBVIP 自动故障转移的 ucarp