我正在一个项目中移动我们的 SIP 基础设施。到 GCP。
我正在使用带有私有 IP 的 UDP 内部负载均衡器将呼叫从 Asterisk 路由到我的 Kamailio SBC,Asterisk 配置了负载均衡器的地址 IP 作为单个传出端点。
我的内部 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
所有超时设置为 3 秒,由会话亲和性(持久性)完成的内部 UDP LB 路由规则不会立即删除,大约需要 15 分钟(没有任何流量)才能被删除。
同样的情况,当实例再次健康时,LB 需要 15 分钟才能考虑并开始接收流量。
当我使用带有外部地址 IP 的 UDP 负载均衡器时,我没有遇到这个问题,因为我发送流量的星号地址是指定的,因此每次调用的 5 元组哈希值都会不同。
但是对于使用内部 IP 的 UDP LB,5 元组哈希将始终相同(相同的 src/dst IP:Port),因此我如何配置会话亲和性(持久性)规则的超时或强制刷新我的内存磅。
也许这是一个错误!有没有人遇到同样的问题?感谢并期待是否有人可以帮助我解决这个问题?
BR,奥斯