V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
GeekHub
vanis
V2EX  ›  NGINX

Nginx 转发 grpc 求助

  •  
  •   vanis · 12 天前 · 1063 次点击

    运行环境 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;
    }
    

    }

    请教各位大佬有何建议。

    9 条回复    2020-09-18 11:28:15 +08:00
    joesonw
        1
    joesonw   12 天前
    client maxRetry
    vanis
        2
    vanis   12 天前
    大佬能展开说下么?查了下 nginx 的文档,只发现了 grpc_next_upstream_tries 这个选项跟 retry 有关,设置了下没反应。
    rimutuyuan
        3
    rimutuyuan   12 天前
    之前我们 nginx + grpc 压测时也出现过很多解决不了的连接失败问题,设置 max request timeout 各种相关的参数都尝试过

    后来换了 envoy
    JmmBite
        4
    JmmBite   12 天前
    更改端口回收策略:tcp_tw_recycle

    https://juejin.im/post/6844903809534148622
    godgrp
        5
    godgrp   12 天前
    location 不能用 /foo , 你可以去看下 grpc 的请求路径是什么,可以发现他的请求路径类似是 “/你的服务 package 名 /...”,一种你按你的服务名去转发,另一种使用 nginx 的四层转发
    puncsky
        6
    puncsky   11 天前
    envoy +1
    vanis
        7
    vanis   11 天前
    @godgrp
    感谢细心,/foo.是服务包的通配符。。。也试过直接用 /Package.module/foo 的详细路径,没解决问题。
    vanis
        8
    vanis   11 天前
    @JmmBite
    感谢指出,看了下解决方案。要动服务器设置,感觉代价太大了。。。
    反正应用场景是集群计算的任务分配,不如在客户端多写点代码实现轮询算了。
    vanis
        9
    vanis   11 天前
    @rimutuyuan
    感谢经验分享,貌似只能弃坑了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2602 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
    ♥ Do have faith in what you're doing.