跨地理位置分开的服务器进行MySQL复制


11

我的组织一直在研究如何在地理位置上分布我们的服务器,同时使备份保持最新状态,并理想地分布负载。

我最初想到的是MySQL上的Rails。写入速度不太高(文章/评论每分钟少于1条,尽管有些具有较大的媒体附件)。

所以,

  • MySQL复制在广域网中运作良好吗?
  • 连接(或从属服务器)断开意味着是否需要手动干预(一旦两台服务器可以再次相互通信)还是恢复自动进行?
  • 如果主机消失,将从机变成主机需要什么?是否有标准的脚本/工具来帮助管理?
  • 还有其他陷阱吗?

Answers:


6

我们在多个欧洲国家/地区的数据中心之间使用复制(因此它们彼此之间不在世界范围内,但是它们肯定不是本地的),并且复制没有任何问题。

如果可能,复制将自动重新启动。如果查询存在问题(例如,主服务器上存在数据库,而从服务器上没有数据库,而查询使用该数据库),则默认情况下将需要手动更正(但您可以将其设置为忽略此类错误)。如果数据库是精确的镜像,则您永远不需要手动重新启动复制。

如果您有两个服务器,而主服务器消失了,则要将从服务器变成“主服务器”,只需停止复制并更改您的代码(以写入新的“主服务器”)。如果有三台或更多服务器,并且主服务器消失,则停止在从服务器上进行复制,将它们更改为使用新的主服务器,然后重新启动。如果它们不完全同步(取决于要传输的数据量,服务器的繁忙程度,网络连接的状况等等),那么您可能需要做更多的工作。 MySQL文档的复制部分对此进行了更详细的介绍

我建议您确保通过SSL复制(即,将复制用户设置为需要SSL连接)。


4

复制在MySQL 5.1中发生了巨大变化。在5.0中,仅使用基于语句的复制。现在,您可以选择执行基于行的复制或基于混合的复制。这将极大地影响您通过WAN复制的方式。

如果您有能力:A)IP接管(如果服务器在地理位置上是不可能的)B)进行灵活的DNS更改您可以避免修改应用程序代码/配置来更改主服务器。我们使用具有短缓存和伪造.internal域的内部DNS。如果需要将masterdb.internal更改为其他服务器,则更改将在5秒钟内完成。

在单个数据中心内,我们使用IP接管。所有的数据库服务器都有虚拟接口(eth0:1,eth0:2,eth0:3),这些接口在启动时不会进行配置。如果一个奴隶需要接管,您只需ifup eth0:2,它就是主人。在这种情况下,eth0是我们用于诸如此类的外壳的“ if”。这些应用程序在eth0:1上连接,如果我的脚本检测到该IP已被占用,它将在启动时不会被激活。(维基百科STONITH)其他if是用于接管可能需要进行故障转移的主机的IP。


3

当使用MySQL复制时,我不建议您跨入大海。当奴隶在德克萨斯州时,我曾尝试从欧洲的一位大师那里复制。复制几乎每天都中断,直到我们放弃了该项目。当然可以工作,但是随着主从之间的距离变大,它往往会变得越来越脆弱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.