Redis هو نظام إدارة قاعدة بيانات فئة NoSQL (قواعد بيانات إدارة قواعد البيانات غير العلائقية) وهو بالكامل في ذاكرة الوصول العشوائي. للوصول إلى البيانات ، يتم استخدام نموذج "المفتاح" - "القيمة". غالبًا ما يستخدم نظام إدارة قواعد البيانات لتخزين ذاكرات التخزين المؤقت في خدمات قابلة للتطوير ، لتخزين الصور والبيانات الصغيرة.
يستخدم Redis DBMS على نطاق واسع بسبب:
- سرعة عالية ، لأن يتم تخزين جميع البيانات في ذاكرة الوصول العشوائي.
- عبر منصة.
- التوزيع بموجب ترخيص BSD (ينطبق على البرامج مفتوحة المصدر).
يمكن تقدير مدى توزيع تطبيق Redis وقابليته للتطبيق من خلال الكم الهائل من الوثائق مع جميع أنواع الحالات على
الموقع الرسمي للمشروع .
إذا كنت تستخدم القياس الأفقي لخدمات DirectumRX ، فيجب عليك استخدام التثبيت الآمن من Redis للعمل بشكل صحيح مع خدمة تخزين DirectumRX وخدمة الوصول إلى الويب DirectumRX.

سيقوم Redis بتخزين البيانات التشغيلية وذاكرة التخزين المؤقت وغيرها من المعلومات الضرورية لتشغيل الخدمات في وضع القياس بحيث لا تعتمد عملية تفاعل المستخدم مع النظام على التثبيت الذي يعمل معه حاليًا.
لن تخزن Redis بيانات حساسة ولن تكون تحت عبء ثقيل. ولكن في حالة فشل Redis ، سيواجه المستخدمون العديد من الأخطاء عند التبديل بين عمليات التثبيت.
على موقع Redis الرسمي ، هناك طريقتان لضمان القياس الأفقي والتسامح مع الخطأ:
- باستخدام Redis Sentiel .
- باستخدام Redis الكتلة .
النظر في تخصيص هذه الخيارات.
تكوين Redis Sentiel
تم تطبيق الخيار باستخدام Redis Sentiel (Redis Tracking Node) في Redis 2.4 ويتضمن استخدام خدمة Redis Sentiel الإضافية لمراقبة مدى توفر المعالج. يقوم أيضًا بتكوين العقد المتماثلة في حالة فشل المعالج. تحديد أي من العقد SLAVE ستصبح MASTER وإجراء إعادة التكوين أثناء التنقل.
تنفذ المخطط الكلاسيكي:

