这是前面描述的主主结构的变体, 它能够避免我们之前讨论的问题。 这也是构建容错性和高可用性系统的非常强大的方式,主要区别在于其中的一台服务器是只读的被动服务器。
这种方式使得反复切换主动和被动服务器非常方便,因为服务器的配置是对称的。这使得故障转移和故障恢复很容易。它也可以让你在不关闭服务器的情况下执行维护、优化表、升级操作系统(或者应用程序、硬件等)或其他任务。
例如,执行ALTER TABLE 操作可能会锁住整个表,阻塞对表的读和写,这可能会花费很长时间并导致服务中断。然而在主-主配置下,可以先停止主动服务器上的备库复制线是(这样就不会在被动服务器上执行任何更新),然后在被动服务器上执行ALTER操作,交换角色,最后在先前的主动服务器上启动复制线程。这个服务器将会读取中继日志并执行相同的ALTER语句。这可能花费很长时间,但不要紧,因为该服务器没有为任何话跃查询提供服务。
主动-被动模式的主-主结构能够帮助回避许多MySQL的问题和限制,此外还有一些工具可以完成这种类型的操作。
让我们看看如何配置主一主服务器对,在两台服务器上执行如下设置后,会使共拥有对称的设置:
1. 确保两台服务上有相同的数据。
2.启用二进制目志,选择唯的服务器ID, 并创建复制账号。
3.启用备库更 新的目志记录,后面将公看到,这是故障转移和故障恢复的关键。
4. 把被动服务2配置成只读,防止可能与主动服务器上的更新产生冲突,这一点是可选的。
5.启动每个服务器的MySQL实例。
6.将每个主库设置为对方的备库,使用新创建的二进制日志开始工作。
让我们看看主动服务器上更新时会发生什么事情。更新被记录到二进制日志中,通过复制传递给被动服务器的中继日志中。被动服务器执行查询并将其记录到自己的二进制日志中(因为开启了logslaveupdates选项)。由于事件的服务器ID与主动服务器的相同,因此主动服务器将忽略这些事件。在后面的“修改主库”可了解更多的角色切换相关内容。
设置主动一被动的主-主拓扑结构在某种意义上类似于创建一个热备份,但是可以使用这个“备份”来提高性能,例如,用它来执行读操作、备份、“离线”维护以及升级等。真正的热备份做不了这些事情。然而,你不会获得比单台服务器更好的写性能。
当我们讨论使用复制的场景和用途时,还会提到这种复制方式。它是一种非常常见并且重要的拓扑结构。