У меня есть AWS-развертывание приложения SpringBoot, которое запускает запросы на выборку (на основе запроса) и генерирует выходной файл (zip), содержащий набор результатов.Сообщение:
SpringBoot app -> AWS Route 53 -> AWS ELB -> Vertica DB Cluster
Запросы могут выполняться часами, и, следовательно, мое соединение должно поддерживаться в рабочем состоянии.Проблема в том, что ELB сбрасывает соединение после периода простоя.Приложение подключается к Vertica DB через порт 5433.
[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)
Как видно, клиент имеет keep-alive.В кластере 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
(Источник)
Наше время ожидания ELB установлено на 80 секунд.
Примечание: мы установили низкие значения для проверки проблемы
Однако, когда я запускаю любой запрос, он возвращает исключение EOFException через 80 секунд (что связано с подключениемблизко).Я также проверил это на клиентах БД, выполнив SELECT SLEEP (90);
Можно ли как-нибудь сохранить это соединение в течение нескольких (4-6) часов?