mongodb शार्क चंक माइग्रेशन 500GB में 13 दिन लगते हैं - क्या यह धीमा है या सामान्य है?


9

मेरे पास मंगोडब शार्द क्लस्टर है, शार्द की हैश है। इसमें 2 शार्प प्रतिकृति सेट हैं। प्रत्येक प्रतिकृति सेट में 2 मशीनें हैं।

मैंने एक और 2 शार्प रेप्लिका सेट जोड़कर एक प्रयोग किया, और यह फिर से शुरू हो जाता है।

हालांकि, थोड़ी देर के बाद मुझे पता चला कि चंक माइग्रेशन धीमा होना है। 1.4GB डेटा को स्थानांतरित करने में 1 घंटे का समय लगता है।

यह मुझे चिंता का विषय बनाता है, इसका मतलब है कि ५०० जीबी के चंक प्रवास को पूरा करने के लिए मुझे १३ दिनों तक इंतजार करना होगा!

मैं इस सामान में नया हूँ और मुझे कोई भगवान महसूस नहीं है कि यह धीमा, तेज या सामान्य है। लेकिन फिर भी, वे संख्या मुझे मना नहीं करती हैं।

प्रयोग पर अतिरिक्त नोट: - m3 मध्यम aws मशीनों का उपयोग करना - कोई अन्य प्रक्रिया नहीं चल रही है, केवल चंक माइग्रेशन - डिफ़ॉल्ट mongodb शार्पिंग इंस्टॉलेशन जिसके साथ कोई और कॉन्फ़िगरेशन नहीं है - shardkey ऑब्जेक्ट आईडी (_id) पर हैशेड का उपयोग कर रहा है - अधिकतम chunk हिडेन MBMB

जवाबों:


10

अपडेट: अप्रैल २०१8

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

मूल उत्तर

यदि आप रुचि रखते हैं तो मैं M202 उन्नत पाठ्यक्रम में एक चंक प्रवास के साथ क्या होता है, इसका पूरा विवरण देता हूं । सामान्य शब्दों में, मान लें कि माइग्रेशन बहुत तेज़ नहीं होते हैं, यहाँ तक कि खाली विखंडू के लिए भी, क्योंकि हाउसकीपिंग को एक सक्रिय प्रणाली में माइग्रेशन सुनिश्चित करने के लिए किया जाता है (ये अभी भी होते हैं, भले ही संतुलन कुछ भी हो रहा हो)।

इसके अतिरिक्त, पूरे क्लस्टर पर एक समय में केवल एक ही प्रवास हो रहा है - कोई समानता नहीं है। तो, इस तथ्य के बावजूद कि आपके पास दो "पूर्ण" नोड्स और दो "खाली" नोड्स हैं, किसी भी समय सबसे अधिक माइग्रेशन हो रहा है (सबसे अधिक विखंडू के साथ शार्क और सबसे कम के साथ शार्क)। इसलिए, 2 शर्ड जोड़े जाने से आपको संतुलन की गति के मामले में कुछ भी हासिल नहीं होता है और बस चांस की संख्या बढ़ जाती है जिसे स्थानांतरित करना पड़ता है।

माइग्रेशन के लिए, चंक्स की संभावना ~ 30MiB आकार में होती है (यह इस बात पर निर्भर करता है कि आपने डेटा को कैसे पॉप्युलेट किया है, लेकिन आम तौर पर यह डिफ़ॉल्ट अधिकतम चंक साइज़ के साथ आपका औसत होगा)। आप db.collection.getShardDistribution()उस जानकारी में से कुछ के लिए दौड़ सकते हैं , और अपने विखंडू के बारे में और अधिक जानकारी प्राप्त करने के तरीकों के लिए यहां मेरा जवाब देख सकते हैं।

चूंकि कोई अन्य गतिविधि नहीं चल रही है, इसलिए लक्ष्य शारद होने के लिए एक माइग्रेशन के लिए (नए जोड़े गए शार्प्स में से एक) स्रोत शार्क (मूल 2 में से एक) से 30MiB डेटा पढ़ना और कॉन्फिग सर्वर को अपडेट करना होगा एक बार यह करने के बाद नए स्थान को प्रतिबिंबित करें। 30MiB डेटा को लोड किए बिना एक सामान्य सिस्टम के लिए बहुत अधिक अड़चन नहीं होनी चाहिए।

