Redis والتخزين المؤقت المتقدم

Redis Sentinel والتوافر العالي

20 دقيقة الدرس 21 من 30

Redis Sentinel والتوافر العالي

يوفر Redis Sentinel توافرًا عاليًا لـ Redis من خلال الفشل التلقائي والمراقبة وإدارة التكوين. يضمن بقاء نشر Redis الخاص بك قيد التشغيل حتى عند فشل العقد الرئيسية.

ما هو Redis Sentinel؟

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

الميزات الرئيسية: يوفر Sentinel المراقبة والإشعارات والفشل التلقائي، ويعمل كموفر تكوين للعملاء لاكتشاف عنوان الخادم الرئيسي الحالي.

كيف يعمل Sentinel

يستخدم Sentinel نظام قائم على النصاب حيث تراقب عمليات Sentinel متعددة مثيلات Redis وتصوت لتحديد ما إذا كان الخادم الرئيسي معطلاً وأي نسخة متماثلة يجب ترقيتها.

بنية Sentinel:
┌─────────────┐
│ العميل │
└──────┬──────┘
│ طلب عنوان الخادم الرئيسي
┌──────▼──────┐
│ Sentinel 1 │
└─────────────┘
│ مراقبة
┌──────▼──────┐ ┌─────────────┐
│ الرئيسي │────>│ نسخة 1 │
└─────────────┘ └─────────────┘

┌──────▼──────┐
│ نسخة 2 │
└─────────────┘

تكوين Redis Sentinel

أنشئ ملف تكوين sentinel.conf لإعداد سلوك المراقبة والفشل التلقائي:

sentinel.conf:
# مراقبة خادم رئيسي باسم "mymaster" على 127.0.0.1:6379
# النصاب 2 يعني أن 2 Sentinels يجب أن يتفقوا على الفشل التلقائي
sentinel monitor mymaster 127.0.0.1 6379 2

# يعتبر الخادم الرئيسي معطلاً بعد 5000ms دون استجابة
sentinel down-after-milliseconds mymaster 5000

# مهلة عملية الفشل التلقائي
sentinel failover-timeout mymaster 10000

# عدد النسخ المتماثلة التي يمكن إعادة تكوينها في وقت واحد
sentinel parallel-syncs mymaster 1

# مصادقة اختيارية
sentinel auth-pass mymaster yourpassword
نصيحة: قم دائمًا بتشغيل 3 مثيلات Sentinel على الأقل في الإنتاج لضمان النصاب المناسب وتجنب سيناريوهات انقسام الدماغ.

بدء Sentinel

قم بتشغيل Sentinel باستخدام أمر redis-sentinel أو redis-server في وضع sentinel:

# الطريقة 1: استخدام redis-sentinel
redis-sentinel /path/to/sentinel.conf

# الطريقة 2: استخدام redis-server
redis-server /path/to/sentinel.conf --sentinel

أوامر Sentinel

راقب وأدر نشر Sentinel الخاص بك باستخدام هذه الأوامر:

# الاتصال بـ Sentinel
redis-cli -p 26379

# الحصول على عنوان الخادم الرئيسي
SENTINEL get-master-addr-by-name mymaster

# عرض جميع الخوادم الرئيسية المراقبة
SENTINEL masters

# الحصول على النسخ المتماثلة للخادم الرئيسي
SENTINEL replicas mymaster

# الحصول على مثيلات Sentinel التي تراقب الخادم الرئيسي
SENTINEL sentinels mymaster

# فرض الفشل التلقائي
SENTINEL failover mymaster

# التحقق من أن الخادم الرئيسي معطل
SENTINEL ckquorum mymaster

# إعادة تعيين حالة Sentinel
SENTINEL reset mymaster

عملية الفشل التلقائي

عندما يكتشف Sentinel فشل الخادم الرئيسي، يتبع هذه العملية:

خطوات الفشل التلقائي:
  1. الكشف: تتفق عدة Sentinels على أن الخادم الرئيسي معطل (يصل إلى النصاب)
  2. انتخاب القائد: تنتخب Sentinels قائدًا لأداء الفشل التلقائي
  3. اختيار النسخة المتماثلة: يختار القائد أفضل نسخة بناءً على إزاحة النسخ المتماثل والأولوية
  4. الترقية: يتم ترقية النسخة المتماثلة المحددة إلى رئيسية باستخدام SLAVEOF NO ONE
  5. إعادة التكوين: يتم إعادة تكوين النسخ المتماثلة الأخرى للنسخ من الخادم الرئيسي الجديد
  6. الإشعار: يتم إخطار العملاء بعنوان الخادم الرئيسي الجديد

