我正在尝试在GCE上为2个Tomcat服务器设置负载均衡器,在2个VM(vm-1
和vm-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中所述。
答案 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上的负载均衡器检查失败。
答案 4 :(得分:0)
确保防火墙规则明确允许VM节点和GCP防火墙上的tomcat侦听端口。
要在基于Redhat / Centos的发行版上通过iptables或firewall-cmd
显式打开VM节点端口。
要显式打开GCP防火墙端口,请使用指定的端口创建入口防火墙规则,请注意规则分配,在GCP中,它称为“目标” https://cloud.google.com/vpc/docs/firewalls#rule_assignment,在我的情况下,我忘记分配创建的防火墙规则分配,也就是将目标标签与VM节点相关联,防火墙规则在被分配之前不会生效(将目标标签与目标VM关联,请参见下文)。在将标签与防火墙规则固定/关联之后,中提琴!一切正常。