我们有以下服务器:
A. 1 台运行 MySQL 的 Web 服务器(论坛)。B
. 1 台运行 RT 和 Postgres 的 Web 服务器。C
. 1 台运行自家开发的应用程序的 Web 服务器,以 MonetDB 作为后端
现在,我们当然想通过在每个 Web 服务器中添加一个额外的服务器来增加一点可靠性,以防一台服务器死机等。但最好的、相对便宜的方法是什么呢?
- 各自获取一个额外的服务器,并在每种情况下使用适当的技术复制数据库?MySQL 复制用于 A,Slony 等用于 B,而我真的不知道如何复制 MonetDB,但我想这是可能的。
我不喜欢这个的原因:同步问题可能导致数据损坏,即临时电源故障可能导致数据写入从服务器,然后主服务器恢复,然后复制中断。在 Slony 的情况下,你甚至不能这样做,你必须先将从服务器提升为主服务器,等等,据我所知。
我不喜欢的另一件事是必须手动完成所有这些工作并弄清楚谁现在在做什么以及同步事情等等。
2. 获取 2 台具有足够存储空间的服务器并在其上设置 DRBD。
由于它们将拥有一个共享 IP,因此请将所有数据库(例如 MySQL、Postgres 和 Monet)放在 DRBD 存储上。DRBD 的好处是,我们不会有单点故障,因为即使我们丢失了集群的一部分,其他服务器也可以接管,因此它的弹性要大得多。我的理解是,此级别以上的 Web 服务器可以简单地进行故障转移和恢复,而无需担心复制、同步等。
3.虚拟机?
使用虚拟机进行此类设置的最佳做法是什么?
答案1
就高可用性而言,虚拟机不会给您带来太大的帮助,尽管它们可以用于简化整合。
如果没有两个重要的数据点,您的问题就无法得到回答:您的预算和负载。如果您的预算有限,但负载足够低,您可以轻松地将所有这些转移到主动/被动设置的两台服务器上。
如果您的预算允许,您可能需要考虑购买一个 SAN(最好是两个,以实现高可用性)。在这种情况下,您仍然可以将数据库(可能虚拟化)与应用程序放在同一台服务器上,但将数据写入 SAN。数据库大多受 IO 限制。
另一种方法是为数据库建立一个双节点故障转移集群,并通过 DRBD 复制数据库分区,这种方法效果很好。但是,您需要确保每个节点都有自己的磁盘;为此,我建议使用带有 6 个磁盘和电池支持的硬件 RAID 的 2U 机器。
如果您拥有更多流量但仍想保持低预算,您可以尝试以下操作:
- 采用主动/被动设置并由 DRBD 复制的 2x DB 服务器
- 2 个运行应用程序的前端服务器,均处于活动状态
- 在前端的 VIP 上运行软件负载均衡器,其中只有一个会接收传入连接,但它会将它们重新分派到本地或其他节点。我建议哈普罗西
但要注意负载;如果在高峰使用时其中一个节点出现故障,您将会遇到很多麻烦,但这可能是处理偶尔出现的 slashdotting 的好方法。
答案2
不要使用 drbd 进行 mysql 故障转移。使用主主复制并将 haproxy 放在它们前面以平衡 mysql 连接并提供故障转移。然后将心跳放在 haproxy 服务器上。使用负载平衡完成故障转移。
drbd 非常适合运行 nfs 等 Web 文件。
答案3
对于“万一”您的主系统发生故障而不是为了平衡/频繁故障转移的解决方案,#2 和 #3 的组合会很好用。获取一个具有合理资源的盒子来存储和运行每个主系统的虚拟机。使用 DRBD 简化数据复制。对于额外的功能,您可以加入心跳以实现自动故障转移 - 或者不加入。当然,复制 != 备份。
答案4
为什么不使用 VMWare/虚拟化来创建一个双服务器+ DB 集群,每个集群运行您所有的各种 DB,并创建一个第二个双服务器+ Web 服务器集群,每个集群为您所有的各种 Web 应用程序提供服务。
这样,您就需要尽可能少的服务器,拥有一个内置的扩展解决方案,可以让您在热点出现时扩大/移动热点,并充分利用您的资产。