сброс соединения с базой данных docker swarm одноранговым узлом

Я запускаю приложение весенней загрузки с роем докеров, и я использую postgres для базы данных.Когда я запускаю их обоих как службу докеров, соединение с базой данных прерывается последовательно и случайным образом (как вы можете видеть на метке времени), как говорится в журнале:

2017-10-26T 17:14:15 . 200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | ЖУРНАЛ: не удалось получить данные от клиента: соединение сброшено одноранговым узлом

2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | ЖУРНАЛ: не удалось получить данные от клиента: соединение сброшено одноранговым узлом

2017-10-26T 17:43:56 .954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: не удалось получить данные от клиента: соединение сброшено одноранговым узлом

2017-10-26T 17:44:17 .434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | ЖУРНАЛ: не удалось получить данные от клиента: сброс соединения одноранговым узлом

2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | ЖУРНАЛ: не удалось получить данные от клиента: сброс соединения одноранговым узлом

Я не мог понять или обнаружить причину этого. Буду признателен за любые идеи.

edit:

мы поняли, что при тестировании приложения оно также выдает такую ​​ошибку:

SQLTransientConnectionException: HikariPool-1 - Соединение недоступно, запрос истек через 937517 мс.

Спасибо.

10
задан 26 October 2017 в 21:00
2 ответа

У меня такая же ошибка при развертывании стека Docker Swarm приложения Spring Boot и PostgreSQL. После того, как я боролся с этим около недели, я понял, что проблема заключалась в том, что брандмауэр разрывает соединения между контейнерами из-за бездействия. Быстрый ответ, запустите следующую команду на Linux-машине:

sudo sysctl -w \
net.ipv4.tcp_keepalive_time=600 \
net.ipv4.tcp_keepalive_intvl=60 \
net.ipv4.tcp_keepalive_probes=3

Я также включил следующие свойства пула соединений tomcat:

tomcat:
  max-active: 10
  initial-size: 5
  max-idle: 8
  min-idle: 5
  test-on-borrow: true
  test-while-idle: true
  test-on-return: false
  test-on-connect: true
  validation-query: SELECT 1
  validation-interval: 30000
  max-wait: 30000
  min-evictable-idle-time-millis: 60000
  time-between-eviction-runs-millis: 5000
  remove-abandoned: true
  remove-abandoned-timeout: 60

Решение взято из этого сообщения в блоге: РАБОТА С NODENOTAVAILABLE EXCEPTIONS IN ELASTICSEARCH

7
ответ дан 2 December 2019 в 22:12

Есть еще один способ предотвратить закрытие незанятого соединения. Проблема связана с обнаружением службы роя по умолчанию, которая закрывает бездействующее соединение через 15 минут.
Явно указанный режим конечной точки dnsrr решает проблему, например:

version: '3.3'

services:
  foo-service:
    image: example/foo-service:latest
    hostname: foo-service
    networks:
      - foo_network
    deploy:
      endpoint_mode: dnsrr
      # ...

networks:
  foo_network:
    external: true
    driver: overlay
0
ответ дан 2 December 2019 в 22:12

Теги

Похожие вопросы