إعادة تعيين اتصال قاعدة بيانات سرب عامل الميناء من قبل الأقران

أنا تشغيل تطبيق التمهيد الربيع مع سرب عامل الميناء وأنا استخدم بوستغريز لقاعدة البيانات. عند تشغيل كل منهما كخدمة عامل ميناء ، فشل اتصال قاعدة البيانات باستمرار وبشكل عشوائي (كما ترون في الطابع الزمني) كما يقول السجل:

2017-10-26 طن17:14:15.200415747ز التطبيق-ديسيبل.1.1ayo6h8ro1og@scw-c2964a / السجل: تعذر تلقي البيانات من العميل: إعادة تعيين الاتصال بواسطة الأقران

2017-10-26 طن17:43:36.481718562زي التطبيق-ديسيبل.1.1ayo6h8ro1og@scw-c2964a / السجل: تعذر تلقي البيانات من العميل: إعادة تعيين الاتصال بواسطة الأقران

2017-10-26 طن17:43:56.954152654ز التطبيق-ديسيبل.1.1ayo6h8ro1og@scw-c2964a / السجل: تعذر تلقي البيانات من العميل: إعادة تعيين الاتصال بواسطة الأقران

2017-10-26 طن17:44:17.434171472زي التطبيق-ديسيبل.1.1ayo6h8ro1og@scw-c2964a / السجل: تعذر تلقي البيانات من العميل: إعادة تعيين الاتصال بواسطة الأقران

2017-10-26 طن17:49:04.154174253ز التطبيق-ديسيبل.1.1ayo6h8ro1og@scw-c2964a / السجل: تعذر تلقي البيانات من العميل: إعادة تعيين الاتصال بواسطة الأقران

لم أستطع فهم أو اكتشاف سبب ذلك. سأقدر أي أفكار.

تحرير:

أدركنا أنه عند اختبار التطبيق ، فإنه يلقي أيضا خطأ مثل هذا:

سكلترانسينتكونكتيونكسيبتيون: هيكاريبول-1-اتصال غير متوفر ، طلب مهلة بعد 937517 مللي ثانية

شكرا.

لقد حصلت على نفس الخطأ نشر كومة سرب عامل الميناء من التطبيق التمهيد الربيع و بوستغريزل. بعد القتال مع هذا لمدة أسبوع تقريبا ، اكتشفت أن هذه المشكلة كانت في جدار الحماية الذي يسقط الاتصالات بين الحاويات بسبب عدم النشاط. إجابة سريعة ، تشغيل التالية كمد على آلة لينكس:

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

كذلك ، لقد شملت التالية خصائص تجمع اتصال القط:

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

جاء الحل من هذه المدونة: التعامل مع الاستثناءات نودينوتافابل في إلاستيكشيرتش

هناك طريقة أخرى لمنع إغلاق اتصال الخمول. ترتبط المشكلة باكتشاف خدمة السرب الافتراضي الذي يغلق اتصال الخمول بعد 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