【发布时间】:2014-12-12 01:19:26
【问题描述】:
我们使用 Nginx 作为 websocket 应用程序的负载平衡器。每个后端服务器都保存会话信息,因此来自客户端的每个请求都必须在同一台服务器上转发。所以我们使用ip_hash 指令来实现:
upstream app {
ip_hash;
server 1;
}
当我们要添加另一个后端服务器时出现问题:
upstream app {
ip_hash;
server 1;
server 2;
}
新连接转到服务器 1 和服务器 2 - 但这不是我们在这种情况下需要的,因为服务器 1 上的负载继续增加 - 我们仍然需要粘性会话,但也启用了 least_conn 算法 - 所以我们的两台服务器接收大致相等的负载。
我们也考虑过使用Nginx-sticky-module,但文档说如果没有可用的粘性 cookie,它将回退到循环默认 Nginx 算法 - 所以它也不能解决问题。
所以问题是我们可以使用 Nginx 结合粘性和最少连接逻辑吗?你知道还有哪些其他负载均衡器可以解决这个问题吗?
【问题讨论】:
-
也许这应该被移到 serverfault 以获得答案?
-
有趣的问题是为什么“服务器 1 上的负载继续增加” - 是不是您的大多数用户都坐在同一个或几个 NAT 后面?在这种情况下,对源 IP 进行哈希处理效率不高,您可以考虑通过
hash指令使用更复杂的密钥,而不是 `ip_hash'。例如,您可能希望将一些用户特定的 URI 部分或参数添加到键... -
有用的答案,但我不确定他们是否回答了最初提出的问题。亚历克斯?
标签: nginx load-balancing reverse-proxy