Google Compute Engine 运行状况检查失败



我在两个 VM 实例上有一个 node.js 应用程序,我正在尝试通过网络负载平衡对其进行负载平衡。 为了测试我的服务器是否已启动并提供服务,我的应用程序内部侦听端口上有运行状况检查请求"/health.txt"。我有两个实例配置相同,使用相同的标签、防火墙规则等,但运行状况检查连续失败到一个实例,我可以在我的内部网络上或从外部使用 curl 进行检查,并且测试在两个实例上工作正常,但网络负载均衡器始终报告一个实例关闭。

使用了 ngrep 并从健康实例运行,我看到:

T 169.254.169.254:65374 -> my.pub.ip.addr:3000 [S]
#
T my.pub.ip.addr:3000 -> 169.254.169.254:65374 [AS]
#
T 169.254.169.254:65374 -> my.pub.ip.addr:3000 [A]
#
T 169.254.169.254:65374 -> my.pub.ip.addr:3000 [AP]
GET /health.txt HTTP/1.1.
Host: my.pub.ip.addr:3000.
.
#
T my.pub.ip.addr:3000 -> 169.254.169.254:65374 [A]
#
T my.pub.ip.addr:3000 -> 169.254.169.254:65374 [AP]
HTTP/1.1 200 OK.
X-Powered-By: NitroPCR.
Accept-Ranges: bytes.
Date: Fri, 14 Nov 2014 20:00:40 GMT.
Cache-Control: public, max-age=86400.
Last-Modified: Thu, 24 Jul 2014 17:58:46 GMT.
ETag: W/"2198506076".
Content-Type: text/plain; charset=UTF-8.
Content-Length: 13.
Connection: keep-alive.
.
#
T 169.254.169.254:65374 -> my.pub.ip.addr:3000 [AR]

但是在GCE声明不健康的情况下,我看到这个:

T 169.254.169.254:61179 -> my.pub.ip.addr:3000 [S]
#
T 169.254.169.254:61179 -> my.pub.ip.addr:3000 [S]
#
T 169.254.169.254:61180 -> my.pub.ip.addr:3000 [S]
#
T 169.254.169.254:61180 -> my.pub.ip.addr:3000 [S]
#
T 169.254.169.254:61180 -> my.pub.ip.addr:3000 [S]

但是,如果我从运行状况良好的实例>运行状况不佳的实例中卷曲相同的文件,则我的"不正常"实例响应正常。

在与Google Compute Engine团队联系后,我恢复了工作。GCE 虚拟机上有一个服务进程,需要在启动时运行,并在虚拟机处于活动状态时继续运行。该过程被命名为google-address-manager。它应该在运行级别 0-6 运行。由于某种原因,此服务已停止,并且在我的某个 VM 启动/重新启动时不会启动。手动启动服务已奏效。 以下是我们确定问题所在的步骤:(这是一个 Debian VM)

sudo ip route list table all

这将显示您的路由表。在表中,应该有一条通往负载均衡器公共 IP 的路由:

local lb.pub.ip.addr dev eth0  table local  proto 66  scope host

如果没有,请检查谷歌地址管理器是否正在运行:

sudo service google-address-manager status

如果未运行,请启动它:

sudo service google-address-manager start

如果启动正常,请检查路由表,现在应该有一条到负载均衡器 IP 的路由。您也可以手动添加此路由:

sudo /sbin/ip route add to local lb.pub.ip.addr/32 dev eth0 proto 66

我们还没有解决为什么地址管理器停止并且在启动时没有启动,但至少LB池是健康的

相关内容

最新更新