我有两台独立的 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 非常好。