负载均衡器:运行状况检查无故失败

时间:2016-04-14 12:05:04

标签: google-compute-engine

我正在尝试在GCE上为2个Tomcat服务器设置负载均衡器,在2个VM(vm-1vm-2)上单独运行。两者都在端口80上侦听,网络防火墙规则允许来自任何源(80)的端口0.0.0.0/0上的流量。 现在,我创建了一个名为vm-group的这些VM的实例组,并设置了一个名为http的命名端口,指向端口80

我也在端口80上创建了一个运行状况检查,指向/<app_name>/<health_url>,如果该应用运行正常,则会报告HTTP 200。

然后,我使用this video中的说明设置HTTP负载均衡器。设置完成后,我发现负载均衡器报告0/2个实例是健康的,这意味着运行状况检查失败。

当我手动点击运行状况检查网址时,他们会返回HTTP 200 - 所以我的应用是健康的。

现在,我不确定为什么负载均衡器会将虚拟机报告为运行状况不佳并且无法路由请求。我该如何进一步调试?

修改:我确认google-address-manager正在运行,如this question中所述。

5 个答案:

答案 0 :(得分:4)

我有同样的问题。另外,使用gcloud工具时:

gcloud compute backend-services get-health mybackendservice

我得到了

- healthState: UNHEALTHY
    instance: https://www.googleapis.com/compute/v1/projects/myproject/.../instances/mycluster-4gim
    port: 8000

问题是在为后端服务定义的运行状况检查中使用了http(而不是https)和端口号80.无法找到该差异的解释。

答案 1 :(得分:4)

您是否已将google的运行状况检查程序添加到防火墙列表中:130.211.0.0/22

答案 2 :(得分:2)

原来,端口号取自“实例组”设置(“端口名称映射”部分)。但是运行状况检查仍然不起作用...将检查结果与包含与实例组相同的实例的目标池进行比较

gcloud compute target-pools get-health targetpoolname

---
healthStatus:
- healthState: HEALTHY
  instance: https://www.googleapis.com/compute/v1/projects/inst
  ipAddress: an.ip.addr.es
kind: compute#targetPoolInstanceHealth
---

...

答案 3 :(得分:0)

如果您的应用程序/服务能够正确响应,并且可以确保所创建的运行状况检查正确无误,那么应该进行其他一些检查,验证和修复的操作,以确保GCP上的负载均衡器检查失败。

  • 确保附加到相关后端实例的防火墙规则策略中允许GCP LB健康状况检查器子网,即 130.211.0.0/22 35.191.0.0/16 / li>
  • 确保在LB上定义为后端的服务不仅绑定到实例的IP地址,因为在这种情况下,它将无法回答有关负载平衡器外部地址的查询。通过将其绑定到 0.0.0.0
  • ,使您的服务响应任何地址
  • 确保服务 google-address-manager 已启动并在相关的后端实例上运行。地址管理器的工作是为实例配置网络设置,包括负载平衡IP地址的设置,并将适当的路由添加到实例路由表以与负载均衡器进行通信。

答案 4 :(得分:0)

确保防火墙规则明确允许VM节点和GCP防火墙上的tomcat侦听端口。

  1. 要在基于Redhat / Centos的发行版上通过iptables或firewall-cmd显式打开VM节点端口。

  2. 要显式打开GCP防火墙端口,请使用指定的端口创建入口防火墙规则,请注意规则分配,在GCP中,它称为“目标” https://cloud.google.com/vpc/docs/firewalls#rule_assignment,在我的情况下,我忘记分配创建的防火墙规则分配,也就是将目标标签与VM节点相关联,防火墙规则在被分配之前不会生效(将目标标签与目标VM关联,请参见下文)。在将标签与防火墙规则固定/关联之后,中提琴!一切正常。 <code>Network tags</code> in VM Instance detail page