我在两台机器上的基于 Go 的 docker 服务前面运行了一个弹性负载均衡器。每次我重新启动 Go 服务时,一些客户端的初始连接需要几分钟才能失败并重试,最终可以正常工作。这不是健康检查(加起来大约 1 分钟),奇怪的是它似乎是通过机器或会话进行的。
此时我的空闲超时设置为 1 秒。
因此,例如,在健康检查良好之后:
- 我将用 chrome 刷新页面,它会立即加载
- 我将尝试从同一台计算机卷曲页面,它会挂起(我不会在服务器日志中看到访问权限)
- 我将尝试卷曲单个服务,它会立即运行
- 我将尝试从移动客户端连接,但它超时
- 我将从另一台计算机卷曲,它可以工作
我在这里错过了什么吗?我没有启用粘性会话,在我看来,这些会话中的每一个都应该立即工作。ELB 连接是否存在某种基于客户端的限制?
在这种特殊情况下,问题在于弹性负载均衡器被设置为在多个子网中运行,并且某些子网无法公开访问,因此某些请求被路由到错误的 IP。
混乱的出现是因为我们误解了 ELB 上的子网设置的含义。
所以检查你的子网!