আপডেট: এপ্রিল 2018
প্রশ্নের উত্তরটি এই সময়ে সঠিক ছিল, তবে তখন থেকেই জিনিসগুলি এগিয়ে চলেছে। সংস্করণ ৩.৪ থেকে সমান্তরালতা চালু হয়েছে এবং আমি মূলত টিকিটটি বন্ধ করে দিয়েছি। আরও তথ্যের জন্য আমি এই সাম্প্রতিক উত্তরের কয়েকটি বিবরণ আবরণ করি । আমি উত্তরটি বাকি হিসাবে রাখব কারণ এটি সাধারণ সমস্যা / সীমাবদ্ধতার পাশাপাশি পুরানো সংস্করণে যে কারও জন্য বৈধ।
আসল উত্তর
আপনি যদি আগ্রহী হন তবে এম 202 অ্যাডভান্সড কোর্সে খণ্ড মাইগ্রেশনের সাথে কী ঘটে যায় তার পুরো ব্যাখ্যা আমি দিচ্ছি । সাধারণ পরিভাষায়, কেবলমাত্র এটিই বলা যাক যে মাইগ্রেশনগুলি সক্রিয় সিস্টেমে মাইগ্রেশনগুলি কাজ করে তা নিশ্চিত করার জন্য গৃহকর্ম সঞ্চালনের কারণে, এমনকি খালি খণ্ডগুলির জন্যও খুব দ্রুত নয়, (ব্যালান্সিং ছাড়া কিছুই না ঘটলেও এগুলি এখনও ঘটে)।
অতিরিক্তভাবে, পুরো ক্লাস্টারে এক সময়ে কেবলমাত্র একটি মাইগ্রেশন ঘটছে - কোনও সমান্তরালতা নেই। সুতরাং, আপনার দুটি "পূর্ণ" নোড এবং দুটি "খালি" নোড রয়েছে তা সত্ত্বেও, যে কোনও সময় সর্বাধিক একটি মাইগ্রেশন ঘটছে (সর্বাধিক খণ্ডের সাথে শারদ এবং কমপক্ষে শারদগুলির মধ্যে)। অতএব, 2 টি শারড যুক্ত করা আপনার ব্যালেন্সিং গতির দিক থেকে কিছুই লাভ করে না এবং কেবল স্থানগুলির সংখ্যা বাড়িয়ে তোলে।
মাইগ্রেশনগুলির জন্য, খণ্ডগুলি সম্ভবত আকারে 30MiB হয় (আপনি কীভাবে ডেটা তৈরি করেন তার উপর নির্ভর করে, তবে সাধারণত এটি আপনার ডিফল্ট সর্বাধিক আকারের আকার হবে)। আপনি db.collection.getShardDistribution()
সেই কয়েকটি তথ্যের জন্য দৌড়াতে পারেন এবং আপনার খণ্ডগুলি সম্পর্কে আরও বেশি তথ্য পাওয়ার উপায়গুলির জন্য আমার উত্তরটি এখানে দেখুন।
যেহেতু অন্য কোনও ক্রিয়াকলাপ চলছে না, লক্ষ্য শারড হওয়ার জন্য স্থানান্তরিত হওয়ার জন্য (সদ্য যুক্ত হওয়া শার্ডগুলির মধ্যে একটি) উত্স শারডস (মূল 2 টির মধ্যে একটি) থেকে M 30MiB ডেটা পড়তে হবে এবং কনফিগার সার্ভারগুলিকে আপডেট করতে হবে নতুন কাজ শেষ হয়ে গেলে এটি প্রতিফলিত করুন। 30MiB ডেটা স্থানান্তর করা লোড ছাড়াই একটি সাধারণ সিস্টেমের জন্য খুব বেশি বাধা হওয়া উচিত নয়।
যদি এটি ধীর গতিতে হয়, তবে এরকম সম্ভাব্য কয়েকটি কারণ রয়েছে তবে ব্যস্ত নয় এমন ব্যবস্থার পক্ষে সবচেয়ে সাধারণ:
- উত্স ডিস্ক I / O - তথ্যটি পড়ার সময় যদি ডেটা সক্রিয় মেমরিতে না থাকে তবে অবশ্যই এটি ডিস্ক থেকে পৃষ্ঠাযুক্ত করা উচিত
- নেটওয়ার্ক - যদি ল্যাটেন্সি, রেট সীমাবদ্ধকরণ, প্যাকেটের ক্ষতি ইত্যাদি থাকে তবে পঠনটিতে বেশ খানিকটা সময় লাগতে পারে
- টার্গেট ডিস্ক I / O - ডেটা এবং সূচকগুলি ডিস্কে লিখতে হবে, প্রচুর সূচীগুলি এটি আরও খারাপ করে তুলতে পারে, তবে সাধারণত হালকা লোড হওয়া সিস্টেমে কোনও সমস্যা হয় না
- মাইগ্রেশনগুলির সাথে সমস্যাগুলি অবসন্ন এবং ব্যর্থ স্থানান্তর ঘটায় (কনফিগার সার্ভারগুলির সাথে সমস্যাগুলি, প্রাইমারিগুলিতে মুছে ফেলা সংক্রান্ত সমস্যা)
- অনুলিপি পিছনে - প্রতিস্থাপন সেটগুলিতে স্থানান্তরিত করতে, উদ্বেগ লিখতে
w:2
বা w:majority
ডিফল্টরূপে ব্যবহৃত হয় এবং এটি সন্তুষ্ট করতে আপ টু ডেট সেকেন্ডারি প্রয়োজন।
যদি সিস্টেমটি ব্যস্ত থাকে তবে মেমরির বিতর্ক, লক কনটেন্টটি সাধারণত এখানে সন্দেহজনক হয়ে উঠত।
মাইগ্রেশন কত দিন নিচ্ছে সে সম্পর্কে আরও তথ্য পেতে, যদি তারা ব্যর্থ হয় ইত্যাদি ইত্যাদি, আপনার প্রবেশদ্বারটি একবার দেখুন config.changelog
:
// connect to mongos
use config
db.changelog.find()
যেমনটি আপনি দেখেছেন, এবং আমি সাধারণত যখন আমি প্রশিক্ষণ / শিক্ষা করি তখন লোকেদের বলি, যদি আপনি জানেন যে আপনার জন্য 4 টি শার্ডের প্রয়োজন হবে, তবে র্যাম্পের চেয়ে 4 দিয়ে শুরু করা ভাল। যদি আপনি এটি করেন তবে আপনার সচেতন হওয়া দরকার যে একটি শারড যুক্ত করা দীর্ঘ সময় নিতে পারে এবং প্রাথমিকভাবে উত্সগুলির তুলনায় নেট নেতিবাচক যা লাভের চেয়ে বেশি নয় (এর আরও বিশদ আলোচনার জন্য আমার শার্পিংয়ের ক্ষতি সিরিজের অংশ II দেখুন)।
পরিশেষে, খণ্ড মাইগ্রেশনের সমান্তরালতা উন্নত করার বৈশিষ্ট্যটির অনুরোধটি ট্র্যাক / আপভোট / মন্তব্য করতে, সার্ভার -৩৩55৫ দেখুন