AWS ELB删除连接。需要保持活力

时间:2018-12-18 06:32:15

标签: amazon-web-services vertica

我有SpringBoot应用程序的AWS部署,该应用程序触发选择查询(基于请求)并生成包含结果集的输出文件(zip)。 通讯方式是:

SpringBoot app -> AWS Route 53 -> AWS ELB -> Vertica DB Cluster

激发的查询可以运行数小时,因此,我的连接将保持活动状态。问题是ELB似乎在空闲超时时间段后断开了连接。该应用程序通过端口5433连接到Vertica DB。

[root@ip-10-122-5-151 logs]# netstat -anpo | grep 5433
tcp6       0      0 10.122.5.151:47956      10.122.32.89:5433       ESTABLISHED 26605/java           keepalive (9.06/0/0)
tcp6       0      0 10.122.5.151:58416      10.122.33.133:5433      ESTABLISHED 26605/java           keepalive (8.67/0/0)
tcp6       0      0 10.122.5.151:47966      10.122.32.89:5433       ESTABLISHED 26605/java           keepalive (11.10/0/0)
tcp6       0      0 10.122.5.151:47972      10.122.32.89:5433       ESTABLISHED 26605/java           keepalive (12.38/0/0)
tcp6       0      0 10.122.5.151:47960      10.122.32.89:5433       ESTABLISHED 26605/java           keepalive (10.08/0/0)
tcp6       0      0 10.122.5.151:47970      10.122.32.89:5433       ESTABLISHED 26605/java           keepalive (12.13/0/0)

可以看出,客户端保持活动状态。在Vertica群集上,我们设置了以下属性:

echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 30 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes

(Source)

目前我们的ELB超时设置为80秒。

注意:我们现在设置了较低的值来测试问题

但是,当我运行任何查询时,它会在80秒后返回EOFException(这是由于连接关闭)。我还通过运行从数据库客户端对此进行了测试 SELECT SLEEP(90);

我有什么办法可以使该连接保持几(4-6)小时?

1 个答案:

答案 0 :(得分:0)

对于任何因类似问题而在这篇文章上绊脚石的人,我们现在解决了它。 问题在于ELB不遵守TCP参数(tcp保持活动状态)。

有两种解决方法:

  1. 消除ELB,而对数据库集群使用EIP。
  2. 用NLB替换ELB。

我们继续使用NLB,因为这对我们来说似乎是理想的解决方案。但是,如果您仍然对NLB有问题,请仔细阅读通过NLB进行连接时所带来的限制(例如,您需要在客户端使用nitro实例通过vPC内部连接来连接到NLB等)