高度可用的MySQL体系结构,可在不同位置进行自动故障转移

我一直在为数据中心之间的MySQL研究高可用性(HA)解决scheme。

对于位于同一物理环境中的服务器,我倾向于使用主动被动方法的心跳(浮动VIP)双主控。 心跳通过串行连接以及以太网连接。

最终,我的目标是保持相同的可用性级别,但是在数据中心之间。 我希望在两个数据中心之间进行dynamic故障切换而无需人工干预,并仍然保持数据完整性

上面会有BGP。 两个地点的networking集群,这将有可能通过双方之间的数据库。 如果在站点1上的Internet连接断开,则如果两个站点之间的链接仍处于运行状态,则客户端将通过站点2路由到Web群集,然后再到站点1中的数据库。

在这种情况下,由于缺乏物理链接(系列),更有可能分裂大脑。 如果广域网在两个站点之间发生故障,那么VIP将在两个站点上结束,在这两个站点上,各种令人不快的情况可能会导致asynchronous。

我看到的另一个潜在问题是,将来这个基础设施难以扩展到第三个数据中心。

networking层不是重点。 在这个阶段架构是灵活的。 同样,我的重点是维护数据完整性的解决scheme以及MySQL数据库的自动故障转移。 我可能会围绕这个devise其余的。

你能推荐一个经过validation的解决scheme吗?

感谢您抽出时间来阅读。 我期待着阅读你的build议。

    你将面临“CAP”定理问题。 您不能同时拥有一致性,可用性和分区容限。

    DRBD / MySQL HA依赖于块设备级别的同步复制。 这两个节点都可用,或者如果有一个临时故障,重新启动等,然后返回。 当你得到networking分区时,问题就开始了。

    当您在两个数据中心运行时,networking分区极有可能。 实质上,任何一方都不能区分另一个节点发生故障的分区。 次要节点不知道是否应该接pipe(主要失败)或不(链路不见了)。

    当你的机器处于同一个位置时,你可以添加一个辅助通道(通常是串行电缆或交叉以太网)来解决这个问题 – 所以辅助节点知道主节点何时是closures的,而不是networking分区。


    接下来的问题是性能。 虽然当您的机器具有低延迟连接(例如千兆以太网 – 但有些人使用专用的高速networking)时,DRBD可以提供良好的**性能,networking延迟越多,执行事务所需的时间也越长。 这是因为它需要等待辅助服务器(当它在线时)在向应用程序说“OK”之前确认所有的写入,以确保写入的持久性。

    如果您在不同的数据中心执行此操作,则通常会有几毫秒的延迟,即使它们靠近。

    **仍然比体面的本地IO控制器慢得多

    ***不能使用MyISAM作为高可用性DRBD系统,因为它不能正常/自动地从故障转移期间需要的非正常closures中恢复。

    如何使用VLAN将两个(或更多)数据中心的所有服务器连接在一起。 然后,您可以使用CARP进行自动故障转移。 使用数据库复制保持一切同步。

    如果您拥有数据中心,则可以确保每个数据中心都有多个WAN上行链路。

    您的第一个阶段应该是将当前的HA解决scheme升级到使用OpenAIS作为群集成员层的解决scheme:这将为您提供很大的灵活性,并且考虑到站点之间的低延迟链接,可能能够跨越。 PaceMaker和RHEL集群支持这一点。

    对于自动数据中心故障转移,您确实需要第三个站点作为决胜手,否则您的站点将无法区分站点间路由问题和远程站点故障。 微软有一些令人惊讶的好网站覆盖该地区:

    Windows Server 2008多站点群集

    显然,确切的技术并没有映射到Linux领域,但概念是相同的。

    对不起,这是又一个networking,但一个想法在路上…

    对于您提到的裂脑情形,您可以在两个站点之间有冗余链接,以减less发生这种情况的可能性。

    请注意,您可能无法使用BGP,因为最小的可路由块是4k,一个/ 22,祝你好运。 可能需要基于DNS的解决scheme。

    根据你拥有的数据量,你想要的服务器数量等等,给出一个正确的答案可能会很困难。这就是说,我的答案可能不是一个,或者至less是你正在寻找的那个。

    使用MySQL的多站点没有经过validation的解决scheme。 但是有解决scheme的工作。 正如有些人指出的,是DRDB工作正常,但有其限制或可能的问题取决于您的设置。

    你会需要第三个站点(另一个数据中心)? 如果是这样,你将需要多less时间和金钱来做到这一点?

    考虑到每次添加主/从/ DNS服务器,备份,…添加自己的服务器来pipe理,您的pipe理能力在服务器的数量方面是什么? 如果你可以定义这个数字,你可能不得不放弃一些可能的解决scheme,并努力适应你的号码,以便pipe理不会成为瓶颈。

    考虑到数据中心不经常停机,多个站点意味着负载平衡和一些DNS黑客攻击,这是否会在同一个数据中心? 如果是这样的话,如果一个数据中心出于任何原因而出现故障,您将遇到问题,因为您的DNS和负载平衡的很大一部分将在此数据中心。

    所以你可能需要计划这种分裂的大脑情况。 为了缓解每个可能的情况,解决吐吐情况的方法是不同的。 另外,每个解决scheme需要花费X个时间。
    计划从一开始就使用3个数据中心也可能更容易得多。 我不是MySQL的专家,但是我听说在生产过程中,如果遇到问题,拥有3个大师比2个更容易。

    有一点可以帮助你的是Zeus等networking供应商提供的负载均衡服务,看看这里可能有更多的提供这种服务。 我相信它是有代价的,但有时候可以让你减less一些其他的事情。

    祝你好运!

    DRBD不是远程数据中心推荐的解决scheme,因为它需要可能影响数据库和复制速度的带宽。 推荐的解决scheme是Master – Master Replication。 唯一的问题是你自动增加字段需要交错。

    如果你需要一个真正的MySQL解决scheme,你将不得不使用MySQL Cluster,因为在发生故障时DRBD不能为你提供数据完整性。

    我发现有关MySQL中可用选项的博客文章及其优点和缺点。 http://mysqlha.blogspot.com/2010/04/consistency-across-wan.html

    克服缺乏串口电缆实际上是非常简单的,你使用一种叫做调制解调器的黑暗时代 – 你在每一端都有一个,然后在PPP链路上运行Heartbeat。 你也可以使用帧中继。 这两种方法都可以解决您对layer1 / 2冗余path的担忧。

    然而,正如所说的 – DRBD运行在任何超过大约300μs的链路上(注意0.3ms),延迟变得非常快。

    通过使用标准的MySQL复制,以及通过PPP和eth的LinuxHA来进行故障转移,可以更好地为您服务。

    至less这是我过去为客户做的事。