我试图在GCP上创建TCP / UDP负载均衡器以允许我的服务上的HA,但是我注意到当我创建目标组时,该组中的所有实例都被标记为不健康并且没有被谷歌检查(我已经看过机器日志来检查它)。防火墙是开放的,因为是出于测试目的,所以我确定这不是问题。
我已经使用具有类似检查配置的后端创建了一个HTTP / S负载均衡器,同一台机器被标记为健康,所以这不是该机器的问题(即使现在日志显示谷歌是如何检查的那个例子。
两个检查都是HTTP到端口80,因此我无法查看问题的位置以及两种负载均衡器检查器之间的区别。
此外,我已检查过禁用运行状况检查,但实例仍标记为运行状况不佳,并且流量未发送到任何实例,因此负载均衡器无效。
是否需要任何其他配置来检查实例?
谢谢和问候!!
答案 0 :(得分:1)
当您使用任何Google云负载均衡器时,无需将VM的外部端口暴露在互联网上,只有您的负载均衡器需要能够访问它。
steps to create a TCP load balancer are described here。我发现使用gcloud
并运行命令很方便,但您也可以使用Cloud Console UI来获得相同的结果。
我尝试了以下步骤,它适用于我(您可以轻松修改它以使其与UDP一起使用 - 记住即使使用UDP负载平衡,您仍需要HTTP运行状况检查):
# Create 2 new instances
gcloud compute instances create vm1 --zone us-central1-f
gcloud compute instances create vm2 --zone us-central1-f
# Make sure you have some service running on port 80 on these VMs after creation.
# Create an address resource to act as the frontend VIP.
gcloud compute addresses create net-lb-ip-1 --region us-central1
# Create a HTTP health check (by default uses port 80).
$ gcloud compute http-health-checks create hc-1
# Create a target pool associated with the health check you just created.
gcloud compute target-pools create tp-1 --region us-central1 --http-health-check hc-1
# Add the instances to the target pool
gcloud compute target-pools add-instances tp-1 --instances vm1,vm2 --instances-zone us-central1-f
# Create a forwarding rule associated with the frontend VIP address we created earlier
# which will forward the traffic to the target pool.
$ gcloud compute forwarding-rules create fr-1 --region us-central1 --ports 80 --address net-lb-ip-1 --target-pool tp-1
# Describe the forwarding rule
gcloud compute forwarding-rules describe fr-1 --region us-central1
IPAddress: 1.2.3.4
IPProtocol: TCP
creationTimestamp: '2017-07-19T10:11:12.345-07:00'
description: ''
id: '1234567890'
kind: compute#forwardingRule
loadBalancingScheme: EXTERNAL
name: fr-1
portRange: 80-80
region: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1/forwardingRules/fr-1
target: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1/targetPools/tp-1
# Check the health status of the target pool and verify that the
# target pool considers the backend instances to be healthy
$ gcloud compute target-pools get-health tp-1
---
healthStatus:
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/us-central1-f/instances/vm1
ipAddress: 1.2.3.4
kind: compute#targetPoolInstanceHealth
---
healthStatus:
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/us-central1-f/instances/vm2
ipAddress: 1.2.3.4
kind: compute#targetPoolInstanceHealth
如果您使用的是UDP负载均衡器(在Google CLoud中被视为网络负载均衡),您需要启动一个基本的HTTP服务器,除了正在侦听的服务之外,它还可以响应HTTP运行状况检查用于传入流量的UDP端口。
同样适用于基于非代理的TCP负载均衡器(在Google Cloud中也被视为网络负载均衡)。
运行状况检查确保Compute Engine仅转发新连接 到达并准备接收它们的实例。计算引擎 将健康检查请求发送到指定的每个实例 频率;一旦实例超过其允许的健康检查次数 失败,它不再被视为合格的实例 接收新的流量。现有连接不会主动 终止,允许实例正常关闭和关闭 TCP连接。
运行状况检查继续查询运行状况不佳的实例,然后返回 一旦指定的成功检查次数,池中的实例 满足了。
网络负载平衡依赖于legacy HTTP Health checks 确定实例健康。即使您的服务不使用HTTP, 你需要至少在每个实例上运行一个基本的Web服务器 健康检查系统可以查询。