She*_*zod 32 nginx load-balancing redundancy load-balance
我知道负载平衡器的目的是平衡服务器之间的负载并跟踪实例健康状况等。但是如果负载平衡器本身出现故障怎么办?如何设置冗余负载平衡器?(负载均衡负载均衡器?)
我可以看到 DNS 运行状况检查如何有用,但显然存在严重的延迟问题,不是吗?
这是假设您没有使用任何第三方服务,如 AWS ELB 或任何类似服务。如果你只是使用说 Nginx 怎么办?
Jak*_*sic 40
有几种方法可以实现负载均衡器的 HA(高可用性)——或者就任何服务而言。假设你有两台机器,有 IP 地址:
用户连接到一个 IP,所以你想要做的是将 IP 与特定框分开 - 例如创建虚拟 IP。该 IP 将是 192.168.100.100。
现在,您可以选择 HA 服务,它将负责 IP 地址的自动故障转移/故障回复。unix 的一些最简单的服务是 (u)carp 和 keepalived,一些更复杂的服务是例如 RedHat Cluster Suite 或 Pacemaker。
让我们以keepalived为例——两个keepalived服务——每个都运行在自己的盒子上——并且它们一起通信。这种通信通常称为心跳。
| VIP | | |
| Box A | ------v^-----------v^---- | Box B |
| IP1 | | IP2 |
Run Code Online (Sandbox Code Playgroud)
如果一个 keepalived 停止响应(服务因任何原因关闭,或者盒子反弹或关闭) - 另一个盒子上的 keepalived 会注意到错过的心跳,并假设其他节点已死,并采取故障转移行动。在我们的案例中,该操作将带来浮动 IP。
| VIP |
------------------ -------------- | Box B |
| IP2 |
Run Code Online (Sandbox Code Playgroud)
在这种情况下可能发生的最坏情况是客户端的会话丢失,但他们将能够重新连接。如果你想避免这种情况,两个负载均衡器必须能够在它们之间同步会话数据,如果他们能做到这一点,用户将不会注意到任何事情,除了可能会中断一小段延迟。
这种设置的另一个陷阱是脑裂——当两个盒子都在线但链接被切断时,两个盒子都带来了相同的 IP。这通常通过某种防护机制(SCSI 保留、IPMI 重启、智能 PDU 断电等)或奇数个节点要求大多数集群成员处于活动状态以启动服务来解决。
| VIP | | VIP |
| Box A | | Box B |
| IP1 | | IP2 |
Run Code Online (Sandbox Code Playgroud)
更复杂的集群管理软件(如 Pacemaker)可以移动整个服务(例如:在一个节点上停止它并在另一个节点上启动它)——这是可以实现数据库等服务的 HA 的方式。
另一种可能的方法 - 如果您控制负载平衡器附近的路由器,则使用 ECMP。这种方法还使您能够水平扩展负载平衡器。这通过您的两个盒子中的每一个与您的路由器进行 BGP 通信。每个盒子都必须通告虚拟 IP (192.168.100.100),路由器将通过 ECMP 对流量进行负载平衡。如果一台机器死机,它将停止通告 VIP,这反过来又会阻止路由器向它发送流量。在此设置中,您唯一需要注意的是,如果负载均衡器本身死机,则停止广告 IP。
归档时间: |
|
查看次数: |
16981 次 |
最近记录: |