रेडिस प्रहरी बनाम क्लस्टरिंग


111

मुझे लगता है कि रेडिस प्रहरी कई लाल उदाहरणों के बीच हा (उच्च उपलब्धता) को कॉन्फ़िगर करने का एक तरीका है। जैसा कि मैं देख रहा हूं, किसी भी समय ग्राहक अनुरोधों को सक्रिय रूप से प्रस्तुत करने के लिए एक रेडिस उदाहरण है। दो अतिरिक्त सर्वर स्टैंडबाय पर हैं (विफलता होने की प्रतीक्षा कर रहे हैं, इसलिए उनमें से एक फिर से कार्रवाई में हो सकता है)।

  • क्या यह संसाधनों की बर्बादी है?
  • क्या उपलब्ध संसाधनों का पूर्ण उपयोग करने का एक बेहतर तरीका है?
  • क्या रेडिस, रेडिस प्रहरी के विकल्प का उपयोग कर रहा है?

मैं पहले से ही प्रहरी और क्लस्टरिंग के लिए रेडिस डॉक्यूमेंटेशन देख रहा था , क्या कोई अनुभव कर सकता है, कृपया बताएं।

रेडिस प्रहरी में मास्टर गुलाम विन्यास - विफलता से पहले

मास्टर विफल रहता है और गुलाम कार्रवाई करने के लिए किक करता है

अपडेट करें

ठीक है। मेरे वास्तविक परिनियोजन परिदृश्य में मेरे पास दो सर्वर हैं जो रेडिस के लिए समर्पित हैं। मेरे पास एक और सर्वर है जिसमें मेरा Jboss सर्वर चल रहा है। Jboss में चल रहे एप्लिकेशन को रेडिस मास्टर सर्वर (M) से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है।

विफलता परिदृश्य

आदर्श रूप से, मुझे लगता है कि जब मास्टर कैश सर्वर विफल हो जाता है (या तो रेडिस प्रक्रिया कम हो जाती है या मशीन विफल हो जाती है) तो Jboss में एप्लिकेशन को स्लेव कैश सर्वर से कनेक्ट करने की आवश्यकता होती है। मैं इसे प्राप्त करने के लिए रेडिस सर्वर को कैसे कॉन्फ़िगर करूंगा?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1

2
यह भी कर सकते थे मदद - fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster
Itamar हेबर

जवाबों:


119

सबसे पहले, प्रहरी बात करते हैं।

प्रहरी असफलता का प्रबंधन करता है, यह हा के लिए रेडिस को कॉन्फ़िगर नहीं करता है। यह एक महत्वपूर्ण अंतर है। दूसरा, आपके द्वारा पोस्ट किया गया आरेख वास्तव में एक बुरा सेटअप है - आप सेंटिनल को उसी नोड पर नहीं चलाना चाहते हैं जैसे कि रेडिस नोड्स इसे प्रबंधित कर रहा है। जब आप उस मेजबान को खो देते हैं तो आप दोनों हार जाते हैं।

"क्या यह संसाधनों की बर्बादी है?" यह आपके उपयोग के मामले पर निर्भर करता है। आपको उस सेटअप में तीन Redis नोड्स की आवश्यकता नहीं है, आपको केवल दो की आवश्यकता है। तीन आपके अतिरेक को बढ़ाते हैं, लेकिन इसकी आवश्यकता नहीं है। यदि आपको अतिरिक्त अतिरेक की आवश्यकता है तो यह संसाधनों की बर्बादी नहीं है। यदि आपको अतिरेक की आवश्यकता नहीं है, तो आप केवल एक ही Redis इंस्टेंस चलाते हैं और इसे अच्छा कहते हैं - जैसा कि अधिक चलाना "व्यर्थ" होगा।

दो दासों को चलाने का एक अन्य कारण रीड्स को विभाजित करना होगा। फिर, अगर आपको इसकी आवश्यकता है तो यह बेकार नहीं होगा।

