公司有 N 台前端机 nginx(没有用 docker 部署)称为大前端 Nginx,请求过来之后先经过前端机然后到一组业务 nginx(这个是用 docker host 模式起的 nginx) 再然后由业务 nginx 转到后端的服务。
目前问题是这样的,当大前端 nginx 到业务 nginx 的量大了之后会有很多 502 的请求,大概单台 2Kqps 的时候吧,运维同事帮忙查了查说是业务 nginx 所在机器防火墙的问题,但是 docker 又不能关了防火墙。
请问还有什么能优化的吗?
![]() | 1 haiyang416 2019-09-24 21:11:16 +08:00 如果是我的话,会更倾向于是后代业务代码的问题,2333 |
![]() | 2 Reficul 2019-09-24 21:12:09 +08:00 host 模式的容器就没有 iptables 规则和网络命名空间隔离,所以。。。。 |
![]() | 3 Imr 2019-09-24 21:59:01 +08:00 via iPhone 防火墙是限制了流量还是限制了访问频率?没说到关键啊 |
![]() | 4 blless 2019-09-24 22:06:20 +08:00 via Android 502 就是代理请求转发失败了啊 也就是后面的 nginx 响应失败或者断开了吧 内部 nginx 可以看看有没有 keepalive 之类的优化,我习惯内部用 haproxy 有个 http reuse 选项,可以复用链接 |
5 luger1990 OP @haiyang416 是从大前端都没有到我的业务 nginx,业务 nginx 提示 nf_conntrack: table full, dropping packet “连接跟踪表已满,开始丢包” |
6 luger1990 OP @Reficul 是从大前端都没有到我的业务 nginx,业务 nginx 提示 nf_conntrack: table full, dropping packet “连接跟踪表已满,开始丢包” |
7 julyclyde 2019-09-25 14:12:18 +08:00 把你们公司运维开了吧 |
8 onionlc 2019-09-25 15:10:15 +08:00 iptables 问题,建议排查下业务 nginx 所在机器 iptables 策略 |
![]() | 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 模块禁用了。 |
13 luger1990 OP 应该就是防火墙的问题,关了防火墙用 host 模式启动 nginx 就没问题。 |
14 luger1990 OP 解决问题了 可以参考 http://keithmo.me/post/2018/08/25/conntrack-tuning/ 这个文章 增大 nf_conntrack_max 这个参数即可 |