2010-09-07 23 views
8

निम्न सेटअप पर विचार करें:mongoDB प्रतिकृति + 2 सर्वर पर sharding उचित?

वहां एक 2 भौतिक सर्वर जो एक नियमित मोंगोडब प्रतिकृति सेट के रूप में स्थापित होते हैं (एक आर्बिटर प्रक्रिया सहित, इसलिए स्वत: विफलता सही ढंग से काम करेगी)।

अब तक, जहां तक ​​मैं समझता हूं, सबसे वास्तविक काम प्राथमिक सर्वर पर किया जाएगा, जबकि दास ज्यादातर अपने डेटासेट को सिंक में रखने के लिए काम करेगा।

क्या यह उचित होगा, इस सेटअप में शेरिंग को इस तरह से स्थापित करने के लिए कि एक ही 2 सर्वर पर एक और प्रतिकृति सेट स्थापित करेगा, ताकि उनमें से प्रत्येक में एक मोंगोड प्रक्रिया प्राथमिक हो और द्वितीयक के रूप में चलने वाली एक प्रक्रिया हो ।

अपेक्षित परिणाम यह होगा कि दोनों सर्वर वास्तविक क्वेरी/आवेषण के वर्कलोड को साझा करते समय दोनों साझा करेंगे। एक सर्वर के पूरे सेटअप में असफल होने के मामले में अन्य सर्वर को बहाल होने तक, जारी रखने के लिए सुंदरता से असफल होना चाहिए।

क्या सेटअप में कुल ओवरहेड और प्रक्रियाओं की संख्या (मोंगो/कॉन्फ़िगरर्स/आर्बिटर्स) को छोड़कर इस सेटअप में कोई डाउनसाइड्स हैं?

उत्तर

9

यह निश्चित रूप से काम करेगा। मैंने #mongodb आईआरसी चैनल में एक सवाल पूछा था कि एक मशीन पर एकाधिक मोंगोड प्रक्रियाओं को चलाने का बुरा विचार था या नहीं। जवाब था "जब तक आपके पास रैम/सीपीयू/बैंडविड्थ है, तो पागल हो जाएं"।

यह पढ़ता है कि आप उच्च प्रदर्शन के लिए देख रहे हैं, और कोई आपत्ति नहीं है लिखते थोड़ा धीमा किया जा रहा है, तो आप कर सकता है ध्यान देने योग्य है:

  • "सुरक्षित मोड" में अपने लेखन करते हैं, जहां लिखने (उन सभी को इस मामले में, जहां एन प्रतिकृति सेट में सर्वर की संख्या है, इसलिए) वापसी नहीं है, जब तक यह एन करने के लिए प्रचारित किया गया है सर्वर
  • अपने संबंध में चालक-उचित ध्वज सेट करें गुलामों से पढ़ने की अनुमति देने के लिए कोड।

यह आपको MySQL के समान क्लस्टर सेटअप प्राप्त करेगा - मास्टर पर एक बार लिखें, लेकिन किसी भी दास को पढ़ने के लिए योग्य है। ऐसी परिस्थिति में जहां आपके पास लिखने की तुलना में कई और पढ़े जाते हैं (कहते हैं, परिमाण का क्रम), यह उच्च प्रदर्शन हो सकता है, लेकिन मुझे नहीं पता कि जब कोई नोड डाउन हो जाता है तो यह व्यवहार कैसे करेगा (क्योंकि लिखने की कोशिश करना बंद हो सकता है 3 नोड्स तक, लेकिन केवल 2 ऊपर हैं, आदि - परीक्षण की आवश्यकता होगी)।

0

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

प्रतिकृति सेट के बारे में आपने जो कहा वह सच है: आप इसे दो साझा-कुछ नोड्स पर चला सकते हैं और एक अतिरिक्त आर्बिटर प्राप्त कर सकते हैं। हालांकि, अनुशंसित सेटअप 3 नोड्स होगा: एक प्राथमिक और दो सेकेंडरी।

http://www.markus-gattol.name/ws/mongodb.html#do_i_need_an_arbiter

+4

विचार यह है कि 2 सर्वर एक-दूसरे को दोहराने के लिए हैं। तो सर्वर 1 shard1 के मास्टर और shard2 के दास है। सर्वर विफलता के मामले में, शेष सर्वर दोनों shards के मास्टर बन जाएगा। – MGriesbach

+1

कृपया बताएं कि लिंक क्या है और कम से कम इसे यहां सारांशित करें – Mark

0

उस स्थिति में, मैं पहली जगह में sharding पर पुनर्विचार चाहते हैं, और बस इसे 2 मशीनों (+1 मध्यस्थ) के एक गैर-sharded प्रतिकृति सेट कर सकते हैं।

1

ध्यान देने योग्य एक बात यह है कि दोनों मशीनें ऊपर हैं, तो आपके प्रश्नों को उनके बीच विभाजित किया जा रहा है।जब कोई नीचे चला जाता है, तो सभी प्रश्न शेष मशीन पर जाएंगे जिससे इस पर दी गई मांगों को दोगुना कर दिया जाएगा। आपको यह सुनिश्चित करना होगा कि आपकी मशीनें प्रश्नों की अचानक दोगुना हो सकती हैं।