GCP: انتهاء المهلة الزمنية لاتصال Postgres أثناء بدء تشغيل n8n على Cloud Run (Unix socket لـ Cloud SQL)

الوصف
لاحظنا حادثة بدء تشغيل لمرة واحدة في n8n على Google Cloud Run مع PostgreSQL على Cloud SQL (اتصال مقبس Unix).

البيئة

  • إصدار n8n: 2.32.5
  • وقت التشغيل: Google Cloud Run (الجيل الثاني)
  • المنطقة: europe-west3
  • قاعدة البيانات: PostgreSQL على Cloud SQL
  • طريقة الاتصال: مقبس Unix تحت /cloudsql

ما حدث

  • أثناء نافذة بدء تشغيل واحدة، سجل n8n بشكل متكرر:
    • Error: timeout exceeded when trying to connect
    • آثار المكدس تشير إلى مسارات اكتساب الاتصال في pg-pool و @n8n/typeorm و @n8n/db.
  • في نفس النافذة:
    • كان بإمكان نقطة النهاية الجذرية إرجاع 200
    • أرجعت بعض استدعاءات API 500 / كمون عالي
    • أبلغت المهام الخلفية التي تعتمد على قاعدة البيانات عن أعطال
  • تم إجراء إعادة نشر يدوية.
  • بعد فترة وجيزة من إعادة النشر، استقرت الخدمة وعملت بشكل طبيعي منذ ذلك الحين.

مرحباً @rgrzesk، بينما تنتظر الرد، إليك بعض الأشياء التي قد تساعدك:

الموارد المقترحة

تم مطابقتها تلقائياً مع سؤالك.

المستندات:

المنتدى:

@Mayank1024, @Websensepro, @tamy.santos - لقد ساعدتم في حل مشاكل مماثلة من قبل، هل يمكنكم الاطلاع عليها؟

اقتراح تلقائي من روبوت مجتمع n8n. إنه مشروع تجريبي - يرجى مشاركة ملاحظاتك هنا.

مرحباً @rgrzesk يبدو أنك تُبلّغ عن خطأ فقط، صحيح؟ هل نسختك تعمل بشكل جيد الآن؟

@rgrzesk

بالنسبة لي، يبدو أكثر مثل تقرير حادث.
ربما تود رفع المشكلة مع مزودك

مرحباً @rgrzesk
“timeout exceeded when trying to connect” يأتي من مهلة استحواذ pg-pool، لذا لم توفر المجموعة عميلاً في غضون DB_POSTGRESDB_CONNECTION_TIMEOUT، وليس لأن مقبس Cloud SQL غير قابل للوصول. DB_POSTGRESDB_POOL_SIZE القيمة الافتراضية هي 2، وفي مثيل Cloud Run واحد، استعلامات بدء التشغيل بالإضافة إلى حركة المرور الواردة تصطف خلف هذين الاتصالين، وهذا هو السبب في بقاء نقطة النهاية الجذرية في 200 بينما انتقلت استدعاءات DB المدعومة إلى 500. ارفع كليهما على المراجعة:

DB_POSTGRESDB_POOL_SIZE=10
DB_POSTGRESDB_CONNECTION_TIMEOUT=60000

ثم حد من تزامن حاوية Cloud Run إلى ما يقارب ما يمكن للمجموعة تقديمه (10 إلى 20)، لذا لا يمكن للارتفاع المفاجئ أن يتفوق عليه مرة أخرى. يسمح Cloud Run بـ 100 اتصال لكل مثيل إلى Cloud SQL، لذا يبقى 10 بشكل جيد ضمن ذلك.

أنا سعيد بأن الخدمة استقرت وتعمل بشكل طبيعي منذ ذلك الحين :slight_smile:

شكراً! سأقوم بضبط CloudRun بهذه الطريقة.
ومع ذلك، ما يقلقني - أن هذا حدث فجأة والمثيل يعمل منذ 6 أشهر، وكان يعمل بدون أي مشاكل حتى الآن.

انتهاء المهلة الزمنية لاستحواذ pg-pool يخبرك أن لا عميل أصبح متاحاً قبل الموعد النهائي. لكن هذا لا يثبت أن التجمع كان صغيراً جداً. لأن هذا حدث مرة واحدة بعد ستة أشهر مستقرة، فإن زيادة التجمع قد تنقل الضغط فقط إلى Cloud SQL.

قم بمطابقة المراجعة المتأثرة مع رسم بياني اتصال Cloud SQL وسجل بدء تشغيل Cloud Run لتلك الطابع الزمني. إذا كانت كلا الاتصالات الموجودة مشغولة بينما كانت الطلبات في الانتظار، فإن تجمع أكبر أو تزامن حاوية أقل معقول. إذا كانت الاتصالات الجديدة تنتهي المهلة الزمنية، فإن حجم التجمع ليس السبب الجذري.

غيّر حداً واحداً في كل مرة واحفظ القيمة السابقة مسجلة. وإلا فإن الحادثة التالية لن تخبرك بأي تغيير ساعد.