我在两个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]
但是如果我从健康的实例卷曲同一个文件>不健康的事实,我的不健康'实例反应良好。
答案 0 :(得分:7)
在与Google Compute Engine团队联系后,我恢复了工作。 GCE VM上有一个需要在引导时运行的服务进程,并在VM处于活动状态时继续运行。该过程名为google-address-manager。它应该在0-6的运行级别运行。出于某种原因,此服务已停止,并且在我的某个VM启动/重新启动时无法启动。手动启动服务。以下是我们确定错误的步骤:(这是Debian VM)
sudo ip route list table all
这将显示您的路线表。在表中,应该有一个到Load Balancer Public IP的路径:
local lb.pub.ip.addr dev eth0 table local proto 66 scope host
如果没有,请检查google-address-manager是否正在运行:
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池是健康的