يمكن أن يكون هناك العديد من العقد SLAVE (حتى 1000 وفقًا للموقع الرسمي) ، من أجل العمل المنتج ، يوصى باستخدام عقدتي SLAVE على الأقل.
عادةً ما يتم تكوين النظام بطريقة يتم تكوين خدمة Redis Sentiel على العقد MASTER و SLAVE ، وإذا فشلت عقدة MASTER ، تقرر عقد المراقبة المتبقية إدخال MASTER جديد.
الإصدار الحالي من Redis متاح للتنزيل من
الموقع الرسمي لمطور المنتج . ومع ذلك ، فإن موقع التوزيع متاح فقط لنظام التشغيل Linux. في وقت واحد ،
كان مشروع Microsoft لنقل أجهزة Redis إلى Windows قيد التطوير ، ولكن في الوقت الحالي توقف المشروع عن التطوير على الإصدار 3.2.100 ، لذلك في هذه المقالة سننظر في خيار النشر الأكثر صلة - على نظام Linux.
كعقد اختبار ، سوف نستخدم مضيفين افتراضيين هما redis1 و redis2 مع توزيع Linux المثبت على دبيان 10.
أولاً ، قم بتحديث قوائم الحزمة من المستودع الافتراضي وتثبيت Redis:
apt-get update && apt-get upgrade apt install redis-server
التحقق من الإصدار:
root@redis1:/home/user
دع redis1 يعمل كعقدة MASTER و redis2 يكون بمثابة عقدة SLAVE.
للقيام بذلك ، نكتب في ملفات تكوين Redis المعلمات الضرورية التي ستتيح لك إنشاء نسخة متماثلة (لم تتسامح بعد مع الخطأ).
بالنسبة لـ redis1 في ملف التكوين /etc/redis/redis.conf ، حدد:
بالنسبة لـ redis2 في ملف التكوين /etc/redis/redis.conf ، حدد:
أعد تشغيل خدمات خادم redis على كلا العقدتين:
root@redis1:/etc/redis
نتحقق من الجانب MASTER من أن العقد أصبحت نسخًا متماثلة وتلقى الأدوار اللازمة:
root@redis1:/etc/redis
على جانب الرقيق ، نرى نفس الموقف:
root@redis2:/etc/redis
تحتاج الآن إلى تكوين النسخة المتماثلة بحيث تتم استعادتها تلقائيًا في حالة فشل إحدى العقد. للقيام بذلك ، نحتاج إلى خدمة تتبع Redis Sentinel.
بناءً على
الوثائق ، يمكن لخدمة مراقبة Redis Sentinel تنفيذ العمليات التالية:
- يتحقق من توفر العقد MASTER و SLAVE ويمكنه إرسال تنبيهات حول عدم إمكانية الوصول إلى العقد.
- في حالة فشل عقدة MASTER ، يمكن أن تضع عقدة الشاهد عقدة SLAVE في وضع MASTER ، بالإضافة إلى إعادة تكوين العقد SLAVE المتبقية ، وتبدأ في العمل مع MASTER الجديد.
- لإجراء تغييرات على ملفات التكوين الخاصة بالعقد MASTER و SLAVE.
من أجل نقاء التجربة ، سنضع خدمة شاهد على جهاز redis3 VM منفصل.
نقوم بتوصيل مستودع Redis بنفس الطريقة وتثبيت حزمة redis-sentinel:
apt install redis-sentinel
بعد التثبيت ، تحتاج إلى إجراء الإعدادات في ملف التكوين لعقدة المراقبة /etc/redis/sentinel.conf:
أعد تشغيل الخدمة بعد إجراء الإعدادات:
root@redis3:/etc/redis
تحقق من أن خدمة التتبع شهدت MASTER و SLAVE:
root@redis3:/etc/redis
نبدأ التجارب.
نقوم بمحاكاة الفشل وإيقاف خدمة خادم redis على عقدة redis1 والحصول على المعلومات الحالية لعقدة الشاهد:
root@redis3:/etc/redis
نرى لقد تغير MASTER.
سنقوم باستعادة تشغيل عقدة redis1 والتحقق من حالتها:
root@redis3:/var/log/redis
نرى أن العقدة تلقت دور SLAVE ، وأن العقدة redis2 هي عقدة MASTER.
محاكاة فشل عقدة redis2 والتحقق من حالة عقدة الشاهد:
root@redis3:/var/log/redis
وحالة العقدة redis1:
root@redis3:/var/log/redis
عظيم ، الآلية تعمل. لكن السؤال الذي يطرح نفسه الآن هو كيف سنربط خدمات DirectumRX الخاصة بنا ، لأنها تحتاج إلى عنوان عقدة واحد. سنقوم بحل الموقف باستخدام خدمة HAProxy.
Redis العقدة وكيل
يمكن أن تعمل أي خدمة TCP tcp كوكيل عكسي لعقد Redis. في هذه المقالة ، سننظر في استخدام HAProxy ، نظرًا لأنه أداة متخصصة مصممة لتوفير إتاحة عالية وموازنة تحميل ، ويتم استخدامها بواسطة خدمات معروفة عالمياً. اقرأ المزيد عن HAProxy
على صفحة المطور .
تثبيت HAProxy على عقدة redis3:
root@redis3:/var/log/redis
في ملف تكوين HAProxy /etc/haproxy/haproxy.cfg ، أضف الإعدادات لطلبات الوكلاء إلى عقد Redis:
… frontend ft_redis bind *:6379 name redis mode tcp default_backend bk_redis backend bk_redis mode tcp option tcp-check tcp-check connect
في هذا التكوين ، تتم الإشارة إلى أننا سنرسل أي طلبات تأتي إلى جميع واجهات الجهاز الظاهري الحالي على العنوان الموجود على المنفذ 6379. سنقوم بنقل الطلبات إلى العقدة التي ستستجيب لوجود دور MASTER.
أعد تشغيل خدمة haproxy:
root@redis3:/etc/haproxy
دعنا نحاول الاتصال باستخدام عميل redis-cli وإنشاء مفتاح اختبار:
root@redis3:/etc/haproxy
إيقاف العقدة redis1 والاستعلام مرة أخرى قائمة المفاتيح:
127.0.0.1:6379> info keyspace Error: Server closed the connection (3.01s) 127.0.0.1:6379> info keyspace
نرى أنه تم قطع الاتصال لبعض الوقت ، ولكن بعد ذلك تمت استعادة الاتصال مرة أخرى وبقيت جميع البيانات في مكانها.
يكفي الآن تسجيل عنوان الوكيل العكسي في ملفات التكوين الخاصة بخدمات DirectumRX للاتصال بـ Redis.
تكوين Redis الكتلة
يعد خيار تجميع نظام المجموعة Redis ، الذي يتم تطبيقه على الإصدار redis 3.0 والإصدارات الأحدث ، حلاً لإنشاء وإدارة نظام مع تجزئة البيانات وتكرارها. يؤدي مهام إدارة العقدة والنسخ المتماثل ومزامنة البيانات على العقد وضمان الوصول إلى تطبيق العميل إلى عقدة MASTER في حالة فشل أحد العقد MASTER المتعددة.

