चपरासी द्वारा डॉकर झुंड डेटाबेस कनेक्शन रीसेट


12

मैं डॉकर झुंड के साथ एक स्प्रिंग बूट एप्लिकेशन चला रहा हूं और डेटाबेस के लिए पोस्टग्रेज का उपयोग करता हूं। जब मैं दोनों को docker सेवा के रूप में चलाता हूं, तो डेटाबेस कनेक्शन लगातार और बेतरतीब ढंग से विफल रहता है (जैसा कि आप टाइमस्टैम्प पर देख सकते हैं) लॉग कहता है:

2017-10-26T 17:14:15 .200415747Z ऐप-db.1.1ayo6h8ro1og@scw-c2964a | लॉग: क्लाइंट से डेटा प्राप्त नहीं कर सका: सहकर्मी द्वारा कनेक्शन रीसेट

2017-10-26T 17:43:36 .481718562Z ऐप-db.1.1ayo6h8ro1og@scw-c2964a | लॉग: क्लाइंट से डेटा प्राप्त नहीं कर सका: सहकर्मी द्वारा कनेक्शन रीसेट

2017-10-26T 17:43:56 .954152654Z ऐप-db.1.1ayo6h8ro1og@scw-c2964a | लॉग: क्लाइंट से डेटा प्राप्त नहीं कर सका: सहकर्मी द्वारा कनेक्शन रीसेट

2017-10-26T 17:44:17 .434171472Z ऐप-db.1.1ayo6h8ro1og@scw-c2964a | लॉग: क्लाइंट से डेटा प्राप्त नहीं कर सका: सहकर्मी द्वारा कनेक्शन रीसेट

2017-10-26T 17:49:04 .154174253Z ऐप-db.1.1ayo6h8ro1og@scw-c2964a | लॉग: क्लाइंट से डेटा प्राप्त नहीं कर सका: सहकर्मी द्वारा कनेक्शन रीसेट

मैं इसका कारण समझ या खोज नहीं सका। मैं किसी भी विचार की सराहना करता हूं।

संपादित करें:

हमने महसूस किया कि, अनुप्रयोग का परीक्षण करते समय, यह इस तरह से त्रुटि फेंकता है:

SQLTransientConnectionException: HikariPool-1 - कनेक्शन उपलब्ध नहीं है, अनुरोध 937517ms के बाद समाप्त हो गया है

धन्यवाद।

जवाबों:


10

मुझे स्प्रिंग बूट ऐप और PostgreSQL के डॉकर झुंड स्टैक को तैनात करने में एक ही त्रुटि मिली है। लगभग एक सप्ताह तक इससे जूझने के बाद, मुझे पता चला है कि निष्क्रियता की वजह से यह मुद्दा कंटेनरों के बीच फायरप्लेस ड्रॉपिंग कनेक्शन में था। त्वरित उत्तर, लिनक्स मशीन पर 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

इस ब्लॉगपोस्ट से समाधान आया: ELASTICSEARCH में NODENOTAVAILABLE अपवादों से निपटना


मैं जितनी जल्दी हो सके यह कोशिश करूँगा। आपकी मदद के लिए धन्यवाद!
एलिफकैन mकमाक

नमस्ते, मैंने समाधान की कोशिश की और मैंने केवल पहला भाग लागू किया। यह कल से है और असफल नहीं हुआ। मुझे लगता है कि यह काम करता है :) बहुत बहुत धन्यवाद!
एलिफकैन mकमाक

कर्नेल 4.13 या बाद में चलने वाले कंटेनर tcp_keepalive_timeहोस्ट से विरासत में नहीं मिलेंगे (स्रोत: success.docker.com/article/ipvs-connection-timeout-issue ), इसलिए यह दृष्टिकोण अब नए कंटेनर के साथ काम नहीं करेगा। हालाँकि, डॉकर 19.03 के रूप में एक sysctlविकल्प है जो सेवाओं को दिया जा सकता है (उदाहरण के लिए एक कम्पोज़ फाइल में)। यह मेजबान के साथ खिलवाड़ के बिना सीधे कंटेनरों में उपरोक्त झंडे स्थापित करने के लिए इस्तेमाल किया जा सकता है। docs.docker.com/compose/compose-file/#sysctls
avejidah

2

निष्क्रिय कनेक्शन को रोकने के लिए एक और तरीका है। समस्या डिफ़ॉल्ट झुंड सेवा खोज से संबंधित है जो 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.