रेडिस सेंटिनल रेडिस के लिए एक सरल और स्वचालित उच्च उपलब्धता (एचए) समाधान प्रदान करता है। यदि आप जानते हैं कि MongoDB चुनाव कैसे काम करता है, तो यह बहुत दूर नहीं है। शुरू करने के लिए, आपके पास एक दिया गया मास्टर है जो एन संख्या के दासों की नकल करता है। वहां से, आपके पास प्रहरी डेमॉन चल रहे हैं, चाहे वह आपके एप्लिकेशन सर्वर पर हो या सर्वर पर रेडिस चल रहा हो। ये मास्टर के स्वास्थ्य पर नज़र रखते हैं।
यदि एक प्रहरी को पता चलता है कि एक मास्टर गैर-उत्तरदायी है, तो वह अन्य प्रहरी को एक SDOWN (सब्जेक्टिवली डाउन) संदेश प्रसारित करेगा। फिर, एक बार जब एक कोरम पूरा हो जाता है कि एक मास्टर नीचे है, तो यह एक ओडाउन (ऑब्जेक्टिवली डाउन) प्रसारित करेगा, और नया मास्टर चुना जाएगा। चूंकि आपको ODOWN स्थिति तक पहुंचने के लिए सहमत होने के लिए प्रहरी के कोरम, या बहुमत की आवश्यकता होती है, इसलिए संबंधों से बचने के लिए विषम संख्या में प्रहरी चलाना हमेशा सबसे अच्छा अभ्यास है।
नोट:सेंटिनल के साथ सर्वश्रेष्ठ प्रदर्शन के लिए 2.8 शाखा या उच्चतर से रेडिस के संस्करण का उपयोग करने की अत्यधिक अनुशंसा की जाती है।
यह कैसे काम करता है
प्रहरी चल रहे रेडिस इंस्टेंस की कॉन्फ़िगरेशन फ़ाइलों को फिर से लिखकर विफलता को संभालते हैं। आइए एक परिदृश्य से गुजरते हैं:
मान लें कि हमारे पास एक मास्टर "ए" है जो दास "बी" और "सी" की नकल करता है। हमारे एप्लिकेशन सर्वर पर तीन प्रहरी (s1, s2, s3) चल रहे हैं, जो रेडिस को लिखते हैं। इस बिंदु पर "ए", हमारे वर्तमान मास्टर ऑफ़लाइन हो जाते हैं। हमारे प्रहरी सभी "ए" को ऑफ़लाइन देखते हैं, और एक दूसरे को एसडीओवन संदेश भेजते हैं। तब वे सभी सहमत होते हैं कि "ए" नीचे है, इसलिए "ए" ओडाउन स्थिति में होना तय है। यहां से, यह देखने के लिए चुनाव होता है कि सबसे आगे कौन है, और इस मामले में "बी" को नए मास्टर के रूप में चुना जाता है।
"बी" के लिए कॉन्फ़िगरेशन फ़ाइल सेट की गई है ताकि यह अब किसी का दास न हो। इस बीच, "सी" के लिए कॉन्फ़िगरेशन फ़ाइल को फिर से लिखा गया है ताकि यह अब "ए" का दास न हो बल्कि "बी" हो। यहां से सब कुछ सामान्य रूप से जारी है। यदि "ए" वापस ऑनलाइन आता है, तो प्रहरी इसे पहचान लेंगे, और "ए" के लिए "बी" के दास होने के लिए कॉन्फ़िगरेशन फ़ाइल को फिर से लिखेंगे, क्योंकि "बी" वर्तमान मास्टर है।
कॉन्फ़िगरेशन
प्रहरी को कॉन्फ़िगर करना उतना कठिन नहीं है जितना कोई सोचता है। वास्तव में, सबसे कठिन चीजों में से एक यह चुनना है कि आपकी प्रहरी प्रक्रियाओं को कहां रखा जाए। यदि संभव हो तो मैं व्यक्तिगत रूप से उन्हें आपके ऐप सर्वर पर चलाने की सलाह देता हूं। संभवत:यदि आप इसे सेट कर रहे हैं, तो आप अपने मास्टर के लिए उपलब्धता लिखने के बारे में चिंतित हैं। जैसे, प्रहरी इस बात की अंतर्दृष्टि प्रदान करते हैं कि आपका एप्लिकेशन सर्वर मास्टर से बात कर सकता है या नहीं। निश्चित रूप से आपके रेडिस इंस्टेंस सर्वर पर भी सेंटिनल्स चलाने के लिए आपका स्वागत है।
कॉन्फ़िगरेशन चरण के साथ शुरू करने के लिए, कृपया यहां मिली उदाहरण फ़ाइल का संदर्भ लें। यह एक उदाहरण सेंटिनल.कॉन्फ है जो उबंटू 14.04 पर रेडिस 2.8.4 के साथ मिला है, लेकिन रेडिस के किसी भी 2.8.x संस्करण के साथ काम करना चाहिए। मैंने शीर्ष पर दो पंक्तियों को जोड़ने की स्वतंत्रता ली है जिसे मैं व्यवहार में उपयोग करना पसंद करता हूं:
daemonize yes
logfile /var/log/redis/redis-sentinel.log
यह प्रहरी प्रक्रिया को डिमोनाइज़ मोड में रखता है, और इसके सभी संदेशों को स्टडआउट के बजाय एक लॉग फ़ाइल में लॉग करता है।
यहां बहुत सारे विन्यास योग्य विकल्प हैं, और अधिकांश पर बहुत अच्छी तरह से टिप्पणी की गई है। हालांकि, इस पोस्ट के लिए हम सिर्फ दो पर ध्यान देंगे।
सबसे महत्वपूर्ण हिस्सा प्रहरी को बता रहा है कि आपका वर्तमान गुरु कहाँ रहता है। यह इस पंक्ति में संदर्भित है:
sentinel monitor mymaster 127.0.0.1 6379 2
यह प्रहरी को "माईमास्टर" की निगरानी करने के लिए कहता है (यह एक मनमाना नाम है, जैसा कि आप फिट देखते हैं, इसे नाम देने के लिए स्वतंत्र महसूस करें) और किसी दिए गए पोर्ट पर दिए गए आईपी, साथ ही फेलओवर के लिए कोरम को पूरा करने के लिए कितने प्रहरी की आवश्यकता होती है ( न्यूनतम 2) । यदि आप मानक पोर्ट 6379 पर नहीं चल रहे हैं, तो जिन हिस्सों को आप यहां बदलना चाहते हैं, वे आपके मास्टर और उसके पोर्ट का आईपी पता हैं।
इसके बाद, आप निम्न पंक्ति को बदलना चाह सकते हैं:
sentinel down-after-milliseconds mymaster 30000
यह वह समय है जब आप चाहते हैं कि कोई प्रहरी SDOWN में मास्टर घोषित करने से पहले प्रतीक्षा करे। डिफ़ॉल्ट 30 सेकंड है, मैं आमतौर पर इसे थोड़ा कम करके 10 सेकंड करना पसंद करता हूं। आप इसे बहुत कम नहीं करना चाहते हैं; अन्यथा आपको अक्सर विफलताओं के साथ समस्या हो सकती है।
कुछ अन्य विकल्पों पर एक नज़र डालने के लिए स्वतंत्र महसूस करें। यदि आप विफलताओं के होने पर उनका ट्रैक रखना पसंद करते हैं, तो उनमें से एक जो बहुत से उपयोगकर्ताओं के लिए रुचिकर हो सकती है, वह है अधिसूचना स्क्रिप्ट।
एक बार जब आप अपना सेंटीनेल.कॉन्फ़ कॉन्फ़िगर कर लेते हैं, जैसा कि आप फिट देखते हैं, तो निम्न कमांड के साथ डेमॉन शुरू करें:
redis-server /path/to/sentinel.conf --sentinel
परीक्षण विफलता
एक बार जब आपके पास अपने सभी प्रहरी ऑनलाइन हो जाते हैं, तो यह सुनिश्चित करने के लिए कि यह सब ठीक से कॉन्फ़िगर किया गया है, फ़ेलओवर के लिए एक सूखी दौड़ करना संभव है।
पहली चीजें पहले। रेडिस-क्ली के माध्यम से अपने प्रहरी से जुड़ें:
redis-cli -p 26379
यदि आप प्रहरी के बारे में कुछ जानकारी प्राप्त करना चाहते हैं, तो बस यह आदेश चलाएँ:
127.0.0.1:26379> INFO
यह आपको जानकारी देगा, जैसे कि वर्तमान मास्टर कौन है, उसके पास कितने दास हैं, और कितने प्रहरी इसकी निगरानी कर रहे हैं।
विफलता का परीक्षण करने के लिए, बस निष्पादित करें:
127.0.0.1:26379> SENTINEL failover mymaster
यह वर्तमान मास्टर पर एक ODOWN को बाध्य करेगा और एक विफलता का कारण बनेगा। कुछ ही समय बाद, यदि आप "INFO" कमांड को फिर से चलाते हैं, तो अब आपको एक नया मास्टर सूचीबद्ध दिखाई देगा।
निष्कर्ष
उम्मीद है कि यह रेडिस और सेंटिनल को रहस्योद्घाटन करने में मददगार रहा है। यदि आपके कोई प्रश्न हैं, तो बेझिझक नीचे पोस्ट करें!