使用 Socket.io 的 nginx 粘性会话/ip_hash

bdl*_*dls 5 nginx load-balancing sticky-sessions node.js

我将在不同的机器上对两个 node.js/Socket.io 实例进行负载平衡,nginx 运行一个简单的通知服务,并为新客户端提供追溯事件。

我认为 websocket 连接类型(这将是连接的主要方法)不会有任何问题,因为维护的连接不需要会话(除了重新连接,我不太担心) .

但是,轮询回退方法会存在问题,因为它们依赖于客户端会话,并且使用标准轮询负载平衡(在这种情况下)下一次轮询将作为新客户端出现的可能性为 50%。

对于我来说,让负载均衡器使用ip_hash指令或nginx-sticky-module做一些半智能路由,而不是在两个盒子之间同步会话是有意义的。

ip_hash 似乎可以完成这项工作,但我可以看到它与移动客户端存在潜在问题,这些客户端要么在 3G 上交换 IP 地址,要么在移动网络和 WiFi 之间发生变化,从而改变 IP 地址。

我有几个与此相关的问题;如果你能回答,那就太好了...

  1. ip_hash 是否有任何生命周期,或者 IP 地址是否永久分配给后端实例?
  2. 任何人都可以分享在 Socket.io 和/或移动客户端上使用 nginx 负载平衡的经验/建议吗?