跨互联网负载平衡的 Linux 服务器?

Lin*_*nut 6 linux centos load-balancing distributed-computing apache-2.2

我正在研究设置由三个 CentOS 5.4 机器组成的负载平衡服务器解决方案。这些盒子中的两个将位于一个设施中,而第三个将位于不同的设施中。

我目前正在努力设置 heartbeat、ldirectord、ipvsadm 以对机器进行负载平衡,但我不确定它是否可以使用

我不太熟悉所有这些工作背后的细节,但是当这些服务器不在同一个 LAN 上时,负载平衡是否能正常工作?我不确定 heartbeat 是否使用 SNMP 发送信号,它只能在 LAN 上工作。有没有人尝试过这个或找到不同的解决方案?

War*_*ner 8

这是一个很大的话题,很快就会变得复杂。该CAP定理是一个很好的起点,因为它确定了必须进行更高层次的选择。

当您处理编写繁重的 Web 应用程序时,在保持数据完整性的同时在 Internet 上分配负载变得更加困难。以读取为中心的应用程序(搜索!)更容易分发,因为您不必担心写入数据的后勤工作。

ipvs允许 Linux 本质上成为第 4 层交换机。我在第 2 层(ARP/以太网 - 链路层)上使用它取得了最大的成功,这将是我的第一选择,但是将LVS-Tun 之类的东西用于没有广播层的连接。注意,ipvsadm 是 ipvs 的用户空间工具,ldirectord 是管理 ipvs 资源的守护进程。

心跳已经有效地被心脏起搏器成功了。要监视其他服务器,必须有多个链接。服务器之间没有串行或冗余物理连接的风险要大得多。甚至两个站点之间的心跳监控器的多个物理上不同的 Internet 连接也必然会中断。这就是数据风险发挥作用的地方,因为自动故障转移可能会因裂脑而导致数据损坏。没有理想的方法来减轻这种风险。

您可以在故障转移过程中注入更多逻辑。例如:

如果路径 1 已关闭,路径 2 已关闭,则此进程未运行,而我无法执行此操作——然后进行故障转移。

这降低了风险,但即便如此,仍然不一定能够在短距离内物理连接服务器。

对于静态内容,可以轻松地使用内容分发网络

使用Round Robin DNS可以完成简单的负载平衡和故障转移,这更容易出错。

边界网关协议是一种可以在网络层实现高可用性的网络协议。

最终,有了足够的资金(时间/资源),就可以开发出合适的 SLA 来实现高度的可用性。您的预算将是您的最终约束。定义您的要求,然后看看您可以在预算范围内完成什么,因为会有妥协。

我经常发现,至少在编写繁重应用程序的情况下,在同一物理前提下实现高可用性和自动故障转移更有意义。作为灾难​​恢复计划和 SLA 的一部分,将手动故障转移过程转移到物理上独立的站点,这样既可以保持数据完整性,又可以保持优质的服务水平。