इस तरह की विफलता से ठीक होने का एक और तरीका मैनेशिया के साथ काम करना है जो डेटाबेस है कि खरगोश एमक्यू दृढ़ता तंत्र के रूप में उपयोग करता है और खरगोश एमक्यू उदाहरणों (और मास्टर/गुलाम स्थिति) के सिंक्रनाइज़ेशन के लिए इसका नियंत्रण होता है । सभी विवरण के लिए, निम्न URL देखें: http://www.erlang.org/doc/apps/mnesia/Mnesia_chap7.html
कई अवसरों हैं जब Mnesia पता लगा सकता है कि नेटवर्क एक संचार विफलता की वजह से विभाजित किया गया है।
एक ऐसा होता है जब मेनेसिया पहले से चल रहा है और चल रहा है और एरलांग नोड फिर से संपर्क करते हैं। फिर मैनेशिया अन्य नोड पर मैनेशिया से संपर्क करने का प्रयास करेगा, यह देखने के लिए कि क्या यह भी सोचता है कि नेटवर्क को थोड़ी देर के लिए विभाजित किया गया है। यदि दोनों नोड्स पर मैनेशिया ने मैनेशिया_डाउन प्रविष्टियों को एक दूसरे से लॉग किया है, तो मैनेशिया {inconsistent_database, running_partitioned_network, नोड} नामक एक सिस्टम इवेंट उत्पन्न करता है जो मैनेशिया के ईवेंट हैंडलर और अन्य संभावित ग्राहकों को भेजा गया है। डिफ़ॉल्ट ईवेंट हैंडलर त्रुटि लॉगजर में त्रुटि की रिपोर्ट करता है।
एक अन्य अवसर जब मैनेशिया का पता लगा सकता है कि नेटवर्क संचार विफलता के कारण विभाजित है, स्टार्ट-अप पर है। यदि मैनेशिया पता लगाता है कि स्थानीय नोड और अन्य नोड दोनों को एक दूसरे से mnesia_down प्राप्त हुआ है, तो यह एक {inconsistent_database, start_partitioned_network, नोड} सिस्टम ईवेंट उत्पन्न करता है और ऊपर वर्णित के रूप में कार्य करता है।
आवेदन पता लगाता है कि वहाँ एक संचार विफलता जो एक असंगत डेटाबेस का कारण हो सकता है, यह समारोह mnesia उपयोग कर सकते हैं कर दिया गया है: जो नोड्स एक तालिका लोड किया जा सकता है से इंगित करने के लिए set_master_nodes (टैब, नोड्स)।
स्टार्ट-अप Mnesia की सामान्य तालिका लोड एल्गोरिथ्म पर नजरअंदाज कर दिया जाएगा और तालिका मास्टर नोड्स, संभावित mnesia_down प्रविष्टियों की परवाह किए बिना लॉग में तालिका के लिए निर्धारित किसी एक से लोड किया जाएगा। नोड्स में केवल नोड्स हो सकते हैं जहां तालिका में प्रतिकृति हो और यदि यह खाली है, तो विशेष तालिका के लिए मास्टर नोड रिकवरी तंत्र रीसेट हो जाएगा और अगली पुनरारंभ करने पर सामान्य लोड तंत्र का उपयोग किया जाएगा।
फ़ंक्शन मैनेशिया: set_master_nodes (नोड्स) सभी तालिकाओं के लिए मास्टर नोड सेट करता है। प्रत्येक तालिका के लिए यह इसकी प्रतिकृति नोड्स निर्धारित करेगा और मैनेशिया का उपयोग करेगा: सेट_मास्टर_नोड्स (टैब, टैबनोड) उन प्रतिकृति नोड्स के साथ नोड्स सूची में शामिल हैं (यानी टैबनोड नोड्स और तालिका के प्रतिकृति नोड्स का चौराहे है)। यदि चौराहे खाली है तो विशेष तालिका के लिए मास्टर नोड रिकवरी तंत्र रीसेट हो जाएगा और सामान्य लोड तंत्र का उपयोग अगले पुनरारंभ पर किया जाएगा।
कार्यों mnesia: system_info (master_node_tables) और mnesia: table_info (टैब, master_nodes) संभावित मास्टर नोड्स के बारे में जानकारी प्राप्त करने के लिए इस्तेमाल किया जा सकता है।
निर्धारण जो डेटा संचार विफलता के बाद रखने के लिए बाहर Mnesia की गुंजाइश है। एक दृष्टिकोण यह निर्धारित करना होगा कि कौन सा "द्वीप" नोड्स का बहुमत है। {बहुमत, सच} महत्वपूर्ण तालिकाओं के लिए विकल्प का उपयोग सुनिश्चित करना है कि नोड्स है कि एक "बहुमत द्वीप" का हिस्सा नहीं हैं उन तालिकाओं को अद्यतन करने में सक्षम नहीं हैं का एक तरीका हो सकता है। ध्यान दें कि यह अल्पसंख्यक नोड्स पर सेवा में कमी का गठन करता है। यह उच्च स्थिरता गारंटी के पक्ष में एक ट्रेडऑफ होगा।
फ़ंक्शन मैनेशिया: force_load_table (टैब) का उपयोग टेबल लोड करने के लिए किया जा सकता है, भले ही तालिका लोड तंत्र सक्रिय हो।
क्या नेटवर्क को फिर से उपलब्ध होने पर स्वचालित रूप से अपने राज्यों को सिंक्रनाइज़ करने के लिए नोड्स को कॉन्फ़िगर करना संभव है? –
मेरे ज्ञान के लिए नहीं (जब तक यह RabbitMQ के एक नए संस्करण में उपलब्ध नहीं है ... मैंने कम से कम एक वर्ष के लिए जांच नहीं की है)। –