公司有 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 这个参数即可
|