ربط العملاء بـ Sentinel

يجب على العملاء الاتصال بـ Sentinel لاكتشاف الخادم الرئيسي الحالي، وليس تشفير عنوان الخادم الرئيسي:

مثال PHP مع Predis:
$sentinels = [
'tcp://127.0.0.1:26379',
'tcp://127.0.0.1:26380',
'tcp://127.0.0.1:26381'
];

$client = new Predis\Client($sentinels, [
'replication' => 'sentinel',
'service' => 'mymaster'
]);

# يكتشف العميل الخادم الرئيسي تلقائيًا
$client->set('key', 'value');
مثال Node.js مع ioredis:
const Redis = require('ioredis');

const redis = new Redis({
sentinels: [
{ host: '127.0.0.1', port: 26379 },
{ host: '127.0.0.1', port: 26380 },
{ host: '127.0.0.1', port: 26381 }
],
name: 'mymaster'
});

redis.set('key', 'value');

الفحوصات الصحية والمراقبة

يراقب Sentinel باستمرار مثيلات Redis ويبلغ عن حالتها:

# فحص صحة Sentinel
redis-cli -p 26379 PING
# الإخراج: PONG

# الحصول على معلومات تفصيلية عن الخادم الرئيسي
SENTINEL master mymaster
# يعرض: ip، port، flags، num-slaves، quorum، إلخ.

# مراقبة أحداث Sentinel في الوقت الفعلي
redis-cli -p 26379 --csv psubscribe '*'
نصيحة المراقبة: اشترك في قنوات pub/sub الخاصة بـ Sentinel لتلقي إشعارات في الوقت الفعلي حول عمليات الفشل التلقائي وإعادة التكوين وتغييرات الحالة.

إشعارات Sentinel

قم بتكوين Sentinel لإرسال إشعارات عند حدوث أحداث مهمة:

سكريبت إشعار البريد الإلكتروني:
# sentinel.conf
sentinel notification-script mymaster /path/to/notify.sh

# notify.sh
#!/bin/bash
EVENT=$1
MASTER=$2
echo "Sentinel event: $EVENT for $MASTER" | mail -s "Redis Alert" admin@example.com

أولوية النسخة المتماثلة

تحكم في النسخ المتماثلة المفضلة أثناء الفشل التلقائي باستخدام replica-priority:

# في redis.conf لكل نسخة متماثلة
# الأرقام الأقل = أولوية أعلى (0 = لا ترقى أبدًا)
replica-priority 100

# التحقق من الأولويات
SENTINEL replicas mymaster
تحذير: لا تقم أبدًا بتشغيل عدد زوجي من Sentinels (2، 4، 6). استخدم دائمًا أرقام فردية (3، 5، 7) لتجنب سيناريوهات انقسام الدماغ حيث لا يمكن الوصول إلى النصاب.

أفضل الممارسات

إعداد الإنتاج:
  • قم بتشغيل 3 مثيلات Sentinel على الأقل عبر خوادم/مناطق توافر مختلفة
  • استخدم نفس قيمة النصاب عبر جميع تكوينات Sentinel
  • قم بتعيين down-after-milliseconds بشكل مناسب (5000-30000ms نموذجي)
  • راقب سجلات Sentinel لأحداث الفشل التلقائي والشذوذ
  • اختبر إجراءات الفشل التلقائي بانتظام في بيئات التدريج
  • لا تقم أبدًا بتشفير عناوين الخوادم الرئيسية في كود التطبيق
  • استخدم المصادقة (sentinel auth-pass) في الإنتاج
تمرين: قم بإعداد مجموعة Redis Sentinel مع خادم رئيسي واحد ونسختين متماثلتين و3 Sentinels. حاكي فشل الخادم الرئيسي بإيقاف عملية الخادم الرئيسي ولاحظ الفشل التلقائي. تحقق من أن العملاء لا يزالون قادرين على الاتصال بعد الفشل التلقائي.