即使使用负载平衡器地址,gRPC 客户端也不使用 grpc-lb

Posted

技术标签:

【中文标题】即使使用负载平衡器地址,gRPC 客户端也不使用 grpc-lb【英文标题】:gRPC client not using grpc-lb even with load-balancer address 【发布时间】:2018-01-31 19:36:10 【问题描述】:

我正在尝试使用具有基于 TCP 的负载平衡的 haproxy 负载平衡器对从单个 node.js 客户端对多个 node.js 后端的 rpc 调用进行负载平衡。我在创建 grpc 客户端时提供了这个负载均衡器的 dns-name:port,根据https://github.com/grpc/grpc/blob/master/doc/load-balancing.md,它应该被视为负载均衡器地址,并且每个 lb 的后端服务器都应该打开一个子通道。但我可以看到唯一打开的通道是负载均衡器,所有 rpc 都只发送到单个服务器,直到 tcp idle connection-timeout 命中并且新的 tcp 连接与新服务器建立。

只是想问一下 grpc 如何检测客户端是连接负载均衡器还是服务器?有什么方法可以告诉客户端它连接的地址是负载平衡器地址,因此它应该使用 grpc-lb 策略而不是优先选择?

【问题讨论】:

【参考方案1】:

我后来了解到,为了让负载平衡策略确定所馈送的地址是否属于负载平衡器,它需要一个额外的布尔值来指示它是否是 lb 地址。因此,我需要为我的负载平衡器地址设置 SRV 记录,以获取 grpc 的负载平衡策略所需的附加信息,根据https://github.com/grpc/proposal/blob/master/A5-grpclb-in-dns.md

【讨论】:

以上是关于即使使用负载平衡器地址,gRPC 客户端也不使用 grpc-lb的主要内容,如果未能解决你的问题,请参考以下文章

gRPC负载均衡器/名称解析器示例? [关闭]

在服务器端输出上禁用 gRPC 负载平衡

译gRPC负载均衡

一个支持高网络吞吐量基于机器性能评分的TCP负载均衡器gobalan

gRPC 客户端负载均衡

使用envoy在k8s中作grpc的负载均衡