जैसा कि "क्या उपलब्ध संसाधनों के पूर्ण उपयोग का एक बेहतर तरीका है?" हम इसका उत्तर नहीं दे सकते क्योंकि यह आपके विशिष्ट परिदृश्य और कोड पर बहुत अधिक निर्भर है। यह कहा गया है कि अगर स्टोर करने के लिए डेटा की मात्रा "छोटी" है और कमांड रेट बहुत अधिक नहीं है, तो याद रखें कि आपको रेडिस को एक होस्ट समर्पित करने की आवश्यकता नहीं है।

अब "क्या रेडिस संतान के लिए एक विकल्प के रूप में बदल रहा है?" यह वास्तव में आपके उपयोग के मामले पर पूरी तरह से निर्भर करता है। रेडिस क्लस्टर एक हा समाधान नहीं है - यह एक बहु लेखक / बड़ा-राम समाधान है। यदि आपका लक्ष्य सिर्फ HA है तो यह आपके लिए उपयुक्त नहीं होगा। रेडिस क्लस्टर सीमाओं के साथ आता है, विशेष रूप से बहु-कुंजी संचालन के आसपास, इसलिए यह जरूरी नहीं कि एक सीधा "बस क्लस्टर का उपयोग करें" ऑपरेशन है।

अगर आपको लगता है कि रेडिस (और तीन रनिंग सेंटिनल) चलाने वाले तीन होस्ट बेकार हैं, तो आप संभवतः क्लस्टर को और अधिक पकड़ लेंगे, क्योंकि इसके लिए अधिक संसाधनों की आवश्यकता होती है।

आपके द्वारा पूछे गए प्रश्न संभवतः लिखित रूप में जीवित रहने के लिए बहुत व्यापक और राय-आधारित हैं। यदि आपके पास कोई विशिष्ट मामला / समस्या है जिस पर आप काम कर रहे हैं तो कृपया उससे अपडेट करें ताकि हम विशिष्ट सहायता और जानकारी प्रदान कर सकें।

बारीकियों के लिए अद्यतन:

आपके परिदृश्य में उचित विफलता प्रबंधन के लिए मैं 3 संतानों के साथ जाऊँगा, जो आपके JBoss सर्वर पर चल रहा है। यदि आपके पास 3 JBoss नोड्स हैं, तो प्रत्येक पर एक के साथ जाएं। मेरे पास अलग-अलग नोड्स पर एक रेडिस पॉड (मास्टर + स्लेव) होगा, और प्रहरी को फेलओवर प्रबंधित करने दें।

वहां से जेबॉस / जेडिस को सेंटिनल का उपयोग करने के लिए यह सूचना और कनेक्शन प्रबंधन के लिए वायरिंग करने की बात है। जैसा कि मैंने उन त्वरित खोज का उपयोग नहीं किया है कि जेडिस के पास इसके लिए समर्थन है, आपको बस इसे सही ढंग से कॉन्फ़िगर करने की आवश्यकता है। कुछ उदाहरण मुझे मिले हैं जो सेंटिनल और https://github.com/xetorthio/jedis/issues/725 के साथ जेडिस के एक उदाहरण की तलाश में हैं जो JedisSentinelPoolएक पूल का उपयोग करने के लिए मार्ग होने की बात करते हैं ।

जब सेंटिनल एक फेलओवर को अंजाम देता है तो क्लाइंट्स को डिसकनेक्ट कर दिया जाएगा और जेडीस (सेंट?) संतरी से पूछकर हैंडल करेगा कि मौजूदा मास्टर कौन है।


6
हाय @ द-रियल-बिल, क्या आप कृपया "प्रहरी असफलता का प्रबंधन कर सकते हैं, यह विस्तृत है। यह हास के लिए रेडिस को कॉन्फ़िगर नहीं करता है।" आधिकारिक दस्तावेज ( redis.io/topics/sentinel ) पर, यह कहता है "Redis Sentinel Redis के लिए उच्च उपलब्धता प्रदान करता है।"
जिओ पेंग - ZenUML.com

