GCE 网络负载均衡器在一段时间不活动后挂起
GCE Network Load Balancer Hangs after period of inactivity
我正在使用 "Network Load Balancer" 在 Google 云上设置一项新服务。我在安装过程中只使用一台后端服务器。在一段时间不活动后,对负载平衡器地址的第一个请求似乎没有传送到后端服务器。
- 负载均衡器报告后端服务器健康。
- 我在后端服务器访问日志中看到健康检查请求每 5 秒进入一次服务器。
- 如果我直接向后端服务器的健康检查发出请求URL,我会得到成功的响应。
- 如果我通过负载均衡器发出请求进行健康检查 URL(或任何其他 URL),浏览器将无限期挂起,并且似乎没有向后端服务器。
- 如果我随后刷新浏览器,页面加载正常,并且进一步的请求继续正常加载,直到一段时间不活动(几小时?)过去。
这在生产环境中似乎不是问题,但像这样的任何无法解释的问题都会让我对使用 GCE 负载均衡器进行实时站点感到不舒服。
这个问题一半是帮助请求,一半是错误报告。这是已知问题还是我做错了什么?
感谢您的帮助。
更新
回顾服务器日志,我看到挂起的请求确实出现在访问日志中,但直到我刷新浏览器并且它显示 0 秒响应时间。
这是两个请求。第一个是挂起的请求。二是刷新。
173.51.253.242 - devuser [09/May/2015:19:15:27 +0000] "GET /api/ HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" "-"
173.51.253.242 - devuser [09/May/2015:19:15:27 +0000] "GET /api/ HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" "-"
注意两个请求在同一秒内进入(当我刷新时),失败的请求的响应代码为 499,响应时间为 0。499 表示连接已被客户端关闭,因此我认为这些表示请求直到我点击刷新时负载均衡器才启动,此时它与后端服务器建立了两个连接。
用实际答案更新这个,因为 mensi 上面的评论似乎已经找到了问题的根源。
为平衡的主机添加 TCP keepalive 解决了这个问题。
我正在使用 "Network Load Balancer" 在 Google 云上设置一项新服务。我在安装过程中只使用一台后端服务器。在一段时间不活动后,对负载平衡器地址的第一个请求似乎没有传送到后端服务器。
- 负载均衡器报告后端服务器健康。
- 我在后端服务器访问日志中看到健康检查请求每 5 秒进入一次服务器。
- 如果我直接向后端服务器的健康检查发出请求URL,我会得到成功的响应。
- 如果我通过负载均衡器发出请求进行健康检查 URL(或任何其他 URL),浏览器将无限期挂起,并且似乎没有向后端服务器。
- 如果我随后刷新浏览器,页面加载正常,并且进一步的请求继续正常加载,直到一段时间不活动(几小时?)过去。
这在生产环境中似乎不是问题,但像这样的任何无法解释的问题都会让我对使用 GCE 负载均衡器进行实时站点感到不舒服。
这个问题一半是帮助请求,一半是错误报告。这是已知问题还是我做错了什么?
感谢您的帮助。
更新
回顾服务器日志,我看到挂起的请求确实出现在访问日志中,但直到我刷新浏览器并且它显示 0 秒响应时间。
这是两个请求。第一个是挂起的请求。二是刷新。
173.51.253.242 - devuser [09/May/2015:19:15:27 +0000] "GET /api/ HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" "-"
173.51.253.242 - devuser [09/May/2015:19:15:27 +0000] "GET /api/ HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" "-"
注意两个请求在同一秒内进入(当我刷新时),失败的请求的响应代码为 499,响应时间为 0。499 表示连接已被客户端关闭,因此我认为这些表示请求直到我点击刷新时负载均衡器才启动,此时它与后端服务器建立了两个连接。
用实际答案更新这个,因为 mensi 上面的评论似乎已经找到了问题的根源。
为平衡的主机添加 TCP keepalive 解决了这个问题。