多个 Nginx 服务器是否使用 ip_hash 指令将同一个 IP 地址负载平衡到同一个后端?

多个 Nginx 服务器是否使用 ip_hash 指令将同一个 IP 地址负载平衡到同一个后端?

我有两台独立的 Nginx 机器。域名使用循环 DNS 并有两个 A 记录,两个前端 Nginx 服务器各一个。

两个 Nginx 服务器都使用ip_hash指令并代理请求到相同的后端服务器。

前往第一个 Nginx 服务器的 IP 地址是否总是会被路由到与前往另一个 Nginx 服务器的相同 IP 地址相同的后端服务器?

这可能会有帮助:nginx 针对 ip_hash 粘性会话使用哪个 IP?

答案1

Nginx 服务器彼此之间没有联系,因为它们有自己的 ip_hash 表。因此,特定服务器将根据自己的 ip_hash 池将流量路由到后端。前端 Nginx 服务器之间的任何一致性都完全是偶然的。

现在实际上,这可能不是什么大问题,因为客户端的 DNS 不太可能在会话期间发生变化。因此,他们将访问相同的前端服务器并被路由到相同的后端服务器。

另一种方法是使用 HAProxy 之类的东西,它可以平衡多个指标,例如作为 URL 参数。您的应用程序可以设置一个参数来确保客户端被路由到同一个后端。当然,最好使用分布式工具在后端规范化数据,但这对于传统应用程序来说可能具有挑战性。

答案2

根据文档:

哈希的密钥是 C 类网络地址或客户端的整个 IPv6 地址。

因此,从理论上来说,这应该是可行的。

另一个可能出现的问题是您的某个后端发生故障。Nginx 不会对客户端接下来会访问哪个后端做出任何承诺。

但是,是的,HAProxy 非常好。

相关内容