1
हा रेडिस को HA होने के लिए कई टुकड़ों की आवश्यकता होती है। प्रहरी केवल एक टुकड़ा संभालता है: विफलता। यह प्रतिकृति सेट नहीं करता है और यह हा एंडपॉइंट प्रदान नहीं करता है। यह सेवा की खोज प्रदान करता है ताकि एक ग्राहक को पता चल सके कि मास्टर से कहाँ मिलना है। यह HA के लिए Redis को कॉन्फ़िगर नहीं करता है।
असली बिल

5
यहाँ दावे केवल सच नहीं हैं - प्रहरी के साथ रेडिस प्राथमिक से स्टैंडबाय नोड्स के लिए प्रतिकृति का प्रबंधन करते हैं। असफल होने पर, मास्टर को बदल दिया जाता है और प्रतिकृति नए मास्टर से किसी भी शेष नोड्स में चली जाती है। एक पुनर्प्राप्त नोड प्रतिकृति के लिए लक्ष्य के रूप में एक द्वितीयक साइट बन जाता है। जो टुकड़ा गायब है वह यह है कि CLIENT को राज्य में किसी भी बदलाव के बारे में जानकारी प्राप्त करने के लिए प्रहरी से बात करने की आवश्यकता है। इसलिए प्रहरी एक उच्च उपलब्धता समाधान है।
जेसन

6
मैंने कहा कि यह प्रतिकृति स्थापित नहीं करता है और यह सच है। आप गुलामों की स्थापना करके रेडिस प्रतिकृति को कॉन्फ़िगर करते हैं। फिर प्रहरी इसे खोज लेंगे और विफलताओं का प्रबंधन करेंगे। प्रहरी प्रतिकृति स्थापित नहीं कर सकता क्योंकि यह केवल एक मौजूदा प्रतिकृति सेटअप का प्रबंधन करता है। कोशिश करो। दो स्वतंत्र रेडिस सर्वरों को चालू करें और सीधे एक दूसरे को गुलाम बनाने के लिए प्रहरी प्राप्त करें। यह काम नहीं करेगा। न ही इसमें नए गुलाम जुड़ सकते हैं। इस प्रकार यह करता है। इसने प्रतिकृति स्थापित की।
असली बिल

35

सिफारिश, हर जगह, दो या दो से अधिक का उपयोग नहीं करते हुए, विषम संख्या के साथ शुरू करना है। यह सही किया गया था, लेकिन कुछ अन्य बिंदुओं को सही करने देता है।

सबसे पहले, यह कहना कि सेंट के बिना सेंटिनल फेलओवर प्रदान करता है गलत है। जब आपके पास विफलता होती है, तो आपके पास आवेदन राज्य के अतिरिक्त लाभ के साथ एचए को दोहराया जाता है। भेद यह है कि आप एक प्रतिकृति के बिना सिस्टम में हा हो सकते हैं (यह हा है लेकिन यह गलत सहिष्णु नहीं है)।

दूसरा, अपने लक्ष्य रेडिस उदाहरण के रूप में एक ही मशीन पर एक प्रहरी चल रहा है एक "बुरा सेटअप" नहीं है: यदि आप अपने प्रहरी, या अपने रेडिस उदाहरण, या पूरी मशीन खो देते हैं, तो परिणाम समान हैं। शायद इसीलिए इस तरह के विन्यास का हर उदाहरण दोनों एक ही मशीन पर चलता है।


6
वास्तव में बग ऐसा प्रतीत होता है जहां सेंटिनल "सेंटिनल-ऑन-द-इंस्टेंस" सेटअप में चुनाव शुरू करने में विफल होंगे, और मैंने इसे कई बार यहां, एमएल पर और व्यक्तिगत परामर्श में देखा है। रेडिस सर्वर से प्रहरी को स्थानांतरित करते हुए हर बार इसे ठीक किया। इसलिए, हाँ ऐसा करना इस तरह से एक बुरा सेटअप है कि यह आपको उसी क्षण असफल हो जाएगा जब आपको इसकी आवश्यकता होगी। उदाहरण इसे इस तरह दिखाते हैं क्योंकि वे व्यापक परिचालन अनुभव वाले लोगों द्वारा नहीं लिखे गए हैं और यह आसान है।
असली बिल

