Nginx 转发 grpc 求助

2020-09-17 12:10:18 +08:00
 vanis

运行环境 OS:ubuntu 18.04 nginx:1.17.10 grpcio:1.31

问题描述: 用 nginx 做了 grpc 服务的转发 /负载均衡,client 并发调用时随机出现 status = StatusCode.UNAVAILABLE details = "GOAWAY received" 同样并发请求数量,直接调用 grpc 服务器地址,不通过 nginx 转发则不会出现问题,应该不是服务端设置的问题。

nginx 配置:

upstream grpcservers { server xxx.xxx.xxx.1:50051; server xxx.xxx.xxx.2:50051; }

server{ listen 8080 http2;

location /foo. {
grpc_pass grpc://grpcservers;
}

}

请教各位大佬有何建议。

3358 次点击
所在节点    NGINX
10 条回复
joesonw
2020-09-17 13:54:37 +08:00
client maxRetry
vanis
2020-09-17 15:00:26 +08:00
大佬能展开说下么?查了下 nginx 的文档,只发现了 grpc_next_upstream_tries 这个选项跟 retry 有关,设置了下没反应。
rimutuyuan
2020-09-17 15:06:11 +08:00
之前我们 nginx + grpc 压测时也出现过很多解决不了的连接失败问题,设置 max request timeout 各种相关的参数都尝试过

后来换了 envoy
JmmBite
2020-09-17 15:34:03 +08:00
更改端口回收策略:tcp_tw_recycle

https://juejin.im/post/6844903809534148622
godgrp
2020-09-17 16:43:26 +08:00
location 不能用 /foo , 你可以去看下 grpc 的请求路径是什么,可以发现他的请求路径类似是 “/你的服务 package 名 /...”,一种你按你的服务名去转发,另一种使用 nginx 的四层转发
puncsky
2020-09-18 10:06:41 +08:00
envoy +1
vanis
2020-09-18 11:01:31 +08:00
@godgrp
感谢细心,/foo.是服务包的通配符。。。也试过直接用 /Package.module/foo 的详细路径,没解决问题。
vanis
2020-09-18 11:23:40 +08:00
@JmmBite
感谢指出,看了下解决方案。要动服务器设置,感觉代价太大了。。。
反正应用场景是集群计算的任务分配,不如在客户端多写点代码实现轮询算了。
vanis
2020-09-18 11:28:15 +08:00
@rimutuyuan
感谢经验分享,貌似只能弃坑了。
guozilong110
2020-10-23 14:21:46 +08:00
最近我也在调整 nginx 代理 grpc, 突然想到, 为什么用 nginx, 程序直接直接 grpc 调用不是就很好了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707879

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX