我正在考虑为客户的网站创建 HA Linux 机器。我有哪些主要选择,或者在哪个地方/文章可以找到更多信息?
如果它是一张单一图像的话我就会非常喜欢,这样现有的软件就可以正常工作了。
任何帮助均感激不尽。
谢谢!
答案1
您有很多选择。具体选择哪种取决于您的网站是如何编码的。
紧耦合、单一状态
由于……原因,此网站只能运行一个实例。出于某种原因,同时运行两个实例是一个非常糟糕的主意。这种网站很少见。
CAP 定理:整个系统的一致性至关重要,根本不需要分区容忍,这使得可用性成为首要的工程目标。
紧密耦合,每个会话单一状态
只有当用户一直与同一个网站互动时,该网站才能正常运行。如果他们访问了错误的服务器,事情就会出错。
CAP 定理:用户会话需要严格的一致性,但系统不需要。具有一定的分区容忍度,因为故障期间丢失会话仍会降低服务质量,但整个系统仍可生存。
松散耦合,状态不重要
最具可扩展性的选项,此类网站会将会话状态保存在数据库层(如果需要保存状态)。访问错误的服务器没有关系,因为 Web 服务器只会访问数据库来获取状态。
CAP 定理:用户会话对松散一致性感到满意,分区容忍度非常高,这意味着可用性至关重要。
单状态是到目前为止最难实现 HA,这就是为什么网站几乎从未为此编码的原因。它只需要一个数据库或文件集和一个 Web 服务器,并在 HA 服务器成员之间进行复制或卷传递,以便在第一个服务器死机后另一个服务器可以接手。工程设计非常棘手,通常将网站重新编码为单状态每个会话应用程序更容易,这样问题就容易得多。
但如果你别无选择,你唯一的主要选择就是像心跳。将一组服务器整合在一起,配置文件和数据库复制,并设置故障转移规则。这并不容易。
单一系统映像不适用于网站,因为创建高性能和高可用性系统的难度非常高。SSI 系统背后有大量工程设计,以确保单一 IPC 空间和严格的系统级一致性,这往往会使 Web 服务变得非常非常慢。它最适合用于需要物理节点之间这种程度的集成的系统,而 Web 服务不是这样的系统。它的分区容错性非常非常差,这使得 SSI 成为糟糕的 HA 解决方案。它不是 HA 的捷径。使用集群会为您提供更好的服务。
每个会话单一状态通常通过创建多个 Web 服务器并在其前面放置负载均衡器来处理,例如哈普罗西、AWS 弹性负载均衡器(埃尔布) 或 F5 BigIP 等硬件系统。它们配置有粘性会话每个用户会话都发送到单个服务器。当一个服务器挂掉时,其他服务器会接管;任何在下行服务器上有会话的用户都会重新启动,这就是问题所在。对网站进行编码,这样会话中断就不会造成破坏。
国家不重要处理方式与单状态会话相同,但关键区别在于没有粘性会话。负载平衡器配置为将每个请求提供给池中的任何服务器,而 Web 服务器则根据每个请求从数据库提供状态。当一台服务器死机时,没有人会注意到。