【问题标题】:Google Load-balancer randomly failing requests to backend谷歌负载均衡器随机失败的后端请求
【发布时间】:2016-09-22 12:01:40
【问题描述】:

我已经完成了简单的设置:
后端(网站): 1 台安装了 tomcat 并在 8080 上提供服务的机器。
tomcat的webapps文件夹有两个文件夹

1 withGoogleRule1
       |--test.html
2 withoutGoogleRule1
       |--test.html

现在我有一个具有以下设置的 google-load-balancer 设置

现在后端机器direct ip 是http://104.197.37.171:8080/withoutGoogleRule1/test.html

负载均衡器网址是 http://107.178.240.39:8080/withoutGoogleRule1/test.html

问题:

无论我们刷新多少次直接机器的url,所有请求总是正确的。

但是,如果您使用负载均衡器访问 url,5 次中有 1 次会显示

The requested URL /withoutGoogleRule1/test.html was not found on this server.

详情:

Youtube Video显示请求失败

PS:

实例组详情:

LoadBalancer 后端详情

【问题讨论】:

  • 您能否详细说明“withGoogleRule1”和“withoutGoogleRule1”的含义?你来这里的目的是什么?我很困惑,您为 withGoogleRule1 配置了 URL 映射,但您试图在没有 GoogleRule1 的情况下访问。
  • 您可以检查您的 Tomcat 日志以确保 404 是由自身返回还是由负载均衡器返回。
  • 您的实例组是什么类型的?托管还是非托管?
  • 我注意到在您的实例组和后端服务中,您将 http 映射到 80 和 8080。在运行状况检查中,您使用了端口 80。
  • "withGoogleRule1" 和 "withoutGoogleRule1" 仅用于测试目的.. "withGoogleRule1" 是在 google "host and path" 中添加的 url .... "withoutGoogleRule1" 是一个 url,它是未添加到谷歌的主机和路径部分。

标签: tomcat load-balancing google-compute-engine google-cloud-platform


【解决方案1】:

如果您的 Tomcat 仅在 8080 而不是 80 上侦听,则实例组、后端服务配置存在问题。特别是,健康检查被配置为检查端口 80,这会使负载均衡器认为后端服务不健康并返回 404。

此外,您可以查看 Tomcat 日志以查看收到了多少请求以及响应是什么。

编辑:由于您确认另一个进程正在侦听 80。404 NOT FOUND 的原因可能是,请求在内部分派到 80。您可以通过在 80 和 8080 上托管一个页面来验证这一理论,例如/a.html,但内容不同,一个是“我是80”,另一个是“我是8080”。这样,您就可以确切地知道发生了什么。检查在 80 上监听的进程的日志也有帮助。

【讨论】:

  • 感谢您指出......但我看到了一个奇怪的行为......我在端口 80 上有一个 httpd 服务器,所以实例总是健康的......并且上面提到的行为继续...... .next 我只是从“编辑实例组”部分中删除了 80,现在它不会随机失败请求.. 可能是什么原因
  • 你是对的 .. 我跟着你的实验,现在当我刷新它时有时会显示“im 80”有时会显示“im 8080”......所以基本上结论是后端服务发送请求使用实例组的“命名端口”部分中提到的所有端口进行后端...对吗?...我在负载均衡器中编辑后端部分时找不到任何解释命名端口部分和端口字段的文档...我会问另一个关于命名端口的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2017-01-16
  • 1970-01-01
  • 2016-08-06
  • 2021-03-06
  • 2016-04-01
相关资源
最近更新 更多