استكشاف أخطاء فقدان البيانات وإصلاحها في Azure Cache لـ Redis

تتناول هذه المقالة كيفية تشخيص فقد البيانات الفعلي أو المتصور الذي قد يحدث في Azure Cache for Redis.

إشعار

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

فقدان جزئي للمفاتيح

لا يقوم Azure Cache for Redis بحذف المفاتيح عشوائيًا بعد تخزينها في الذاكرة. ومع ذلك، فإنه يزيل المفاتيح استجابةً لسياسات انتهاء الصلاحية وسياسات الإخلاء وأوامر حذف المفاتيح الصريحة. يمكنك تشغيل هذه الأوامر على وحدة التحكم أو من خلال CLI.

المفاتيح التي تمت كتابتها إلى العقدة الأساسية في Premium أو Standard Azure Cache لمثيل Redis قد لا تكون متاحة أيضًا في نسخة متماثلة على الفور. يتم نسخ البيانات من النسخة الأساسية إلى النسخة المتماثلة بطريقة غير متزامنة وغير محظورة.

إذا وجدت أن المفاتيح قد اختفت من ذاكرة التخزين المؤقت، فتحقق من الأسباب المحتملة التالية:

السبب ‏‏الوصف
انتهاء صلاحية المفتاح تتم إزالة المفاتيح بسبب المهلات المحددة عليها.
إخلاء المفتاح تتم إزالة المفاتيح تحت ضغط الذاكرة.
حذف المفتاح تتم إزالة المفاتيح بأوامر الحذف الصريحة.
النسخ المتماثل غير المتزامن المفاتيح غير متوفرة في نسخة متماثلة بسبب التأخيرات في نسخ البيانات.

انتهاء صلاحية المفتاح

يزيل Azure Cache لـ Redis المفتاح تلقائيًا إذا تم تعيين مهلة للمفتاح وانقضت تلك الفترة. لمزيد من المعلومات حول انتهاء صلاحية مفتاح Redis، راجع وثائق الأمر EXPIRE. يمكن أيضًا تعيين قيم المهلة باستخدام أوامر SET وSETEX وGETSET وأوامر *STORE أخرى.

للحصول على إحصائيات حول عدد المفاتيح التي انتهت صلاحيتها، استخدم الأمر INFO. يعرض قسم Stats العدد الإجمالي للمفاتيح منتهية الصلاحية. يوفر قسم Keyspace مزيدًا من المعلومات حول عدد المفاتيح ذات المهلات ومتوسط قيمة المهلة.


# Stats

expired_keys:46583

# Keyspace

db0:keys=3450,expires=2,avg_ttl=91861015336

يمكنك أيضًا إلقاء نظرة على المقاييس التشخيصية لذاكرة التخزين المؤقت الخاصة بك، لمعرفة ما إذا كان هناك ارتباط بين وقت فقد المفتاح والارتفاع المفاجئ في المفاتيح منتهية الصلاحية. راجع ملحق تصحيح أخطاء Redis Keyspace Misses للحصول على استخدام إخطارات keyspace أو MONITOR لتصحيح هذه الأنواع من المشكلات.

إخلاء المفتاح

يتطلب Azure Cache لـ Redis مساحة ذاكرة لتخزين البيانات. يقوم بإزالة المفاتيح لتحرير الذاكرة المتوفرة عند الضرورة. عندما تقترب قيم used_memory أو used_memory_rss في الأمر INFO من إعداد maxmemory المهيأ، تبدأ ذاكرة التخزين المؤقت Azure لـ Redis في طرد المفاتيح من الذاكرة في نهج ذاكرة التخزين المؤقت.

يمكنك مراقبة عدد المفاتيح التي تم إخلاؤها باستخدام الأمر INFO:

# Stats

evicted_keys:13224

يمكنك أيضًا الاطلاع على المقاييس التشخيصية لذاكرة التخزين المؤقت لمعرفة ما إذا كان هناك ارتباط بين وقت فقد المفتاح والارتفاع المفاجئ في المفاتيح التي تم إخلاؤها. راجع ملحق تصحيح أخطاء Redis Keyspace Misses للحصول على معلومات حول استخدام إعلامات مسافة المفاتيح أو MONITOR لتصحيح هذه الأنواع من المشكلات.

