سؤال

افترض ما يلي:

لدي قاعدة بيانات تم إعدادها data.mywebsite.com, ، والذي يحل إلى IP 111.111.1.1, ، يعمل من خادم DNS المحلي على شبكتنا.

لدي عدد لا يحصى من تطبيقات ASP وASP.NET وWinForms التي تستخدم سلسلة اتصال data.mywebsite.com كاسم الخادم، وكلها تعمل من الشبكة الداخلية.

ثم يموت الصندوق الذي يقوم بتشغيل قاعدة البيانات، وأنتقل إلى صندوق جديد بعنوان IP 222.222.2.2.

لذا، أقوم بتحديث DNS لـ data.mywebsite.com للإشارة إلى 222.222.2.2.

هل قامت جميع التطبيقات وأجهزة الكمبيوتر التي تقوم بتشغيلها بتخزين عنوان IP القديم الذي تم حله مؤقتًا؟

أفترض أنهم سيكون لديهم.

أي اقتراحات على غرار "لا تغير عنوان IP الخاص بك في كل مرة تقوم فيها بتبديل المربع" لست موضع ترحيب كبير لأنني لا أستطيع السيطرة على هذا الجانب من الوضع، لسوء الحظ.نحن نستخدم حاليًا اسم الجهاز الخاص بالصندوق، والذي يتغير في كل مرة يموت فيها وجميع التطبيقات وما إلى ذلك.يجب أن يتم تحديثه باسم الجهاز الجديد.هذا مؤلم.

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

المحلول

حتى إذا لم يتم تخزين DNS مؤقتًا محليًا على الجهاز، فمن المحتمل أن يتم تخزينه مؤقتًا في مكان ما على طول سلسلة DNS بين الجهاز وخوادم الأسماء، على الأقل لفترة قصيرة.ما أفهمه هو أنه عادةً ما يتم التعامل مع هذا الموقف من خلال الاستيلاء على IP حيث تقوم فقط بإنشاء الجهاز الجديد 111.111.1.1.

ربما سؤال لخطأ الخادم.

نصائح أخرى

أعتقد أنك تبحث عن DNS TTL (مدة البقاء) ..في رأيي، قد تقوم التطبيقات بتخزين IP مؤقتًا بقيمة TTL على الأكثر.مع ذلك، أخشى أن بعض التطبيقات/التقنيات قد تقوم بتخزينها مؤقتًا لفترة أطول (في رأيي خطأ تمامًا)

سيقوم كل جهاز بتخزين عنوان IP مؤقتًا.

طول الفترة الزمنية التي تم تخزينها فيها مؤقتًا هو TTL (مدة البقاء).هذا هو الإعداد الموجود على خادم DNS الخاص بك، إذا قمت بتعيينه على مستوى منخفض جدًا، على سبيل المثال 5 دقائق، فستكون جاهزًا للعمل بسرعة إلى حد ما.قليلا من الاختراق ولكن يجب أن تعمل.

نعم، التعليقات الأخرى صحيحة حيث أن ما يتحكم في ذلك هو DNS TTL المعين لقاعدة بيانات اسم المضيف.mywebsite.com.

سيتعين عليك تحديد الحد الأقصى للوقت الذي ترغب في انتظاره إذا كان لديك فشل في عنوانك الأساسي (111.111.1.1) بعد إجراء التبديل إلى العنوان الثانوي.ستمنحك الإعدادات الأقل وقتًا أسرع للاسترداد، ولكنها ستزيد أيضًا من التحميل وعرض النطاق الترددي على خادم DNS الخاص بك لأنه سيتعين على العملاء إعادة الاستعلام عنه لتحديث ذاكرة التخزين المؤقت الخاصة بهم في كثير من الأحيان.

يمكنك استخدام nslookup باستخدام الخيار -d من موجه cmd لمعرفة أوقات TTL الافتراضية وأوقات TTL المتبقية لخادم DNS الذي تستعلم عنه.

%> nslookup -d google.com

يجب أن تفترض أنه تم صرفها لسببين لم يتم ذكرهما بوضوح من قبل:

1- تقوم العديد من الإصدارات "الحديثة" من عائلات أنظمة التشغيل بالتخزين المؤقت لـ DNS.2- تقوم العديد من التطبيقات بالتخزين المؤقت لـ DNS أو يكون اكتشاف الأخطاء/الفشل ضعيفًا في الاتصالات المباشرة و/أو فتح اتصالات جديدة.من المحتمل أن يشمل هذا عميل قاعدة البيانات الخاصة بك.

وأيضًا، ربما لم يتم توثيق هذا جيدًا.لقد قمت ببعض البحث على Google، ووجدت هذا لـ MySQL:

http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connecting-connection-string.html#connector-net-programming-connecting-errors

ولا تشرح بوضوح سلوكها في هذا الصدد.

واجهت مشكلة مماثلة مع موقع ويب يعمل على تعطيل ميزات إعادة تدوير تجمع التطبيقات ويعمل لمدة أسابيع متتالية.في بعض الأحيان، يتم إعادة تشغيل مربع SQL Server متفاوت المسافات ولسبب ما، لا يتم إعادة الاتصال بـ SqlConnection الخاص بي.كنت أتلقى الخطأ:

حدث خطأ متعلق بالشبكة أو مثيل خاص أثناء إنشاء اتصال بخادم SQL.لم يتم العثور على الخادم أو لا يمكن الوصول إليه.تحقق من أن اسم المثيل صحيح وأنه يتم تكوين خادم SQL للسماح بالاتصالات عن بُعد.(مزود:مزود الأنابيب المسمى ، خطأ:40 - لا يمكن فتح اتصال بخادم SQL)

كان الخادم موجودًا - ويعمل - في الواقع، إذا قمت بإعادة تدوير مجموعة التطبيقات للتو، فسيعمل التطبيق بشكل جيد - لكنني لا أحب إعادة تدوير مجموعات التطبيقات!

كانت الاتصالات التي كانت محتجزة في تجمع الاتصال تستخدم بطريقة أو بأخرى معلومات الاتصال القديمة، ومن الممكن أن تكون عناوين IP قديمة.هذا ما يبدو مشابهًا جدًا لسؤال الناشر، حيث يبدو أنه معلومات DNS مخزنة مؤقتًا، لأنه بمجرد مسح نوع ما من ذاكرة التخزين المؤقت، يعمل التطبيق بشكل جيد.

هذه هي الطريقة التي قمت بحلها - عن طريق فرض إعادة إنشاء جميع الاتصالات الموجودة في التجمع:

Try
    ' Example: SqlDependency, but this could also be any SqlConnection.Open call
    Dim result As Boolean = SqlClient.SqlDependency.Start(ConnStr)
Catch sqlex As SqlClient.SqlException
    SqlClient.SqlConnection.ClearAllPools()
End Try

نموذج التعليمات البرمجية هو مجرد أساسيات مختصرة - يجب تعديله ليناسب موقفك!

يتم تخزين DNS مؤقتًا، ولكن بالنسبة لأي خادم يتحول إلى عنوان IP خاطئ، يمكنك تحديث ملف HOSTS الخاص بالخادم ويجب تحديث IP على الفور.قد يكون هذا حلاً إذا كان لديك عدد محدود من الخوادم التي تصل إلى خادم قاعدة البيانات الخاصة بك.

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