在我们的情况下,为可靠性添加额外服务器的更好方法是什么?

我们有以下服务器:

A. 1个运行MySQL的Web服务器(一个论坛)。
B.用Postgres运行RT的1个Web服务器。
C. 1个Web服务器,运行MonetDB作为后端的本地应用程序

现在当然我们希望通过在每台服务器死亡的情况下为每个Web服务器添加一个额外的服务器来增加一点可靠性。但是,最好的和相对便宜的方法是什么?

  1. 每个获得一个额外的服务器,并在每种情况下使用适当的技术复制数据库? MySQL的A复制,Slony等B,我真的不知道如何复制MonetDB,但我想这是可能的。

为什么我不喜欢这种情况:由于同步问题导致的可能的数据损坏,例如,临时的电源闪烁可能会导致数据写入从设备,然后主设备返回,然后复制被破坏。 对于Slony来说,你甚至无法做到这一点,你必须先把奴隶推广给一个主人,等等,AFAIK。

我不喜欢这件事的另一件事是不得不手动跋涉所有这一切,并找出谁正在做什么,同步事物等等。

2.获得2个服务器与他们的体面的存储量和设置DRBD。

由于他们将拥有一个共享的IP,因此将所有数据库(例如MySQL,Postgres和Monet)放在DRBD存储上。 关于DRBD的好处是,即使我们失去了集群的一部分,另一个服务器也可以接pipe,所以它更具弹性,我们不会有单点故障。 而且我的理解是,这个级别以上的Web服务器可以简单地进行故障恢复,而不需要担心复制和同步事物等。

3.VMs?
使用虚拟机来设置类似的东西时,最佳做法是什么?

虽然虚拟机在简化整合方面很有用,但在这方面,虚拟机在这方面并没有太多的帮助。

没有两个重要的数据点,你的问题是不能回答的:你的预算和负荷。 如果您的预算有限,但是您的负载足够低,则可以使用主动/被动设置轻松将所有这些数据移动到两台服务器上。

如果您的预算允许,您可能需要考虑购买SAN(或者最好是两个HA)。 在这种情况下,您仍然可以将数据库(可能是虚拟化的)与应用程序放在同一台服务器上,但将数据写入SAN。 数据库大多是IO绑定的。

另一条路线的确是有一个双节点故障转移群集的DB,并有数据库分区通过DRBD复制,它工作得很好。 但是你要确保每个都有自己的磁盘; 为此,我会build议使用类似2U机器的6个磁盘与电池支持的硬件RAID。

如果你有更多的stream量,但仍然想保持低预算,你可以尝试以下方法:

  • 主动/被动设置中的2个数据库服务器使用DRBD进行复制
  • 运行应用程序的两个前端服务器都处于活动状态
  • 在前端的VIP上运行一个软件负载均衡器,只有其中一个会收到传入的连接,但是会重新分派到本地或其他节点。 我推荐Haproxy

小心虽然负载; 如果其中一个节点在高峰使用时出现故障,则会遇到很多麻烦,但是这可能是处理偶尔的Slashdotting的好方法。

不要使用drbd进行mysql故障转移。 使用master-master复制,并把haproxy放在它们前面来负载平衡mysql连接并提供故障转移。 然后把心跳放在haproxy服务器上。 通过负载平衡完成故障转移。

drbd适用于在其上运行nfs的网页文件。

对于那些“如果”你的初选失败,而不是平衡/频繁失败的解决scheme,#2和#3的组合将会很好地工作。 获得一个合理的资源来存储和运行每个主系统的虚拟机。 使用DRBD来简化数据的复制。 对于增加的花里胡哨的事情,你可以投入心跳来实现自动故障转移。 当然,复制!=备份。

为什么不使用VMWare /虚拟化来创build一个双服务器+数据库集群,每个集群都运行着所有的各种数据库和第二台双服务器+ Web服务器集群,每个服务器集群都服务于所有各种Web应用程序。

这样,您只需要尽可能less的服务器,就可以拥有一个内置的扩展解决scheme,可以让您在发生热点时增加/移动热点,并且还可以充分利用您的资产。