我在 1 个位置有 20 台服务器,我想实现负载平衡。无论如何,这个数字最多可以达到 100 台。有没有什么已知的方法可以做到这一点?我还想有某种机制,当客户查询 service.example.com 等时,他将继续使用同一台服务器,直到机器因故障而退出集群。客户端每分钟进行一次 DNS 查询,我们假设自上而下的 DNS 记录 TTL 为 30-60 秒,而其他记录的 TTL 可能为 24 小时左右,因此每个会话在初始查询后最多可以有效 24 小时,然后客户将切换到另一台服务器。
我发现 L4-L7 负载均衡器相当没用,因为我认为我只能使用 DNS。
这些协议是仅基于二进制的 TCP 连接以及 HTTP 连接。
我认为对于二进制连接(没有任何协议),我可以在 DNS 上使用循环,因此每次我查询 DNS 时,我都会得到不同的响应。
对于 HTTP,我不太清楚。我可能放的是 HAProxy,但对于 DNS,我不太清楚。
我曾经考虑过以下方法。将客户发送到某个“master.example.com”,这是一个仅进行重定向的 HTTP 服务器,它将生成具有唯一 ID 的 FQDN,这意味着它就像一个会话 ID。这样,这个 FQDN 将始终解析为相同的 IP 号码,并且只能用于查询它的 IP,在接下来的 24 小时内或永远,直到服务器关闭。
因此它看起来如下:
http://redirect.example.com/resource => http://67hkkdbvh.example.com/resource
现在会话如下所示:
1st minute: http://67hkkdbvh.example.com/resource/1 TTL 60s
2nd minute: http://67hkkdbvh.example.com/resource/2 TTL 60s
如果67hkkdbvh将要死掉,客户就再次请求重定向。
现在我不确定如何使用 HAProxy 来帮助解决这个问题???
答案1
当然你可以使用 DNS,但我更喜欢使用适当的负载平衡器(我使用 Zeus Traffic Manager(现称为 Riverbed Stingrays)和 Cisco ACE),它们不仅可扩展性好,而且您可以设置它们来探测实际的服务器响应,而不仅仅是 ping 或什么都不做,因此您可以在不进行任何更改的情况下将它们停止服务。不过不是免费的。
答案2
听起来您想复制负载均衡器的确切工作方式,所以真正的问题是:负载均衡器做什么/不做什么您想要/不想要什么?