我有一个特定的分布式(例如,多台机器上的多个组件)服务,应该从外部世界提供。因此,在 LVS 术语中,客户端位于“互联网上”,而真实服务器位于专用网络中。据我了解,使用 LVS 进行设置并不特别困难。
但是(总有一个但是!)私有网络上有一些组件,应该是负载平衡的(实际上,对于这部分我不关心“负载”。我只需要故障转移能力),但他们的客户也是在专用网络上。例如,应用服务器访问队列代理必须经过一个负载均衡器。
我可以使用同一个导演来完成这两项任务吗?显然,它至少有两个网络接口(一个在外部网络上,一个在私有网络上)。
理想情况下,我需要通过 VRRP 为 director 提供冗余(大概是为此使用 keepalived)。
这个设置有意义吗?这样做是正常的吗?也许我最好为仅限内部的流量使用单独的负载均衡器?不过,这有点不受欢迎,因为它会引入至少 2 台不会经常使用的额外机器,因为队列代理接收的流量很少(我只需要故障转移)。
对于内部负载平衡,我已经开始在每个原始服务器上使用 HAProxy 并代理到其他内部服务器。这不是一个很好的负载平衡解决方案,因为它只有请求的部分视图,但可以很好地用于故障转移,而无需设置新的 lb 对/keepalived 或使用面向公众的基础设施。您仍然可以使用循环法或 leastconn 平衡和 maxconn 来减轻峰值影响您的基础设施的其余部分。
这尤其是在尝试为新服务自动设置 lb-pairs 之后开始的。使用该技术一年后,此设置没有出现任何问题。这也允许为每个原始节点推出 LB 更改,而不是弄乱单个对。