2010-08-26 29 views
8

में मैनेशिया मास्टर नोड का महत्व क्या है, मैं एक दोहराए गए मैनेशिया डेटाबेस के साथ दो एरलांग नोड्स चला रहा हूं। जब भी मैंने उनमें से एक को शुरू करने की कोशिश की, जबकि मैनेसिया दूसरे पर नहीं चल रहा है, मैनेशिया: wait_for_tables (? टैब्स, टाइमआउट), जो नोड से बुलाया जाता है, उस पर लटका होगा। मुझे एक संरचना की आवश्यकता है जहां (यदि दोनों नोड्स नहीं चल रहे हैं), मैं एक के साथ काम करना शुरू कर सकता हूं जबकि दूसरा नीचे है और बाद में दूसरे को लाने का फैसला करता है, फिर भी अच्छी तरह से काम करना जारी रखता है। मुझे यह सुनिश्चित करने की ज़रूरत है कि चलने वाला पहला नोड बाद में अपडेट हो गया हो। क्या यह आवश्यक है कि मुझे मास्टर के रूप में एक की आवश्यकता हो?क्लस्टर

%%% संपादित .......................................... .................................

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

मुझे लगता है कि इसने मेनेसिया मास्टर नोड के साथ कुछ भी नहीं किया है। लेकिन मुझे अभी भी इसका महत्व समझना अच्छा लगेगा क्योंकि मैंने इसे पहले इस्तेमाल नहीं किया है, फिर भी, मैं हमेशा वितरित स्कीमा के साथ खेलता हूं।

धन्यवाद फिर से ...

उत्तर

4

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

मैनेशिया में एक और तंत्र है, जिसे बल_लोड कहा जाता है। इसके साथ बहुत सावधान रहना चाहिए, लेकिन उस मामले में जहां आपके पास दो नोड्स हैं, ए और बी, बी को समाप्त करें (ए के रूप में एक लॉग बी), फिर ए को समाप्त करें, फिर बी को पुनरारंभ करें, बी को ए के बारे में कोई जानकारी नहीं होगी , इसलिए उन टेबल को लोड करने से इनकार कर दिया जाएगा जिन पर एक प्रतिलिपि है। यदि आप जानते हैं कि ए जल्द ही वापस नहीं आ रहा है, तो आप बी पर मैनेशिया: force_load_tables (Ts) को कॉल करना चुन सकते हैं, जिससे इसे अपनी प्रतियों के साथ चलाने का कारण बन जाएगा। एक बार जब बैक अप आता है, तो यह पता लगाएगा कि बी ऊपर है, और इससे टेबल लोड करेगा। जैसा कि आप देख सकते हैं, ऐसे कई अन्य परिदृश्य हैं जहां आप एक असंगत डेटाबेस के साथ समाप्त हो सकते हैं। मेनेसिया इसे ठीक नहीं करेगा, लेकिन अगर यह उठता है तो स्थिति को हल करने के लिए उपकरण उपलब्ध कराने का प्रयास करता है। दुर्भाग्यवश, परिदृश्य में, मिनेसिया आपको कोई संकेत नहीं देगा, लेकिन समस्या का पता लगाने वाले एप्लिकेशन को बनाना संभव है।

+0

धन्यवाद उपयोगकर्ता 6834 –

+0

uwiger, धन्यवाद। क्या आपको लगता है कि (भविष्य में), मिनेसिया के पास हालिया अपडेट मैकेनिज्म या किसी प्रकार के समय हस्ताक्षर पर आधारित दो प्रतिकृतियां विलय करने का एक तरीका होगा, खासकर जब "चल रहे विभाजन नेटवर्क" घातक त्रुटि का पता चला है? –

+1

आज ऐसा करना संभव है, हालांकि सभी हिस्सों में बहुत अच्छी तरह से प्रलेखित या परीक्षण नहीं किया गया है। http://github.com/esl/unsplit नेटस्प्लिट के बाद मेनेसिया टेबल के स्वचालित विलय के लिए एक लाइब्रेरी है। हाल ही में मैनेशिया संस्करणों को इसका समर्थन करने के लिए ध्यान से बढ़ाया गया है, और R14B03 कठोर समाधान विसंगतियों के जोखिम को कम करने के लिए कोरम जांच ('बहुमत') का एक रूप भी जोड़ता है। – uwiger

संबंधित मुद्दे