大佬们,问个问题

2022-12-27 09:47:59 +08:00
 macscsbf
线上 k8s 有个 websocket 服务端的 pod ,外面用 nginx 做代理。
平常大概几万个客户端与服务端保持连接,然后每次重启以后客户端会重新连接到这个服务端。
但是我发现每次重启以后,客户端重新连接时常会出现客户端连接超时的问题,经排查看到 nginx 经常出现 upstream timeout 的问题。想问下这个问题怎么解决
3670 次点击
所在节点    程序员
18 条回复
opengps
2022-12-27 10:06:57 +08:00
几万个,有没有超 65535 ?用了 nginx 的连接转发,意味着不再是直接承载外部连接,而是内部多一层占用,这个占用的连接数是受限制的。
macscsbf
2022-12-27 10:12:37 +08:00
@opengps 没有超过,2w 多吧,这个是会有 65535 的限制吗
opengps
2022-12-27 10:39:14 +08:00
@macscsbf 两个方向:
1 ,单个进程发起的连接数可能有限制
2 ,重启本身,外部有大量连接需要瞬间建立,这个过程本身就很费资源,如果没有连接池等方案去优化的话,出现超时属于正常现象
macscsbf
2022-12-27 10:45:56 +08:00
@opengps 忘了说了,重启下 nginx 就恢复正常了。主要是这算是服务内部的问题,还是 nginx 我哪里配置上有什么问题呢
zpfhbyx
2022-12-27 11:19:42 +08:00
都上 k8s 了..为啥不滚动升级..
macscsbf
2022-12-27 11:32:38 +08:00
@zpfhbyx 重启是服务崩了。。这是个老项目,没什么升级的需求
iisky1121
2022-12-27 11:43:39 +08:00
主要是客户端和 nginx 保持长连接,nginx 和服务端保持连接,你断开的是服务端和 nginx ,但是客户端和 nginx 并没有断开,所以触发超时
iisky1121
2022-12-27 11:47:04 +08:00
这里面服务端和 nginx 中间应该是通过 lb 或者 service ,问题在这里面
macscsbf
2022-12-27 12:02:15 +08:00
@iisky1121 这确实应该是这样的,但是 upstream timeout 对应的应该是我上游的服务端吧,意思是客户端请求 nginx 请求 pod 的超时是吗?用的是 service
documentzhangx66
2022-12-27 12:39:27 +08:00
defunct9
2022-12-27 13:14:29 +08:00
开 k9s ,让我上去看看
whoosy
2022-12-27 15:43:55 +08:00
nginx upstream 有缓存,转发到了 pod 之前的地址上去了,重启 nginx 会生效
macscsbf
2022-12-27 15:51:24 +08:00
@whoosy 我填写的地址是 service 的 ip,因为 pod ip 是一直在变的
macscsbf
2022-12-27 15:56:30 +08:00
@defunct9 我没这个权限。所以问的可能也不是那么清楚
WeSoniC
2022-12-27 16:53:37 +08:00
服务的 service 是什么类型? nginx 是在集群内还是在集群外?我之前踩过坑,nginx 的反代如果你上游地址用的是域名,默认是不会自动刷新的,只有第一次启动会解析,关键字 nginx resolver 。
macscsbf
2022-12-27 16:58:55 +08:00
@WeSoniC nginx 是在集群外部的,service 是 ClusterIp
securityCoding
2022-12-27 17:38:11 +08:00
k8s 流量没切完 ,pod 停止脚本做一下 sleep 吧
webcape233
2022-12-27 17:57:24 +08:00
帖子题目不描述问题....

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

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

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

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

© 2021 V2EX