![nginx 粘性会话/带有 Socket.io 的 ip_hash](https://linux22.com/image/571551/nginx%20%E7%B2%98%E6%80%A7%E4%BC%9A%E8%AF%9D%2F%E5%B8%A6%E6%9C%89%20Socket.io%20%E7%9A%84%20ip_hash.png)
我将使用 nginx 在不同的盒子上对两个 node.js/Socket.io 实例进行负载平衡,并运行一个简单的通知服务,为新客户端提供追溯事件。
我认为 websocket 连接类型(主要的连接方式)不会有任何问题,因为维持的连接不需要会话(除了重新连接,这并不会让我太担心)。
然而,轮询回退方法会出现问题,因为它们依赖于客户端会话,而使用标准循环负载平衡,下一次轮询有 50% 的可能性会出现在新客户端中。
对我来说,让负载均衡器使用以下方式进行一些半智能路由比在两个盒子之间同步会话更有意义:ip_hash指令或nginx-粘性模块。
ip_hash 似乎可以完成这项工作,但我发现它在移动客户端上存在潜在问题,这些客户端要么在 3G 上交换 IP 地址,要么在移动网络和 WiFi 之间切换,从而改变 IP 地址。
我有几个与此相关的问题;如果你能回答的话就太好了……
- ip_hash 是否有任何类型的生命周期,或者 IP 地址是否会永久分配给后端实例?
- 有人可以分享使用 nginx 负载平衡与 Socket.io 和/或移动客户端的经验/建议吗?