การเชื่อมต่อฐานข้อมูลนักเทียบท่าจับกลุ่มรีเซ็ตโดยเพื่อน


12

ฉันใช้แอพพลิเคชั่นบู๊ทสปริงด้วยตัวเชื่อมต่อและฉันใช้ postgres สำหรับฐานข้อมูล เมื่อฉันเรียกใช้ทั้งสองอย่างเป็นบริการตัวเทียบท่าการเชื่อมต่อฐานข้อมูลล้มเหลวอย่างสม่ำเสมอและแบบสุ่ม (ดังที่คุณเห็นในการประทับเวลา) ตามบันทึกบอกว่า:

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 - การเชื่อมต่อไม่พร้อมใช้งานคำขอหมดเวลาหลังจาก 937517ms

ขอบคุณ

คำตอบ:


10

ฉันมีข้อผิดพลาดเดียวกันในการปรับใช้ Docker Swarm stack ของแอพ Spring Boot และ PostgreSQL หลังจากต่อสู้กับสิ่งนี้เป็นเวลาประมาณหนึ่งสัปดาห์ฉันก็พบว่าปัญหานี้เกิดขึ้นในไฟร์วอลล์ที่ทิ้งการเชื่อมต่อระหว่างคอนเทนเนอร์เนื่องจากไม่มีการใช้งาน คำตอบอย่างรวดเร็วเรียกใช้ cmd ต่อไปนี้บนเครื่อง 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 ใน ELASTICSEARCH


ฉันจะลองให้เร็วที่สุดขอบคุณสำหรับความช่วยเหลือของคุณ!
Elifcan Çakmak

สวัสดีฉันลองใช้วิธีแก้ปัญหาและใช้เฉพาะส่วนแรกเท่านั้น มันเกิดขึ้นตั้งแต่เมื่อวานและไม่ล้มเหลว ฉันเดาว่ามันใช้งานได้ :) ขอบคุณมาก!
Elifcan Çakmak

คอนเทนเนอร์ที่ใช้เคอร์เนล 4.13 หรือใหม่กว่าจะไม่ได้รับมรดกtcp_keepalive_timeจากโฮสต์อีกต่อไป(ที่มา: success.docker.com/article/ipvs-connection-timeout-issue ) ดังนั้นวิธีการนี้จะไม่ทำงานกับคอนเทนเนอร์ที่ใหม่กว่าอีกต่อไป อย่างไรก็ตามในฐานะของ Docker 19.03 มีsysctlตัวเลือกที่สามารถให้บริการได้ (เช่นในไฟล์เขียน) สิ่งนี้สามารถใช้เพื่อตั้งค่าสถานะด้านบนโดยตรงในคอนเทนเนอร์โดยไม่ยุ่งกับโฮสต์ docs.docker.com/compose/compose-file/#sysctls
avejidah

2

มีวิธีอื่นในการป้องกันการปิดการเชื่อมต่อที่ไม่ได้ใช้งาน ปัญหาเกี่ยวข้องกับการค้นหาบริการ swarm เริ่มต้นซึ่งจะปิดการเชื่อมต่อที่ไม่ได้ใช้งานหลังจาก 15 นาที
การระบุอย่างชัดเจนdnsrr โหมด endpointช่วยแก้ปัญหาเช่น:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.