V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luger1990
V2EX  ›  问与答

docker host 模式起的 nginx 量大的时候会有大量 502

  •  
  •   luger1990 · 2019-09-24 21:06:02 +08:00 · 1952 次点击
    这是一个创建于 1648 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司有 N 台前端机 nginx(没有用 docker 部署)称为大前端 Nginx,请求过来之后先经过前端机然后到一组业务 nginx(这个是用 docker host 模式起的 nginx) 再然后由业务 nginx 转到后端的服务。

    目前问题是这样的,当大前端 nginx 到业务 nginx 的量大了之后会有很多 502 的请求,大概单台 2Kqps 的时候吧,运维同事帮忙查了查说是业务 nginx 所在机器防火墙的问题,但是 docker 又不能关了防火墙。

    请问还有什么能优化的吗?

    第 1 条附言  ·  2019-12-17 12:11:40 +08:00
    解决问题了 可以参考 http://keithmo.me/post/2018/08/25/conntrack-tuning/ 这个文章 增大 nf_conntrack_max 这个参数即可
    14 条回复    2019-12-17 12:11:24 +08:00
    haiyang416
        1
    haiyang416  
       2019-09-24 21:11:16 +08:00
    如果是我的话,会更倾向于是后代业务代码的问题,2333
    Reficul
        2
    Reficul  
       2019-09-24 21:12:09 +08:00
    host 模式的容器就没有 iptables 规则和网络命名空间隔离,所以。。。。
    Imr
        3
    Imr  
       2019-09-24 21:59:01 +08:00 via iPhone
    防火墙是限制了流量还是限制了访问频率?没说到关键啊
    blless
        4
    blless  
       2019-09-24 22:06:20 +08:00 via Android
    502 就是代理请求转发失败了啊 也就是后面的 nginx 响应失败或者断开了吧 内部 nginx 可以看看有没有 keepalive 之类的优化,我习惯内部用 haproxy 有个 http reuse 选项,可以复用链接
    luger1990
        5
    luger1990  
    OP
       2019-09-25 11:02:16 +08:00
    @haiyang416 是从大前端都没有到我的业务 nginx,业务 nginx 提示 nf_conntrack: table full, dropping packet “连接跟踪表已满,开始丢包”
    luger1990
        6
    luger1990  
    OP
       2019-09-25 11:02:25 +08:00
    @Reficul 是从大前端都没有到我的业务 nginx,业务 nginx 提示 nf_conntrack: table full, dropping packet “连接跟踪表已满,开始丢包”
    julyclyde
        7
    julyclyde  
       2019-09-25 14:12:18 +08:00
    把你们公司运维开了吧
    onionlc
        8
    onionlc  
       2019-09-25 15:10:15 +08:00
    iptables 问题,建议排查下业务 nginx 所在机器 iptables 策略
    Reficul
        9
    Reficul  
       2019-09-25 19:37:09 +08:00
    @luger1990 nf_conntrack 应该是 net filter 里的功能
    http://jaseywang.me/2012/08/16/%E8%A7%A3%E5%86%B3-nf_conntrack-table-full-dropping-packet-%E7%9A%84%E5%87%A0%E7%A7%8D%E6%80%9D%E8%B7%AF/

    这个问题不是 docker 带来的,至少 host 模式下不需要 iptables 也能工作。如果整个机器的容器都是 host 模式的,可以考虑把 iptables 关掉。

    或者排查 iptables 规则,没有用到相关功能可以把 nf conntrack 模块禁用了。
    luger1990
        10
    luger1990  
    OP
       2019-09-26 09:50:11 +08:00
    @julyclyde 这还是不行的。。。
    luger1990
        11
    luger1990  
    OP
       2019-09-26 09:50:24 +08:00
    @onionlc 好 我联系运维同事帮忙看看
    luger1990
        12
    luger1990  
    OP
       2019-09-26 09:50:49 +08:00
    @Reficul 我联系运维同事看看 如果查不到怎么解决的话我也打算关了防火墙
    luger1990
        13
    luger1990  
    OP
       2019-10-09 10:25:42 +08:00
    应该就是防火墙的问题,关了防火墙用 host 模式启动 nginx 就没问题。
    luger1990
        14
    luger1990  
    OP
       2019-12-17 12:11:24 +08:00
    解决问题了 可以参考 http://keithmo.me/post/2018/08/25/conntrack-tuning/ 这个文章 增大 nf_conntrack_max 这个参数即可
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2444 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:51 · PVG 23:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.