حذف المفتاح

يمكن لعملاء Redis إصدار الأمر DEL أو HDEL لإزالة المفاتيح بشكل صريح من Azure Cache for Redis. يمكنك تتبع عدد عمليات الحذف باستخدام الأمر INFO. إذا تم استدعاء أوامر DEL أو HDEL، فسيتم إدراجها في قسم Commandstats.

# Commandstats

cmdstat_del:calls=2,usec=90,usec_per_call=45.00

cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00

النسخ المتماثل غير المتزامن

يتم تكوين أي ذاكرة تخزين مؤقت لـ Azure لمثيل Redis في الطبقة القياسية أو المميزة باستخدام عقدة أساسية ونسخة متماثلة واحدة على الأقل. يتم نسخ البيانات من النسخة الأساسية إلى النسخة المتماثلة بشكل غير متزامن باستخدام عملية في الخلفية. يصف موقع الويب redis.io كيفية عمل نسخ بيانات Redis بشكل عام. بالنسبة للسيناريوهات التي يكتب فيها العملاء إلى Redis بشكل متكرر، يمكن أن يحدث فقد جزئي للبيانات لأنه لا يمكن ضمان أن يكون النسخ المتماثل فوريًا. على سبيل المثال، إذا تعطل الأساسي بعد أن يكتب العميل مفتاحًا له، ولكن قبل تتاح الفرصة لعملية الخلفية لإرسال هذا المفتاح إلى النسخة المتماثلة، فسيتم فقد المفتاح عندما تتولى النسخة المتماثلة مكانها الأساسي الجديد.

فقدان كبير أو كامل للمفاتيح

إذا اختفت معظم المفاتيح أو جميعها من ذاكرة التخزين المؤقت، فتحقق من الأسباب المحتملة التالية:

السبب ‏‏الوصف
مسح المفتاح تم حذف المفاتيح يدويًا.
تحديد قاعدة بيانات غير صحيح تم تعيين Azure Cache لـ Redis لاستخدام قاعدة بيانات غير افتراضية.
فشل مثيل Redis خادم Redis غير متاح.

مسح المفتاح

يمكن للعملاء استدعاء الأمر FLUSHDB لإزالة جميع المفاتيح في قاعدة بيانات واحدة أو FLUSHALL لإزالة جميع المفاتيح من جميع قواعد البيانات في ذاكرة التخزين المؤقت لـ Redis. لمعرفة ما إذا تم مسح المفاتيح، استخدم الأمر INFO. يوضح القسم Commandstats ما إذا كان قد تم استدعاء أمرين FLUSH:

# Commandstats

cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00

cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00

تحديد قاعدة بيانات غير صحيح

يستخدم Azure Cache for Redis قاعدة البيانات db0 افتراضيًا. إذا قمت بالتبديل إلى قاعدة بيانات أخرى (على سبيل المثال، db1) وحاولت قراءة المفاتيح منها، فلن يجدها Azure Cache for Redis هناك. كل قاعدة بيانات هي وحدة منفصلة منطقيًا وتحتوي على مجموعة بيانات مختلفة. استخدم الأمر SELECT لاستخدام قواعد البيانات الأخرى المتاحة وابحث عن المفاتيح في كل منها.

فشل مثيل Redis

Redis هو مخزن بيانات في الذاكرة. يتم الاحتفاظ بالبيانات على الأجهزة الفعلية أو الظاهرية التي تستضيف ذاكرة التخزين المؤقت Redis. يعمل مثيل Azure Cache لـ Redis في الطبقة الأساسية على جهاز ظاهري واحد (VM). إذا كان الجهاز الظاهري معطلاً، فستفقد جميع البيانات التي قمت بتخزينها في ذاكرة التخزين المؤقت.

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

ضع في اعتبارك استخدام استمرار بيانات Redis والنسخ الجغرافي لتحسين حماية بياناتك ضد حالات فشل البنية التحتية هذه.

معلومات اضافيه

توفر هذه المقالات مزيدًا من المعلومات حول تجنب فقدان البيانات: