سؤال

أختبر عدم التسامح مع خطأ نظام ActiveMQ الذي تم تكوينه باسم JDBC Master / Slave. في هذا الإعداد، هناك قاعدة بيانات بعد الحوار ووسطاء - واحد هو الوسيط الرئيسي، والآخر هو وسيط الرقيق. الطريقة التي تعمل بها هذه الآلية هي سيد إخراج قفل حصري على طاولة في DB. يحاول الرقيق القيام بذلك أيضا وينتظر حتى يصبح القفل متاحا. إذا مات الماجستير، يجب إصدار القفل وسيعمل الرقيق. ومع ذلك، إذا فقد سيد تفقد اتصال الشبكة مع قاعدة البيانات، فلن يتم إصدار القفل ناتجا عن سيناريو قضائي. ما يبدو أنه مطلوب هنا هو وسيلة لإخبار Postgres بإصدار القفل تلقائيا إذا لم تتم تجديده خلال فترة زمنية محددة. يتصل بو أنماط تصميم Posa 3 بنمط التأجير. هل من الممكن الحصول على الخوارز للقيام بذلك؟ إذا لم يكن الأمر كذلك، فهل يدعمه بائعي قاعدة البيانات الأخرى؟

هل كانت مفيدة؟

المحلول

هذه ليست حالة توقف تام، وهذا هو مشكلة اتصال.

يحدث حالة توقف تام عندما تحاول معاملتان قفل الموارد مؤمنة سابقا من قبل بعضها البعض. PostgreSQL يكتشف هذه المواقف.

في حالتك، master أقفال مورد، slave ينتظر master, ، و master ينتظر إدخال المستخدم الذي لا يتلقىه أبدا لأنه يتم فقد الاتصال.

كلما PostgreSQL يكتشف الاتصال المفقود، أنه قد استنزاد معاملتها تلقائيا.

للتحكم في الكشف عن فقدان الاتصال، يمكنك استخدام ما يلي PostgreSQL خيارات الاتصال:

tcp_keepalives_idle (integer)

على النظم التي تدعم TCP_KEEPIDLE خيار المقبس، يحدد عدد الثواني بين إرسال Keepalives على اتصال الخمول خلاف ذلك. تستخدم قيمة صفر الافتراضي للنظام. لو TCP_KEEPIDLE غير مدعوم، يجب أن تكون هذه المعلمة صفرية. يتم تجاهل هذه المعلمة للاتصالات التي تم إجراؤها عبر مقبس المجال UNIX.

tcp_keepalives_interval (integer)

على النظم التي تدعم TCP_KEEPINTVL خيار مأخذ المقبس، يحدد المدة، في ثوان، لانتظار الرد على keepalive قبل إعادة الإرسال. تستخدم قيمة صفر الافتراضي للنظام. لو TCP_KEEPINTVL غير مدعوم، يجب أن تكون هذه المعلمة صفرية. يتم تجاهل هذه المعلمة للاتصالات التي تم إجراؤها عبر مقبس المجال UNIX.

tcp_keepalives_count (integer)

على النظم التي تدعم TCP_KEEPCNT خيار مأخذ التوصيل، يحدد عدد keepalives قد تضيع قبل النظر في الاتصال. تستخدم قيمة صفر الافتراضي للنظام. لو TCP_KEEPCNT غير مدعوم، يجب أن تكون هذه المعلمة صفرية. يتم تجاهل هذه المعلمة للاتصالات التي تم إجراؤها عبر مقبس المجال UNIX.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top