我在 1 个位置有 20 台服务器,我想进行负载平衡。这在任何情况下都可以达到 100。有没有已知的方法可以做到这一点?我还想有某种机制,当客户查询例如 service.example.com 时,他将继续使用同一台服务器,直到机器因故障而从集群中取出。客户端每分钟进行一次 DNS 查询,假设自上而下的 DNS 记录 TTL 为 30-60 秒,而其他人可以为 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 来帮助它???
当然,您可以使用 DNS,但我更喜欢使用适当的负载平衡器(我使用 Zeus Traffic Managers——现在称为 Riverbed Stingrays——和 Cisco ACE),它们不仅可以很好地扩展,而且你可以设置它们来探测实际的服务器响应,而不是只是 ping 或什么都没有,因此您可以在不进行更改的情况下停止服务。虽然不是免费的。
听起来您想复制负载均衡器的确切工作方式,所以真正的问题是:负载均衡器做什么/不做什么您想要/不想要的?
您是否尝试查看haproxy?似乎 stackexchange正在使用它。这在 HA 集群中可以是更优雅的解决方案,将为您提供故障转移功能。