Answers:
有两种方法可以实现负载均衡器的HA(高可用性)-或就任何服务而言。假设您有两台具有IP地址的机器:
用户连接到IP,因此您要做的是将IP与特定框分开-例如创建虚拟IP。该IP为192.168.100.100。
现在,您可以选择HA服务,该服务将负责IP地址的自动故障转移/故障回复。UNIX的一些最简单的服务是(u)鲤鱼和keepalived,一些更复杂的服务例如是RedHat Cluster Suite或Pacemaker。
让我们以保持活力为例-两个保持活力的服务-每个服务都在自己的盒子上运行-并且它们相互通信。这种通信通常称为心跳。
| VIP | | |
| Box A | ------v^-----------v^---- | Box B |
| IP1 | | IP2 |
如果一个keepalived停止响应(由于某种原因导致服务中断,或者该框反弹或关闭)-在另一个box上的keepalived将注意到错过的心跳,并假定其他节点已死,并采取故障转移措施。在我们的案例中,该动作将是启动浮动IP。
| VIP |
------------------ -------------- | Box B |
| IP2 |
在这种情况下,最糟糕的情况是客户端失去会话,但它们将能够重新连接。如果要避免这种情况,两个负载平衡器必须能够在它们之间同步会话数据,并且如果它们能够做到这一点,则用户可能不会注意到任何东西,除非可能会中断一小段延迟。
这种设置的另一个陷阱是脑裂-当两个盒子都在线但链接断开时,两个盒子都使用相同的IP。这通常可以通过某种防护机制(SCSI保留,IPMI重新启动,智能PDU停电...)或奇数数量的节点来解决,这些节点要求大多数群集成员都处于活动状态才能启动服务。
| VIP | | VIP |
| Box A | | Box B |
| IP1 | | IP2 |
更复杂的集群管理软件(例如Pacemaker)可以移动整个服务(例如:在一个节点上停止它,然后在另一个节点上启动它),这就是可以实现诸如数据库之类的服务的HA的方式。
另一种可能的方法-如果要在负载均衡器附近控制路由器,则可以利用ECMP。这种方法还使您能够水平扩展负载均衡器。这可以通过两个与BGP对话的路由器中的每一个进行。每个盒子都必须通告虚拟IP(192.168.100.100),路由器将通过ECMP负载均衡流量。如果机器死了,它将停止发布VIP,这将阻止路由器向其发送流量。在此设置中,您唯一需要注意的是,如果负载均衡器本身失效,则停止发布IP。
将Nginx用作负载均衡器,应该可以通过更改配置以检测无响应超时来遵循本文中详细介绍的重定向:
从理论上讲,如果您具有HA环境,则群集的多个负载平衡器应该允许在一个服务出现故障时维护服务。
希望这可以帮助。
硬件负载均衡器支持“主动/被动”或“主动/主动”设置已有多年,在两种情况下,它们都从第1/2层的角度并行设置...主动/被动使用如上所述的监视/保持活跃机制,主动/主动可以以多种方式实现。要在前端作为单个IP出现,两个或多个平衡器可能只要全部/都在线,就可以执行以下操作:
然后,当与对方设备的通信丢失时,将其模式更改为接受所有或更多流量。
在后端: