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