对于一个新网站,我们必须连接到 MySQL master-master 设置。这是一个使用 NHibernate 的 .NET 网站,但同样适用于 Java 或任何其他语言。我们选择此设置是因为我们希望网站在数据库出现故障时继续工作。我们不喜欢停机时间。
也许我完全误解了主-主设置的工作原理(在 MySQL 中),但在我看来,你像往常一样连接到数据库,但在幕后,MySQL 在两者之间复制数据数据库。如果您进行写入,它可以转到 master 1 或 master 2,您通常不会知道(除了自动增量 id 会返回不同的值)。如果 master A 以某种方式失败,master B 仍然可以工作,因此不会停机,master A 将被忽略,直到它再次上升,数据被复制,如果一切正常,master A 将再次回到现场。
如果这是正确的,如果我上面的漫无边际是错误的,请纠正我,您是否需要做一些特别的事情以防万一大师倒下?如果我连接到 192.168.1.50(即 master A),如果 master A 宕机会怎样?MySQL 会以某种方式自动将我连接到 192.168.1.51(master B),以便我的站点继续工作吗?
如果我不正确,那么 MySQL 主主复制如何工作?我是否必须告诉每个查询应该在哪个主机上执行?这是没有意义的,对,因为如果主 A 出现故障,那么我对主 A 的所有查询仍然会失败,并且主-主设置对我没有任何帮助。
所以基本上,我认为我的问题实际上是:
我是否仍然连接到单个 MySQL 主机(我正在使用 NHibernate,但这并不重要),我是否指定单个连接字符串,MySQL 是否知道有两个主机,或者我的代码是否以这种方式更改我需要为两个主服务器指定连接字符串(如何?),做一些特殊的魔法来平衡两个服务器之间的查询,等等。
我还缺少什么吗?谢谢!