
परिचय
जब सब कुछ स्वस्थ होता है तो Redis रॉक सॉलिड लगता है। असली टेस्ट तब शुरू होता है जब कुछ टूटता है। एक नोड क्रैश होता है, एक वर्चुअल मशीन रीबूट होती है, एक कंटेनर गायब हो जाता है, या एक नेटवर्क समस्या सिस्टम के हिस्से को अलग कर देती है।
आगे क्या होता है यह पूरी तरह से इस बात पर निर्भर करता है कि रेप्लिकेशन और हाई उपलब्धता को कैसे डिज़ाइन किया गया था। कई टीमें मानती हैं कि Redis स्वचालित रूप से विफलताओं को संभालता है, लेकिन ऐसा नहीं है। Redis बिल्डिंग ब्लॉक्स प्रदान करता है, तैयार समाधान नहीं।
रेप्लिकेशन और हाई उपलब्धता अलग-अलग समस्याओं को हल करते हैं। Redis दोनों का समर्थन करता है, लेकिन लचीला प्रोडक्शन सिस्टम बनाने के लिए अंतर को समझना महत्वपूर्ण है।
Redis रेप्लिकेशन वास्तव में क्या करता है
इसके मूल में, Redis रेप्लिकेशन एक नोड से दूसरे नोड्स पर डेटा कॉपी करने के बारे में है। एक प्राइमरी नोड, जिसे आमतौर पर मास्टर कहा जाता है, सभी राइट ऑपरेशन्स को संभालता है। एक या अधिक रेप्लिका नोड्स परिवर्तनों की एक निरंतर स्ट्रीम प्राप्त करते हैं और अपने डेटा को सिंक में रखते हैं।
रेप्लिकेशन तीन मुख्य कारणों से मौजूद है: रीड स्केलिंग, फेलओवर तैयारी, और डेटा रिडंडेंसी। हालांकि, रेप्लिकेशन अकेले हाई उपलब्धता की गारंटी नहीं देता। यह केवल इसे बनाने के लिए आवश्यक सामग्री प्रदान करता है।
रेप्लिकेशन हुड के नीचे कैसे काम करता है
जब कोई रेप्लिका मास्टर से कनेक्ट होती है, तो यह एक प्रारंभिक सिंक्रनाइज़ेशन प्रक्रिया के साथ शुरू होती है। मास्टर अपने वर्तमान डेटा का एक स्नैपशॉट बनाता है और इसे रेप्लिका को भेजता है। रेप्लिका इस स्नैपशॉट को मेमोरी में लोड करता है।
प्रारंभिक सिंक के बाद, मास्टर सभी बाद के राइट कमांड्स को रेप्लिका पर स्ट्रीम करता है। रेप्लिका सुसंगत रहने के लिए इन कमांड्स को उसी क्रम में लागू करता है।
यह दृष्टिकोण कुशल और सरल है, लेकिन यह महत्वपूर्ण ट्रेडऑफ पेश करता है। रेप्लिकेशन डिफ़ॉल्ट रूप से एसिंक्रोनस है, जिसका अर्थ है कि हमेशा एक छोटी विंडो होती है जहां डेटा मास्टर पर मौजूद होता है लेकिन अभी तक रेप्लिकास पर नहीं।
एसिंक्रोनस रेप्लिकेशन और डेटा लॉस जोखिम
एसिंक्रोनस रेप्लिकेशन Redis को तेज और उत्तरदायी रहने की अनुमति देता है, लेकिन इसका यह भी अर्थ है कि यदि मास्टर विफल होता है तो कुछ डेटा लॉस संभव है।
यदि मास्टर रेप्लिकास को नवीनतम राइट्स प्राप्त होने से पहले क्रैश हो जाता है, तो वे राइट्स खो जाते हैं। Redis इस वास्तविकता को छिपाने का प्रयास नहीं करता। कैश डेटा के लिए, यह आमतौर पर स्वीकार्य है। क्रिटिकल स्टेट के लिए, यह नहीं हो सकता।
Redis रेप्लिकेशन को सख्त बनाने के विकल्प प्रदान करता है, लेकिन सख्त गारंटी लेटेंसी बढ़ाती है और उपलब्धता कम करती है। कितना डेटा लॉस स्वीकार्य है यह तय करना एक महत्वपूर्ण आर्किटेक्चरल निर्णय है।
रीड्स स्केल करने के लिए रेप्लिकास का उपयोग करना
Redis रेप्लिकेशन का उपयोग करने का एक सामान्य कारण रीड ट्रैफिक को स्केल करना है। एप्लिकेशन राइट ऑपरेशन्स को मास्टर पर निर्देशित कर सकते हैं और रीड ऑपरेशन्स को रेप्लिकास में वितरित कर सकते हैं।
यह मास्टर पर लोड कम करता है और समग्र थ्रूपुट में सुधार करता है। हालांकि, क्योंकि रेप्लिकेशन एसिंक्रोनस है, रेप्लिकास थोड़ा पुराना डेटा वापस कर सकते हैं।
कैशिंग प्रोफाइल या कॉन्फ़िगरेशन जैसे उपयोग के मामलों के लिए, यह आमतौर पर ठीक है। उन परिदृश्यों के लिए जिनमें मजबूत स्थिरता की आवश्यकता होती है, यह स्वीकार्य नहीं हो सकता। टीमों को इस ट्रेडऑफ को जानबूझकर करना चाहिए।
जब मास्टर विफल होता है तो क्या होता है
रेप्लिकेशन अकेले मास्टर विफलता को नहीं संभालता। जब मास्टर डाउन हो जाता है, तो रेप्लिकास सिंक में रहते हैं लेकिन बाहरी फेलओवर तंत्र के बिना स्वचालित रूप से प्रमोट नहीं होते।
हाई उपलब्धता के लिए किसी चीज की आवश्यकता होती है जो विफलताओं का पता लगाए, निर्णयों का समन्वय करे, और एक नए मास्टर को प्रमोट करे। यहीं फेलओवर सिस्टम काम आते हैं।
Redis Sentinel और हाई उपलब्धता
Redis Sentinel Redis में हाई उपलब्धता जोड़ने का पारंपरिक समाधान है। Sentinel प्रक्रियाएं Redis इंस्टेंसेस की निगरानी करती हैं, विफलताओं का पता लगाती हैं, और सहमति तक पहुंचने के लिए एक दूसरे के साथ संवाद करती हैं।
जब Sentinels सहमत होते हैं कि एक मास्टर डाउन है, तो रेप्लिकास में से एक को नया मास्टर बनने के लिए प्रमोट किया जाता है। Sentinels क्लाइंट्स को भी सूचित करते हैं ताकि वे सही नोड से पुनः कनेक्ट हो सकें।
Sentinel अतिरिक्त घटकों और जटिलता पेश करता है। प्रभावी होने के लिए, कई Sentinel नोड्स चल रहे होने चाहिए। एकल Sentinel वास्तविक हाई उपलब्धता के लिए पर्याप्त नहीं है।
Sentinel फेलओवर का निर्णय कैसे लेता है
Sentinel झूठे फेलओवर से बचने के लिए टाइमआउट और कोरम का उपयोग करता है। प्रमोशन होने से पहले कई Sentinels को सहमत होना होगा कि मास्टर अप्राप्य है।
यह डिज़ाइन विश्वसनीयता में सुधार करता है लेकिन इसका मतलब है कि फेलओवर तात्कालिक नहीं है। हमेशा एक छोटी अवधि होती है जब मास्टर अनुपलब्ध होता है और कोई प्रतिस्थापन सक्रिय नहीं होता।
एप्लिकेशन को इस विंडो को ग्रेसफुली संभालने के लिए डिज़ाइन किया जाना चाहिए। रीट्राई, टाइमआउट और फॉलबैक व्यवहार आवश्यक हैं।
Redis Cluster और बिल्ट-इन हाई उपलब्धता
Redis Cluster रेप्लिकेशन और फेलओवर को सीधे सिस्टम में एकीकृत करता है। प्रत्येक शार्ड का एक मास्टर और रेप्लिकास होते हैं, और फेलओवर तब स्वचालित रूप से होता है जब एक मास्टर विफल होता है।
यह Sentinel की आवश्यकता को हटा देता है लेकिन अन्य बाधाएं पेश करता है। कुंजी वितरण, क्लाइंट व्यवहार, और क्रॉस-शार्ड ऑपरेशन्स के लिए सावधानीपूर्वक डिजाइन की आवश्यकता होती है।
Redis Cluster हाई उपलब्धता को सरल बनाता है जबकि सख्त आर्किटेक्चरल सीमाएं लगाता है।
फेलओवर का मतलब जीरो डाउनटाइम नहीं है
एक आम गलतफहमी है कि Redis फेलओवर जीरो डाउनटाइम की गारंटी देता है। वास्तव में, फेलओवर तेज है लेकिन तात्कालिक नहीं।
फेलओवर के दौरान, कुछ अनुरोध विफल होंगे या रीट्राई की आवश्यकता होगी। अच्छी तरह से डिज़ाइन किए गए सिस्टम इस व्यवहार की उम्मीद करते हैं और ग्रेसफुली रिकवर करते हैं। खराब डिज़ाइन किए गए सिस्टम क्रैश हो सकते हैं या कैस्केडिंग विफलताओं को ट्रिगर कर सकते हैं।
हाई उपलब्धता लचीलापन सुधारती है, पूर्णता नहीं।
स्प्लिट ब्रेन और इसके जोखिम
स्प्लिट ब्रेन तब होता है जब एक से अधिक नोड मानते हैं कि वे मास्टर हैं। Redis और Sentinel इसे रोकने के लिए डिज़ाइन किए गए हैं, लेकिन नेटवर्क पार्टीशन और गलत कॉन्फ़िगरेशन अभी भी इसका कारण बन सकते हैं।
स्प्लिट ब्रेन परस्पर विरोधी राइट्स और डेटा करप्शन का परिणाम दे सकता है। इस जोखिम को कम करने के लिए उचित Sentinel कोरम, सही नेटवर्क सेटअप और समझदार टाइमआउट की आवश्यकता होती है।
इन विवरणों को नजरअंदाज करना दुर्लभ लेकिन गंभीर घटनाओं का एक सामान्य कारण है।
रेप्लिकेशन लैग और प्रदर्शन प्रभाव
रेप्लिकेशन लैग आमतौर पर छोटा होता है लेकिन कभी शून्य नहीं। भारी राइट लोड के तहत, रेप्लिकास मास्टर से पीछे रह सकते हैं।
यदि उच्च लैग की अवधि के दौरान फेलओवर होता है, तो डेटा लॉस बढ़ जाता है। रेप्लिकेशन लैग की निगरानी उन सिस्टम के लिए आवश्यक है जहां डेटा अखंडता मायने रखती है।
लैग में अचानक वृद्धि अक्सर अंतर्निहित प्रदर्शन या संसाधन मुद्दों का संकेत देती है।
रेप्लिकेशन बैकअप नहीं है
रेप्लिकेशन को बैकअप के साथ भ्रमित नहीं किया जाना चाहिए। यदि डेटा मास्टर पर हटा दिया जाता है, तो वह डिलीशन तुरंत रेप्लिकेट हो जाता है।
बैकअप मानवीय त्रुटि और तार्किक करप्शन से बचाते हैं। रेप्लिकेशन हार्डवेयर या प्रक्रिया विफलता से बचाता है। यदि Redis मूल्यवान डेटा स्टोर करता है तो दोनों आवश्यक हैं।
सामान्य Redis HA गलतियां
टीमें अक्सर Redis हाई उपलब्धता डिजाइन करते समय वही गलतियां करती हैं। इनमें रेप्लिकेशन को हाई उपलब्धता मानना, केवल एक Sentinel चलाना, रेप्लिकेशन लैग को अनदेखा करना, फेलओवर का टेस्ट न करना, और एप्लिकेशन को Redis एरर पर क्रैश होने देना शामिल है।
ये गलतियां वास्तविक दुनिया की आउटेज रिपोर्ट में बार-बार दिखाई देती हैं।
डिजाइन के हिस्से के रूप में विफलता का टेस्ट करना
हाई उपलब्धता जिसे कभी टेस्ट नहीं किया गया वह केवल कागज पर मौजूद है। टीमों को नियंत्रित वातावरण में मास्टर को रोककर नियमित रूप से विफलताओं का अनुकरण करना चाहिए।
फेलओवर व्यवहार का अवलोकन, रिकवरी समय मापना, और एप्लिकेशन प्रतिक्रिया को समझना अमूल्य अंतर्दृष्टि प्रदान करता है जो कोई दस्तावेज़ प्रतिस्थापित नहीं कर सकता।
Redis HA के लिए एक व्यावहारिक मानसिक मॉडल
Redis हाई उपलब्धता ग्रेसफुल डिग्रेडेशन के बारे में है। जब Redis स्वस्थ होता है, तो सिस्टम अच्छा प्रदर्शन करता है। जब Redis अस्वस्थ हो जाता है, तो प्रदर्शन कम हो सकता है। जब Redis अनुपलब्ध होता है, तो सिस्टम को फिर भी जीवित रहना चाहिए।
यदि Redis के डाउन होने से कुल सिस्टम आउटेज होता है, तो हाई उपलब्धता अधूरी है।
सारांश
Redis रेप्लिकेशन और हाई उपलब्धता आकार देते हैं कि सिस्टम तनाव के तहत कैसे व्यवहार करते हैं। रेप्लिकेशन डेटा की प्रतियां प्रदान करता है, जबकि हाई उपलब्धता सेवा की निरंतरता प्रदान करती है।
दोनों को सावधानीपूर्वक डिजाइन, यथार्थवादी अपेक्षाओं और निरंतर टेस्टिंग की आवश्यकता होती है। जब सही ढंग से लागू किया जाता है, तो Redis विफलताएं नियमित घटनाएं बन जाती हैं बजाय बड़ी घटनाओं के। यही Redis हाई उपलब्धता का लक्ष्य है।