web-dev-qa-db-fra.com

Connexion de la base de données Swarm Docker Réinitialiser par Peer

Je passe une application de démarrage à ressort avec Docker Swarm et j'utilise Postgres pour la base de données. Lorsque je les exécute à la fois en tant que service Docker, la connexion de base de données échoue de manière cohérente et aléatoire (comme vous pouvez le constater sur l'horodatage) car le journal indique:

2017-10-26T 17:14:15. 200415747Z App-DB.1An.1AYO6H8RO1G@SCW-C2964A | Journal: Impossible de recevoir des données de Client: Connexion Réinitialiser par Peer

2017-10-26T 17:43:36. 481718562Z APP-DB.1.1AYO6H8RO1OG@SCW-C2964A | Journal: Impossible de recevoir des données de Client: Connexion Réinitialiser par Peer

2017-10-26T 17:43:56. 954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | Journal: Impossible de recevoir des données de Client: Connexion Réinitialiser par Peer

2017-10-26T 17:44:17. 434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | Journal: Impossible de recevoir des données de Client: Connexion Réinitialiser par Peer

2017-10-26T 17:49:04. 154174253z app-db.1.1ayo6h8ro1og@scw-c2964a | Journal: Impossible de recevoir des données de Client: Connexion Réinitialiser par Peer

Je ne pouvais pas comprendre ni découvrir la raison de cela. J'apprécierais toutes les idées.

éditer:

nous avons compris que, lors de la testruction de l'application, il jette également une erreur comme celle-ci:

SQLTransientConnectionException: Hikaripool-1 - La connexion n'est pas disponible, demande expirée après 937517ms

Merci.

12
Elifcan Çakmak

J'ai la même erreur d'erreur déployant Docker Swarm Stack of Spring Boot App et PostgreSQL. Après avoir combattu cela pendant environ une semaine, j'ai compris que la question était dans le pare-feu abandonnant les connexions entre les conteneurs en raison de l'inactivité. Réponse rapide, exécutez la machine CMD sur la machine Linux:

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

De plus, j'ai inclus à la suite des propriétés du pool de Connection 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

La solution est venue de ce blogpostost: Traitement des exceptions ndénotavailables dans Elasticsearch

10
Pragmatic

Il existe une autre façon d'empêcher la fermeture de la connexion inactive. Le problème est lié à la découverte de service d'essaim par défaut qui ferme la connexion inactive après 15 minutes.
Explicit spécifié le dnsrrmode de terminaison résout le problème, E.G.:

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
2
xxxception