यदि यह धीमा है, तो कई संभावित कारण हैं कि मामला क्यों है, लेकिन व्यस्त न होने वाली प्रणाली के लिए सबसे आम हैं:

  • सोर्स डिस्क I / O - यदि डेटा को पढ़ने पर सक्रिय मेमोरी में नहीं है, तो उसे डिस्क से पृष्ठांकित किया जाना चाहिए
  • नेटवर्क - अगर लेटेंसी, रेट लिमिटिंग, पैकेट लॉस आदि है तो रीड में काफी समय लग सकता है
  • लक्ष्य डिस्क I / O - डेटा और इंडेक्स को डिस्क पर लिखा जाना है, बहुत सारे इंडेक्स इसे बदतर बना सकते हैं, लेकिन आमतौर पर यह एक हल्के लोड सिस्टम पर कोई समस्या नहीं है
  • गर्भपात और असफल प्रवासन के कारण पलायन की समस्याएँ (कॉन्फ़िगरेशन सर्वर के साथ समस्याएँ, प्राइमरी पर हटाए गए मुद्दे)
  • प्रतिकृति अंतराल - प्रतिकृति सेटों के लिए पलायन के लिए, चिंता लिखें w:2या w:majorityडिफ़ॉल्ट रूप से उपयोग किया जाता है और इसे संतुष्ट करने के लिए दूसरी तिथि तक की आवश्यकता होती है।

यदि सिस्टम व्यस्त था, तो स्मृति विवाद, ताला विवाद आमतौर पर यहां भी संदिग्ध होंगे।

माइग्रेशन कितना समय ले रहे हैं, इसके बारे में अधिक जानकारी प्राप्त करने के लिए, यदि वे असफल हो रहे हैं आदि, तो अपने में प्रविष्टियों पर एक नज़र डालें config.changelog:

// connect to mongos
use config
db.changelog.find()

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

अंत में, ट्रैक माइग्रेशन / सुधार / टिप्पणी के लिए अनुरोध पर चंक पलायन की समानता को सुधारने के लिए, SER-4355 देखें


धन्यवाद, यह चंग माइग्रेशन मैकेनिज्म को मोंगोडब डॉक्यूमेंटेशन से बहुत अधिक समझाता है।
recybjunior

मैं निश्चित रूप से आपके पाठ्यक्रम में शामिल हो जाऊंगा। :) आपके द्वारा पहले बताई गई गति के बारे में आप क्या सोचते हैं? क्या यह सामान्य है या धीमा है? मुझे पता है कि यह सवाल कई पहलुओं पर आधारित है। लेकिन मैं
रेकब्यूनिजोर

यह आपके विवरण के आधार पर थोड़ा धीमा लगता है, लेकिन मुझे निश्चित होने के लिए मध्यम उदाहरणों को बेंचमार्क करना होगा। आपकी वर्तमान दर वे सभी के लिए सक्षम हो सकती है, या आपके पास उन समस्याओं में से एक हो सकती हैं जिनका मैंने उत्तर में उल्लेख किया है। एक नियंत्रण जिसे आप आज़मा सकते हैं, वह है मैनुअल चंक चाल - बैलेंसर को बंद करना और अनिवार्य रूप से यह देखने के लिए कि क्या कोई समस्या है और स्रोत / लक्ष्य प्रणालियों पर किसी चाल का क्या प्रभाव पड़ता है। आप मूव पर प्रासंगिक विवरण यहां देख सकते हैं: docs.mongodb.org/manual/reference/method/sh.moveChunk
एडम सी

सिर्फ यह जोड़ने के लिए कि चोंच मिरगेशन में mongoDB पर कम प्राथमिकता है और यहां तक ​​कि अगर वे व्यस्त हैं तो उच्च प्रदर्शन सिस्टम पर कुछ समय लग सकता है।
एंटोनियोस

@ एटोनिटी - यह सुनिश्चित नहीं है कि आप प्राथमिकता से क्या मतलब रखते हैं, एक चंक माइग्रेशन स्रोत शर्ड (जैसा कोई अन्य पढ़ा जाता है) से पढ़ा जाता है और टारगेट शार्द पर लिखता है (उपरोक्त लिखित चिंता के साथ), इन ऑपरेशनों की कोई प्राथमिकता नहीं है बनाम अन्य। वे व्यस्त प्रणालियों पर धीमे होंगे, लेकिन किसी भी अंतर्निहित प्राथमिकता अंतर के कारण नहीं।
एडम सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.