3
यह कौन सा बग है, क्या कोई बग रिपोर्ट है? क्या आपको पता है कि यह अभी भी मौजूद है?
सिवनी

क्या आवेदन मशीनों पर प्रहरी लगाने के समान मुद्दे हैं?
ऑरेंजडॉग

31

यह आपके सवाल का सीधा जवाब नहीं है, लेकिन सोचिए, यह मेरे जैसे रेडिस न्यूबी के लिए उपयोगी जानकारी है। इसके अलावा "रेडिस क्लस्टर बनाम सेंटिनल" की खोज करते समय यह प्रश्न Google की पहली कड़ी के रूप में दिखाई देता है।

Redis Sentinel Redis उच्च उपलब्धता समाधान का नाम है ... इसका Redis Cluster से कोई लेना-देना नहीं है और इसका उपयोग ऐसे लोगों द्वारा किया जाता है, जिन्हें Redis Cluster की आवश्यकता नहीं होती है, लेकिन मास्टर होने पर स्वचालित रूप से विफल होने का एक तरीका है उदाहरण सही ढंग से काम नहीं कर रहा है।

रेडिस सेंटिनल डिज़ाइन ड्राफ्ट 1.3 से लिया गया

जब आप रेडिस के लिए नए हों और फेलओवर समाधान को लागू कर रहे हों तो यह बहुत अच्छा नहीं है। प्रहरी और क्लस्टरिंग के बारे में आधिकारिक दस्तावेज एक दूसरे से तुलना नहीं करते हैं, इसलिए टन के दस्तावेज़ों को पढ़े बिना सही तरीके से चुनना मुश्किल है।


10

प्रलेखन के दौरान मेरे सिर को पीटने के बाद यह मेरी समझ है।

प्रहरी एक प्रकार का हॉट स्टैंडबाय सॉल्यूशन है जिसमें दासों को दोहराया जाता है और किसी भी समय उन्हें बढ़ावा देने के लिए तैयार किया जाता है। हालाँकि, यह किसी भी बहु-नोड लेखन का समर्थन नहीं करेगा। पढ़ने के संचालन के लिए दासों को कॉन्फ़िगर किया जा सकता है। यह सच नहीं है कि सेंटिनल हा प्रदान नहीं करेगा, इसमें एक विशिष्ट सक्रिय-निष्क्रिय क्लस्टर की सभी विशेषताएं हैं (हालांकि यहां उपयोग करने के लिए यह सही शब्द नहीं है)।

रेडिस क्लस्टर, कम या ज्यादा वितरित समाधान है, जो कि शीर्ष पर काम कर रहा है। डेटा का प्रत्येक हिस्सा स्वामी और दास नोड्स के बीच वितरित किया जा रहा है। 2 का न्यूनतम प्रतिकृति कारक यह सुनिश्चित करता है कि आपके पास मास्टर और दासों में दो सक्रिय शार्क उपलब्ध हैं। यदि आप मानगो या इलास्टिक्स में शार्पिंग जानते हैं, तो इसे पकड़ना आसान होगा।


6

रेडिस विभाजन वाले क्लस्टर (उन स्वामी के कई स्वामी और दास के साथ) या एक एकल उदाहरण मोड (प्रतिकृति दास के साथ एकल मास्टर) में काम कर सकते हैं। लिंक यहाँ का कहना है:

एक उदाहरण मोड में रेडिस का उपयोग करते समय, जिसमें एक एकल रेडिस सर्वर पूरे अप्रतिबंधित डेटाबेस का प्रबंधन करता है, रेडिस सेंटिनल का उपयोग इसकी उपलब्धता को प्रबंधित करने के लिए किया जाता है

यह भी कहता है:

एक रेडिस क्लस्टर, जिसमें डेटा को कई प्राथमिक उदाहरणों में विभाजित किया जाता है, स्वयं ही उपलब्धता का प्रबंधन करता है और इसके लिए अतिरिक्त घटकों की आवश्यकता नहीं होती है।