تعمل Redis Cluster في الوضع المتعدد ، حيث يمكن أن تحتوي كل عقدة MASTER على عقد SLAVE واحد أو أكثر (حتى 1000).
القياس هو الوظيفة الرئيسية للكتلة. بالإضافة إلى ذلك ، يمكن أن تضمن المجموعة تسامح الأعطال في خدمة Redis:
- إذا لم تنجح بعض العقد ، فإن الكتلة تعيد توزيع الحمل منها على عقد أخرى ؛
- في حالة عدم عمل العقد الرئيسية ، تنتهي المجموعة بالكامل.
قد تنشأ حالة عندما يكتب العميل 2 إلى العقدة M2. يجيب M2 "موافق" ويحاول الكتابة إلى S2. في الوقت نفسه ، لا تنتظر M2 الإكمال الصحيح لتبادل البيانات مع S2 ، ولكنها تستجيب للعميل على الفور. في هذه الحالة ، قد لا تحتوي النسخة المتماثلة S2 على كافة البيانات. لذلك ، يوصى باستخدام عدة نسخ طبق الأصل من SLAVE.
قد ينشأ أيضًا موقف عندما يتوقف M1 و M3 عن "رؤية" M2 ، ولا يزال العميل يواصل كتابة البيانات إلى M2. إذا استمر عدم التوافر لبعض الوقت (معلمة انقضاء عقدة نظام المجموعة) ، فسيتم وضع S2 في هذه الحالة في وضع MASTER ، وسوف يتوقف M2 عن العمل بمفرده.
توصي الوثائق الرسمية باستخدام 6 عقد - مثيل Redis واحد لكل عقدة ، مما يسمح بمزيد من الموثوقية ، ولكن لا أحد يمنع استخدام ثلاث عقد مع طبولوجيا الاتصال التالية:

