序言
当数据在进行交互的时候,如果连接发生了改变,就必然会涉及到是否是无损关闭连接,主要就是看结束连接的时候是否是四次挥手关闭,短连接其实还好,最关键的是长连接如何关闭。
在k8s中,如果运行的是nginx ingress,就涉及到一个是reload会改变连接,一个是后面的svc发生变化的时候的连接;如果是普通的deployment,就涉及到rollingupdate滚动更新的时候,连接如何进行关闭的问题。
优雅的关闭连接
1 长连接与短连接
所谓的长连接,就是和客户端的tcp连接一直在一个会话上面,当你使用netstat查看的时候,连接的端口一直是同样的一个保持不变;而短连接则是使用netstat查看的时候,连接的端口总是同一个。
netstat -antp(在命令中的62257一直保持不变,一直在estabished状态)Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 10.10.1.132:6379 10.0.20.3:62257 ESTABLISHED 9717/redis
站在nginx的角度来看,长连接要分为客户端和nginx之间的连接(还有nginx与upsteam的连接),这个是nginx参数keepalive_timeout来设置的