我们有以下服务器:
A. 1个运行MySQL的Web服务器(一个论坛)。
B.用Postgres运行RT的1个Web服务器。
C. 1个Web服务器,运行MonetDB作为后端的本地应用程序
现在当然我们希望通过在每台服务器死亡的情况下为每个Web服务器添加一个额外的服务器来增加一点可靠性。但是,最好的和相对便宜的方法是什么?
为什么我不喜欢这种情况:由于同步问题导致的可能的数据损坏,例如,临时的电源闪烁可能会导致数据写入从设备,然后主设备返回,然后复制被破坏。 对于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量,但仍然想保持低预算,你可以尝试以下方法:
小心虽然负载; 如果其中一个节点在高峰使用时出现故障,则会遇到很多麻烦,但是这可能是处理偶尔的Slashdotting的好方法。
不要使用drbd进行mysql故障转移。 使用master-master复制,并把haproxy放在它们前面来负载平衡mysql连接并提供故障转移。 然后把心跳放在haproxy服务器上。 通过负载平衡完成故障转移。
drbd适用于在其上运行nfs的网页文件。
对于那些“如果”你的初选失败,而不是平衡/频繁失败的解决scheme,#2和#3的组合将会很好地工作。 获得一个合理的资源来存储和运行每个主系统的虚拟机。 使用DRBD来简化数据的复制。 对于增加的花里胡哨的事情,你可以投入心跳来实现自动故障转移。 当然,复制!=备份。
为什么不使用VMWare /虚拟化来创build一个双服务器+数据库集群,每个集群都运行着所有的各种数据库和第二台双服务器+ Web服务器集群,每个服务器集群都服务于所有各种Web应用程序。
这样,您只需要尽可能less的服务器,就可以拥有一个内置的扩展解决scheme,可以让您在发生热点时增加/移动热点,并且还可以充分利用您的资产。