तो हा 2 उल्लेखित परिदृश्यों में सुनिश्चित किया जा सकता है। आशा है कि इससे संदेह दूर हो जाएगा। रेडिस क्लस्टर और प्रहरी एक दूसरे के विकल्प नहीं हैं। वे बस विभाजन या गैर-विभाजित मास्टर के विभिन्न मामलों में हा को सुनिश्चित करने के लिए उपयोग किए जाते हैं।


4

Redis Sentinel एक मास्टर नीचे होने पर प्रतिकृतियों को बढ़ावा देने में विफल रहता है। आप आमतौर पर एक विषम संख्या में प्रहरी नोड्स चाहते हैं। एक मास्टर और एक प्रतिकृति के उदाहरण के लिए, 3 प्रहरी का उपयोग किया जाना चाहिए ताकि निर्णय पर सहमति बन सके। आदर्श रूप से तीसरा प्रहरी 3 जी सर्वर पर होता है इसलिए निर्णय तिरछा नहीं होता है (यह विफलता पर निर्भर करता है)। प्रहरी आपके नोड्स पर मास्टर / प्रतिकृति कॉन्फिग सेटिंग्स को बदलने का ख्याल रखता है ताकि पदोन्नति और सिंकिंग सही क्रम में हो और आप पुराने विफल मास्टर में पुराने डेटा को शामिल करके डेटा को अधिलेखित न करें।

एक बार जब आप असफलताओं को पूरा करने के लिए अपने प्रहरी नोड्स सेट करते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता होती है कि आप सही उदाहरण की ओर इशारा कर रहे हैं। इसके लिए HAProxy कॉन्फ़िगरेशन का एक उदाहरण देखें । HAProxy स्वास्थ्य परीक्षण करता है और विफलता होने पर नए मास्टर को इंगित करेगा।

क्लस्टरिंग आपको क्षैतिज रूप से स्केल करने की अनुमति देगा और उच्च भार को संभालने में मदद कर सकता है। इसे सेट अप और कॉन्फ़िगर करने के लिए थोड़ा काम करना पड़ता है।

रेडिस का एक खुला स्रोत कांटा है, "कीबडी" जिसने सक्रिय-प्रतिकृति विकल्प के साथ प्रहरी नोड्स की आवश्यकता को समाप्त कर दिया है। यह प्रतिकृति नोड को पढ़ने और लिखने को स्वीकार करने की अनुमति देता है। जब एक विफलता होती है, तो HAProxy विफल नोड के साथ पढ़ता / लिखता है और बस शेष सक्रिय नोड का उपयोग करता है जो पहले से ही सिंक है। जब वे ऑनलाइन वापस आते हैं तो टाइमस्टैम्पिंग विफल नोड्स को स्वचालित रूप से फिर से कनेक्ट करने और डेटा खोने के बिना फिर से सिंक करने में सक्षम बनाता है। सेटअप सरल है और उच्च ट्रैफ़िक के लिए आपको प्रतिकृति नोड पर सीधे पढ़ने और मास्टर को पढ़ने / लिखने के लिए विशेष अपफ्रंट सेटअप की आवश्यकता नहीं है। सक्रिय प्रतिकृति का उदाहरण यहां देखें । KeyDB भी बहु-थ्रेडेड है जो कुछ अनुप्रयोगों के लिए क्लस्टरिंग का विकल्प हो सकता है, लेकिन वास्तव में इस बात पर निर्भर करता है कि आपकी आवश्यकताएं क्या हैं।

मैन्युअल रूप से और क्लस्टर-टूल टूल के साथ क्लस्टरिंग सेट करने का एक उदाहरण है । यदि आप Redis का उपयोग कर रहे हैं तो ये वही चरण हैं (अनुदेश में 'redd' के साथ 'keydb' बदलें)


1

उपरोक्त उत्तर के लिए अतिरिक्त जानकारी