في حالة فشل أحد العقد الفعلية ، ستذهب النسخ المتماثلة SLAV المقابلة إلى وضع MASTER ، ولن يتم تعطيل العملية.
ننفذ 3 أجهزة افتراضية (redis1 و redis2 و redis3) على منصة الاختبار ، ستعمل كل واحدة منها على مثلي Redis.
سيتصل تطبيق العميل بمنفذ محدد في ملف تكوين العميل ، وبالتالي ، يجب أن تعمل أزواج MASTER - SLAVE على نفس المنافذ.
بالنسبة للزوج M1 - S1 ، سوف نستخدم المنفذ 6381
بالنسبة للزوج M2 - S2 ، سوف نستخدم المنفذ 6382
بالنسبة للزوج M3 - S3 ، سوف نستخدم المنفذ 6383
تحضير ملفات التكوين
على redis1:
cp /etc/redis/redis.conf /etc/redis/m1_redis.conf cp /etc/redis/redis.conf /etc/redis/s2_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak
على redis2:
cp /etc/redis/redis.conf /etc/redis/m2_redis.conf cp /etc/redis/redis.conf /etc/redis/s3_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak
على redis3:
cp /etc/redis/redis.conf /etc/redis/m3_redis.conf cp /etc/redis/redis.conf /etc/redis/s1_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak
املأ ملفات التكوين وفقًا للقالب:
bind <IP- > protected-mode no
لنطلق عقد Redis:
العقدة redis1:
root@redis1:/etc/redis
عقدة Redis2:
root@redis2:/etc/redis
عقدة Redis3:
root@redis3:/etc/redis
لتكوين الكتلة ، تحتاج إلى استخدام الأداة المساعدة للعميل redis-cli ، لتمريرها قائمة من أزواج منافذ ip: من الخوادم التي ستلعب أدوار MASTER و SLAVE:
redis-cli --cluster create redis1-ip:6381 redis2-ip:6382 redis3-ip:6383 redis1-ip:6382 redis2-ip:6383 redis3-ip:6381 --cluster-replicas 1
، حيث يخبرك الخيار --cluster-replicas 1 بعدد SLAVE الذي سيحصل عليه كل سيد ، ويتم تحديده تلقائيًا من قائمة النسخ المتماثلة المنقولة.
root@redis1:~/redis/src
تم بناء الكتلة بشكل صحيح. سنقوم بعرض معلومات حول الكتلة:
root@redis1:~/redis/src
لاختبار نسخة متماثلة محددة ، كما هو الحال مع Redis Sentiel ، يمكنك استخدام أمر النسخ المتماثل INFO:
root@redis1:~/redis/src
دعنا نحاول إنشاء عدة مفاتيح والتحقق من ظهور هذه المفاتيح على النسخ المتماثلة:
192.168.9.51:6381> SET key1 test1 -> Redirected to slot [9189] located at 192.168.9.52:6382 OK 192.168.9.52:6382> SET key2 test2 -> Redirected to slot [4998] located at 192.168.9.51:6381 OK 192.168.9.51:6381> SET key3 test3 OK 192.168.9.51:6381>
تحقق من M2:
root@redis2:/home/user
وعلى M3:
root@redis3:/home/user
سنقوم بتعطيل عقدة redis1 وتحقق من كيفية عمل S1:
192.168.9.52:6382> CLUSTER NODES <b>182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave,fail d499af3672b3063c7239572ec311ad3160f280ae 1569509904727 1569509900000 4 connected</b> 485ffb786e9763955e6f10ffc59247690ad9bc11 <i>192.168.9.53:6381@16381 master</i> - 0 1569510017272 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569510018274 5 connected <b>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 master,fail - 1569509906731 1569509901721 1 connected</b> 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569510019275 3 connected 10923-16383 d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 myself,master - 0 1569510017000 2 connected 5461-10922
نرى معلومات حول فشل M1 و S2 وأن S3 قد تحول إلى وضع MASTER.
تحقق من مكان تخزين المفاتيح:
192.168.9.52:6382> GET key1 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6381> GET key3 "test3" 192.168.9.53:6381>
المفاتيح التي تم تخزينها مسبقًا على redis1 متاحة الآن على redis3.
قم باستعادة تشغيل عقدة redis1 وتحقق من حالة العقدتين M1 و S2:
192.168.9.53:6381> CLUSTER NODES <i>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 slave 485ffb786e9763955e6f10ffc59247690ad9bc11 0 1569511658217 7 connected 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave d499af3672b3063c7239572ec311ad3160f280ae 0 1569511657000 4 connected</i> d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 master - 0 1569511656000 2 connected 5461-10922 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569511656000 3 connected 10923-16383 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381@16381 myself,master - 0 1569511656000 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569511657216 5 connected
استعادت صحة M1 و S2 ، لكن الآن M1 في وضع SLAVE.
والمفاتيح موجودة أيضًا على عقدة redis3:
192.168.9.53:6383> GET key1 -> Redirected to slot [9189] located at 192.168.9.52:6382 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6383> GET key3 -> Redirected to slot [935] located at 192.168.9.53:6381 "test3"
تم تكوين الكتلة واختبار استرداد Redis.
للوصول إلى خدمات DirectumRX ، ستحتاج أيضًا إلى تكوين الوكلاء العكسيين ، كما في حالة إعداد Redis Sentiel.
بدلا من الاستنتاج
لم تؤخذ هذه المقالة في الاعتبار طريقة أخرى لزيادة التسامح مع الخطأ Redis - باستخدام مدير موارد نظام مجموعة خارجية ، على سبيل المثال ،
منظم ضربات القلب . في هذه الحالة ، سيكون من الممكن الحصول على عقدتين ، ومع ذلك ، هناك احتمال كبير بفقدان البيانات في حالة الطوارئ.
بالنسبة للوكيل العكسي (في هذه الحالة ، HAProxy) ، من المستحسن أيضًا توفير التسامح مع الخطأ ، ولكن هذه المشكلة كانت أيضًا خارج نطاق هذه المقالة. إذا كنت مهتمًا بالموضوع ، فيمكن أيضًا النظر في خيارات النشر هذه في مقالات منفصلة مع التوليف التدريجي واختبار النتائج.
يمكنك العثور على الروابط أدناه لمعرفة المزيد حول الموضوع:
Redis كتلة البرنامج التعليميوثائق الحارس Redisدليل تكوين HAProxy .