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.
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
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 dnsrr
mode 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