रेडिस क्लस्टर

  • रेडिस क्लस्टर का एक मुख्य उद्देश्य आपके डेटा लोड को समान रूप से समान / समान रूप से वितरित करना है

  • रेडिस क्लस्टर सुसंगत हैशिंग का उपयोग नहीं करता है, लेकिन एक अलग प्रकार का शार्पिंग है जहाँ हर कुंजी वैचारिक रूप से उस हैश स्लॉट को कहते हैं

  • रेडिस क्लस्टर में 16384 हैश स्लॉट हैं, रेडिस क्लस्टर में प्रत्येक नोड हैश स्लॉट्स के सबसेट के लिए जिम्मेदार है, इसलिए, उदाहरण के लिए, आपके पास 3 नोड्स के साथ क्लस्टर हो सकता है, जहां:

    नोड ए में 0 से 5500 तक हैश स्लॉट हैं, नोड बी में 5501 से 11000 तक हैश स्लॉट हैं, नोड सी में 11001 से 16383 तक हैश स्लॉट हैं

यह हमें क्लस्टर में नोड्स को आसानी से जोड़ने और हटाने की अनुमति देता है। उदाहरण के लिए, यदि हम एक नया नोड डी जोड़ना चाहते हैं, तो हमें नोड्स ए, बी, सी से डी तक कुछ हैश स्लॉट को स्थानांतरित करने की आवश्यकता है

  • Redis क्लस्टर मास्टर-दास संरचना का समर्थन करता है, आप क्लस्टर बनाते समय A, B, C के साथ दास A1, B1, C2 बना सकते हैं, इसलिए जब मास्टर B नीचे जाता है तो गुलाम B1 को मास्टर के रूप में प्रचारित किया जाता है।

रेडिस क्लस्टर का उपयोग करते समय आपको अतिरिक्त फेलओवर हैंडलिंग की आवश्यकता नहीं होती है और आपको किसी भी क्लस्टर नोड्स पर सेंटिनल इंस्टेंस को इंगित नहीं करना चाहिए।

तो व्यावहारिक रूप में, आपको रेडिस क्लस्टर के साथ क्या मिलता है?

1. कई नोड्स के बीच अपने डेटासेट को स्वचालित रूप से विभाजित करने की क्षमता।

2. नोड्स के एक सबसेट विफलताओं का सामना कर रहे हैं या क्लस्टर के बाकी हिस्सों के साथ संवाद करने में असमर्थ हैं जब संचालन जारी रखने की क्षमता।

रेडिस सेंटिनल

  • Redis एक मास्टर नोड से डेटा की नकल करने वाले कई दासों का समर्थन करता है।
  • यह मास्टर नोड में डेटा के लिए एक बैकअप प्रदान करता है।
  • Redis Sentinel एक प्रणाली है जिसे मास्टर और दास को प्रबंधित करने के लिए डिज़ाइन किया गया है। यह अलग कार्यक्रम के रूप में चलता है। एक आदर्श प्रणाली में आवश्यक प्रहरी की न्यूनतम संख्या 3 है। वे आपस में संवाद करते हैं और यह सुनिश्चित करते हैं कि मास्टर जीवित है, यदि जीवित नहीं है तो वे दास में से एक को गुरु के रूप में बढ़ावा देंगे, इसलिए बाद में जब मृत नोड ऊपर हो जाएगा नए स्वामी के लिए एक दास के रूप में कार्य करना
  • कोरम कॉन्फ़िगर करने योग्य है। मूल रूप से यह प्रहरी की संख्या है जिसे मास्टर के रूप में सहमत होने की आवश्यकता है। एन / 2 +1 से सहमत होना चाहिए। N फली में नोड्स की संख्या है (ध्यान दें कि इस सेटअप को पॉड कहा जाता है और क्लस्टर नहीं है)

तो व्यावहारिक रूप से, आपको रेडिस सेंटिनल के साथ क्या मिलता है?

यह सुनिश्चित करेगा कि मास्टर हमेशा उपलब्ध है (यदि मास्टर नीचे जाता है, तो दास को मास्टर के रूप में पदोन्नत किया जाएगा)

संदर्भ:

https://fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster/

https://redis.io/topics/cluster-tutorial

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.