如何制作冗余负载均衡器?

我了解负载平衡器的目的是平衡服务器之间的负载并跟踪实例的健康状况等。但是,如果负载平衡器本身失败呢? 你如何设置冗余负载平衡器? (负载平衡负载平衡器?)

我可以看到DNS健康检查如何有用,但显然存在主要的延迟问题,不是吗?

假设您没有使用任何第三方服务,如AWS ELB或类似的东西。 如果你只是使用Nginx,该怎么办?

    有几种方法可以实现负载均衡器的HA(高可用性) – 或者在任何服务方面。 让我们假设你有两台机器,IP地址:

    • 192.168.100.101
    • 192.168.100.102

    用户连接到一个IP,所以你想要做的是从特定的盒子分离IP – 例如创build虚拟IP。 该IP将是192.168.100.100。

    现在,您可以selectHA服务来处理IP地址的自动故障转移/故障恢复。 一些最简单的unix服务是鲤鱼和keepalived,一些更复杂的是例如RedHat Cluster Suite或Pacemaker。

    让keepalived为例 – 两个keepalived服务 – 每个运行在自己的盒子 – 并他们一起沟通。 这种交stream通常被称为心跳。

    | VIP | | | | Box A | ------v^-----------v^---- | Box B | | IP1 | | IP2 | 

    如果一个keepalived停止响应(无论出于何种原因服务停止,或者popup或closures) – keepalived在其他方框将通知错过的心跳,并假定其他节点已经死亡,并采取故障切换操作。 我们案件中的这个行为将会引起浮动IP。

      | VIP | ------------------ -------------- | Box B | | IP2 | 

    在这种情况下可能发生的最糟糕的情况是客户会话丢失,但他们将能够重新连接。 如果你想避免这种情况,两个负载均衡器必须能够在它们之间同步会话数据,如果他们能这样做,用户将不会注意到任何事情,除非可能会造成短暂的延迟。

    这种设置的另一个缺陷是脑裂 – 当两个盒子在线但链接被切断时,两个盒子都会产生相同的IP。 这通常通过某种防护机制(SCSI预留,IPMI重新启动,智能PDU断电等)来解决,或者需要大部分集群成员活动才能启动服务的奇数个节点。

     | VIP | | VIP | | Box A | | Box B | | IP1 | | IP2 | 

    更复杂的集群pipe理软件(如Pacemaker)可以移动整个服务(例如:停止在一个节点上并在另一个节点上启动) – 这就是HA可以实现数据库服务的方式。

    另一种可能的方法是,如果您正在控制负载平衡器附近的路由器,则需要使用ECMP。 这种方法还使您能够水平缩放负载平衡器。 这在您的两台机箱中的每一台都与您的路由器交谈时起作用。 每个盒子必须通告虚拟IP(192.168.100.100),路由器将通过ECMP负载平衡stream量。 如果一台机器死亡,它将停止对VIP进行广告,这将阻止路由器向它发送stream量。 只有在这个设置中你必须要关心的是如果负载均衡器本身死亡,则停止广告IP。

    使用Nginx作为你的负载平衡器应该允许你通过改变你的configuration来检测一个没有响应的超时时间,

    nginx自动故障转移负载均衡

    理论上,如果你有一个高可用性环境,多个负载均衡器集群应该允许维护服务,如果一个失败。

    希望这可以帮助。

    硬件负载平衡器已经支持多年的“主动/被动”或“主动/主动”设置,在两种情况下,它们都是从1/2层的angular度并行设置的。主动/被动使用监视/保持活动机制,主动/主动可以以多种方式实现。 要在前端显示为单个IP,两个或更多个平衡器可能只要全部或两者在线就可以执行如下操作:

    • 当客户端在同一networking上时,基于具有源MAC或IP地址,select性地应答对共享IP的ARP请求
    • 彼此协商处理给定的新的TCP连接的stream量
    • 让重复或错误的第3-7层stream量发生鲁莽,并依靠客户端/路由器TCP堆栈进行sorting

    然后,在与伙伴设备的通信丢失时,将其模式更改为接受全部或更多的通信。

    在后端:

    • 每个平衡器在正常操作中可能只使用给定的应用服务器子池
    • 或者,重复的请求也可以简单地在这里生成…
    • 或者,平衡者之间的谈判可能会完成