服务器内执行数据导入时事务执行时间长竟是因为防火墙

背景

在 Windowns 应用服务器 执行数据导入(事务执行约30分钟), 发现数据在执行过程中长时间运行后没有返回信息。

具体表现为通过监控工具看到有进程在运行,但数据库没有返回信息。

检查

1、在应用服务器 对应 时间长ping ,ping没有任何丢包或者延时

2、 抓包看 客户端发起了请求,服务器端没有回,客户端过滤

3、业务侧没有设置超时时间;网络明确核实 网络交换机层面是没有这个限制 导致 应用服务器跟数据服务器之间在 20~ 30 分钟 自动断开。
两台机器是同VPC只过交换机,交换机是没有存活限制的

怀疑

客户端请求后端出现超过20分钟都没数据返回的情况, 底层会话转发是默认保持20分钟,如果20分钟没任何数据活动,该连接就会老化失效;从技术原理说目前只能通过 keepalive 保持存活,oracle 11g 应该不算太老, 可以配置keepalive ;也可以通过客户端和服务端都部署在同一个机器内避免跨网络会话老化,同内网的机器连自建的oracle机器走内网

猜想

vm2vm 不依赖转发会话

很可能是防火墙20min超时了,server返回的时候入向如果没有放通不就是新的了

入站规则放开源到目的 的1024-65535端口,应该就不会再复现了

主动访问对方, 依赖ct , ct消失了, 就会被防火墙拦截。

例如A—B访问,A这里只放通了A到B出方向的防火墙策略,没有放通B到A入向的策略。此时A访问B,防火墙会形成一个session。这里B回包会正常匹配到这个session。但是如果A—–B通信后长时间没有通信,那么这个session过了20Min后就会超时。如果过了20min后,B再给A回包,这时session超时了。防火墙就判断这个一个新的连接,如果防火墙没放通B到A就会被拒绝掉。

解决

1 发送keepalive报文,保证20分钟内有报文交互

2 放通大于1023的入向端口

评论