docker swarm 數據庫連接被對等方重置
我正在使用 docker swarm 執行一個 spring boot 應用程序,並且我使用 postgres 作為數據庫。當我將它們都作為 docker 服務執行時,數據庫連接始終隨機失敗(如您在時間戳上所見),如日誌所示:
2017-10-26T 17:14:15 .200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG:無法從客戶端接收數據:對等方重置連接
2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG:無法從客戶端接收數據:對等方重置連接
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 | LOG:無法從客戶端接收數據:對等方重置連接
2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG:無法從客戶端接收數據:對等方重置連接
我無法理解或發現其中的原因。我會很感激任何想法。
編輯:
我們意識到,在測試應用程序時,它也會拋出如下錯誤:
SQLTransientConnectionException:HikariPool-1 - 連接不可用,請求在 937517 毫秒後超時
謝謝。
我在部署 Spring Boot 應用程序和 PostgreSQL 的 Docker Swarm 堆棧時遇到了同樣的錯誤。在與這個問題鬥爭了大約一周之後,我發現問題在於防火牆由於不活動而斷開了容器之間的連接。快速回答,在linux機器上執行以下cmd:
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
解決方案來自這篇博文:DEALING WITH NODENOTAVAILABLE EXCEPTIONS IN EASTICSEARCH