当前位置: 首页 > 知识库问答 >
问题:

Google云:运行状况检查未从UDP内部负载平衡器中删除失败的实例

吴才俊
2023-03-14

我在一个项目中工作,以移动我们的SIP基础设施。至GCP。

我正在使用带有私有IP的UDP内部负载均衡器将呼叫从Asterisk路由到我的Kamailio SBC,Asterisk配置为负载均衡器的地址IP作为单个传出endpoint。

我的内部UDP负载平衡器在5060前端运行,后端有2个SBC,端口80上有基本http健康检查。

在每个kamailio SBC上,我在端口5060上列出了我的应用程序,在端口80上列出了apache服务器,以便进行健康检查,因此停止httpd会将实例的状态更改为不健康。

转发规则

# gcloud compute forwarding-rules describe ip-gateway-internal-lb-local-fontend --region=europe-west3
IPAddress: 10.156.0.15
IPProtocol: UDP
backendService: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/backendServices/My-gateway-internal-lb-bservices
creationTimestamp: '2018-01-30T10:20:19.564-08:00'
description: ''
id: 'XXXXXXXXXXXXX'
kind: compute#forwardingRule
loadBalancingScheme: INTERNAL
name: ip-gateway-internal-lb-local-fontend
network: https://www.googleapis.com/compute/v1/projects/My-Project/global/networks/default
ports:
- '5060'
region: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/forwardingRules/ip-gateway-internal-lb-local-fontend
subnetwork: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/subnetworks/default

后端服务

# gcloud compute backend-services describe My-gateway-internal-lb-bservices --region=europe-west3
backends:
- balancingMode: CONNECTION
  description: ''
  group: https://www.googleapis.com/compute/v1/projects/My-Project/zones/europe-west3-a/instanceGroups/My-gateway-1xx
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2018-01-30T10:15:10.688-08:00'
description: ''
fingerprint: XXXXXXXXX
healthChecks:
- https://www.googleapis.com/compute/v1/projects/My-Project/global/healthChecks/basic-check-internal-http
id: 'XXXXXXXXX'
kind: compute#backendService
loadBalancingScheme: INTERNAL
name: My-gateway-internal-lb-bservices
protocol: UDP
region: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/backendServices/My-gateway-internal-lb-bservices
sessionAffinity: NONE
timeoutSec: 3

运行状况检查

# gcloud compute health-checks describe basic-check-internal-http
checkIntervalSec: 3
creationTimestamp: '2018-01-31T01:13:25.030-08:00'
description: ''
healthyThreshold: 2
httpHealthCheck:
  host: ''
  port: 80
  proxyHeader: NONE
  requestPath: /
id: 'XXXXXXXXXXXXXXXXXXXX'
kind: compute#healthCheck
name: basic-check-internal-http
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/global/healthChecks/basic-check-internal-http
timeoutSec: 3
type: HTTP
unhealthyThreshold: 2

所有超时都设置为3s,由会话亲和力(持久性)完成的内部UDP LB路由规则不会立即删除,删除大约需要15分钟(没有任何流量)。

同样的情况是,当一个实例再次正常运行时,LB需要15分钟来考虑并开始接收流量。

当我使用带有外部地址IP的UDP负载平衡器时,我没有遇到这个问题,因为我发送流量的星号地址是无效的,所以每次调用的5元组哈希都会不同。

但是,对于使用内部IP的UDP LB,5元组哈希将始终相同(相同的src/dst IP:端口),因此我可以如何配置会话关联(持久性)规则的超时或强制刷新LB的内存。

也许是虫子!有人遇到过同样的问题吗?谢谢,期待有人能帮我解决这个问题吗?

BR,Ouss

共有1个答案

葛成双
2023-03-14

这是内部负载平衡器(UDP)上的一个错误

https://groups.google.com/forum/#!主题/gce讨论/1YMNOLGDGW

https://issuetracker.google.com/issues/72491707

 类似资料:
  • 我目前有一个HTTPS负载均衡器设置,该设置使用443前端、后端和健康检查,为单个主机nginx实例提供服务。 通过浏览器直接导航到主机时,页面会正确加载有效的SSL证书。 当尝试通过负载平衡器IP访问站点时,我收到一条502服务器错误消息。我检查了Google日志,发现负载平衡器出现了“failed\u to\u pick\u backend”错误。我还注意到它没有通过健康检查。 通过深入研究,

  • 我发现了这个问题。。 您希望使用最少的步骤为在多个区域中运行的一组计算引擎实例配置网络负载平衡的自动修复。如果VM在3次尝试后无响应,则需要配置VM的重新创建,每次10秒。你应该怎么做? A、 使用引用现有实例组的后端配置创建HTTP负载平衡器。将运行状况检查设置为健康(HTTP) B、 使用引用现有实例组的后端配置创建HTTP负载平衡器。定义平衡模式并将最大RPS设置为10。 C.创建托管实例组

  • 我有一个负载平衡器设置,将流量路由到多个云存储桶和一个后端实例组。这些桶似乎工作得很好,但我就是无法让实例组工作。当我使用它的公共IP时,该实例运行良好。但它无法通过负载平衡器工作。 这是我第二次设置完全相同的部署,所以不完全确定哪里出错了。我查看了文档进行故障排除,看起来我的健康检查有问题。 我已经配置了一个应该可以工作的健康检查,我将其设置为http端口80/path。我的服务器为此返回了20

  • 根据以下官方文件,我在GKE上安装了Kubernetes入口控制器。 入口控制器运行良好。 它自动创建TCP负载平衡器、健康检查和防火墙规则。我的kubernetes群集有3个节点。有趣的是,有两次健康检查失败。它传递给入口控制器正在运行的实例。我调试了它,但没有找到任何线索。谁能帮我一下吗。

  • 我有一个与这里类似的情况:Spring Cloud Stream和RabbitMQ健康检查 错误信息 环境: Java 8 Grails 3.3.8 弹簧-拉比-1.7.9.释放 弹簧引导致动器-1.5.15.释放 KeyCloak服务器4.6.0.final 知道怎么能让兔子在这里停用吗?

  • 我正在使用编写负载均衡器。 负载平衡器侦听本地传输地址。就Netty而言,只创建了一个频道来监听该地址。然后,(单线程事件循环组的)单线程将传入的UDP数据包调度到工作线程池进行处理(这里,处理意味着执行负载平衡)。 在出站端,可以使用多个服务器。对于每个接收到的UDP数据包,关联的工作线程选择一个服务器,并将UDP数据包转发到此服务器。为了转发UDP数据包,需要一个通道。 我可以看到四种方法: