目录
背景
目前所做的项目管理了近36w+的agent,用来接收apiserver集群(存储了任务的相关数据)推送过来的任务信息。当前的流程是agent会和apiserver节点建立grpc双向流式,当apiserver有任务的时候,会push任务信息给agent,并定时发送心跳请求来探活长连接。从现状来看,时不时会出现长连接的问题导致agent接收任务失败。
现状
在机器上执行netstat可以看到,agent和apiserver节点的44401端口建立了长连接,连接状态为ESTABLISHED。
$ netstat -ntp | grep 44401
tcp 0 0 10.75.67.194:43908 10.23.42.23:44401 ESTABLISHED -
tcp 0 0 10.75.67.194:20583 10.21.70.43:44401 ESTABLISHED -
tcp 0 0 10.75.67.194:56550 10.21.70.42:44401 ESTABLISHED -
tcp 0 0 10.75.67.194:16673 10.21.70.42:44401 ESTABLISHED -
但是如何判断这些连接是否还存活,通过执行tcpdump命令,可以看到agent和apiserver之间有定时的心跳包发送。
# tcpdump -nn -A tcp port 44401
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0,