यह एक बहुत अच्छा सवाल है और मैं हाल ही में इस बेहद दर्दनाक यात्रा के माध्यम से चला गया। मैं उम्मीद में यहां काफी व्यापक उत्तर लिख रहा हूं कि क्लाउडफॉर्मेशन के माध्यम से मोंगो डीबी क्लस्टर चलाने के इन विचारों में से कुछ दूसरों के लिए उपयोगी हैं।
मैं यह सोचते कर रहा हूँ कि तुम एक MongoDB उत्पादन क्लस्टर बना रहे हैं इस प्रकार है: -
जिस समाधान में मैं अंत में गया था (जिसे मैं बहुत खुश हूं) क्लस्टर में प्रत्येक प्रकार के मोंगोडीबी सर्वर के लिए अलग टेम्पलेट बनाना था।
पर उपलब्ध तों विचार तो अलग-अलग अर्थात 3 config सर्वर, (1 ठीकरा के लिए) 2 sharded प्रतिकृति सर्वर और एक arbitor क्लस्टर में प्रत्येक सर्वर को लाने के लिए है। फिर आप प्रत्येक टेम्पलेट्स में कस्टम पैरामीटर जोड़ सकते हैं उदा। प्रतिकृति सर्वर के पैरामीटर में निम्न शामिल हो सकते हैं: -
CloudForma के बारे में वास्तव में अच्छी बात यह है टियन यह है कि इन कस्टम पैरामीटर में (ए) इसे चलाने वाले लोगों के लिए उपयोगी वर्णन हो सकता है, (बी) विशेष प्रकार (उदा। जब चल रहा है एक prefiltered combobox बनाता है तो गलतियों को बनाने के लिए कठिन हैं) और (सी) डिफ़ॉल्ट मान। यहाँ एक उदाहरण है: -
"Route53HostedZone": {
"Description": "Route 53 hosted zone for updating internal DNS (Only applicable if the parameter [ UpdateRoute53 ] = \"true\"",
"Type": "AWS::Route53::HostedZone::Id",
"Default": "YA3VWJWIX3FDC"
},
इस बार हम मूलभूत मूल्यों पर भरोसा कर सकते हैं और केवल सर्वर उदाहरण हम बना रहे हैं पर निर्भर करता है चीजों के एक जोड़े tweak का एक बहुत के रूप में एक पूर्ण हवा चल CloudFormation टेम्पलेट बनाता है (या प्रतिस्थापित)।
साथ ही पैरामीटर, पहले वर्णित 3 टेम्पलेट्स में से प्रत्येक में "Resources"
अनुभाग है जो उदाहरण बनाता है। हम "AWS::CloudFormation::Init"
सेक्शन के माध्यम से भी अच्छी चीजें कर सकते हैं। जैसे
"Resources": {
"MongoDbConfigServer": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init": {
"configSets" : {
"Install" : [ "Metric-Uploading-Config", "Install-MongoDB", "Update-Route53" ]
},
"configSets"
पिछले उदाहरण में पता चलता है कि एक MongoDB सर्वर बनाने बस एक एडब्ल्यूएस उदाहरण बनाकर और उस पर MongoDB स्थापित करने की बात नहीं है, लेकिन यह भी हम (क) CloudWatch डिस्क/स्मृति मैट्रिक्स स्थापित कर सकते हैं (ख) रूट 53 DNS अद्यतन करें। विचार यह है कि आप जितना संभव हो सके DNS/मॉनीटरिंग आदि जैसी चीजों को स्वचालित करना चाहते हैं।
आईएमओ, एक टेम्पलेट बना रहा है, और इसलिए प्रत्येक सर्वर के लिए एक ढेर क्लाउडफॉर्मेशन वेब कंसोल के माध्यम से सर्वर को प्रतिस्थापित करने में सक्षम होने का बहुत अच्छा लाभ है। इसके अलावा, क्योंकि हमारे पास सर्वर-प्रति-टेम्पलेट है, तो मोंगोडीबी क्लस्टर को बिट से थोड़ा आसान बनाना आसान है।
टेम्पलेट्स बनाने पर सलाह का मेरा अंतिम बिट अन्य गिटहब मोंगोडीबी क्लाउडफॉर्मेशन टेम्पलेट्स से आपके लिए क्या काम करता है, इसकी प्रतिलिपि बनाना होगा। मैंने RAID10 का उपयोग करने के लिए प्रतिकृति सर्वर बनाने के लिए निम्नलिखित का उपयोग किया (बड़े पैमाने पर अधिक महंगा एडब्ल्यूएस प्रावधान आईओपीएस डिस्क के बजाय)।
https://github.com/CaptainCodeman/mongo-aws-vpc/blob/master/src/templates/mongo-master.template
अपने प्रश्न में आप ऑटो स्केलिंग उल्लेख - मेरी प्राथमिकता एक ठीकरा जोड़ने/एक टूटी हुई उदाहरण मैन्युअल रूप को बदलने के लिए होगा (ऑटो स्केलिंग वेब कंटेनर जैसे बिलाव/अपाचे लेकिन एक MongoDB क्लस्टर के साथ समझ में आता है चाहिए वास्तव में समय के साथ धीरे-धीरे बढ़ते हैं)। हालांकि, निगरानी बहुत महत्वपूर्ण है, विशेष रूप से डिस्क सर्वर पर डिस्क आकार जब आप डिस्क भर रहे हैं तो आपको सतर्क करने के लिए (ताकि आप डेटा को हटाने के लिए एक नया शर्ड जोड़ सकें)। एडब्ल्यूएस क्लाउडवॉच मेट्रिक्स/अलार्म का उपयोग करके या मोंगोडीबी एमएमएस सेवा का उपयोग करके निगरानी आसानी से हासिल की जा सकती है।
यदि कोई नोड नीचे जाता है तो एक शर्ट में प्रतिकृतियों में से एक, तो आप बस सर्वर को मार सकते हैं, इसे अपने क्लाउडफॉर्मेशन टेम्पलेट का उपयोग करके पुन: बना सकते हैं और डिस्क स्वचालित रूप से समन्वयित हो जाएंगी। यदि मेरा उदाहरण नीचे चला जाता है और आम तौर पर कोई पुन: कॉन्फ़िगरेशन आवश्यक नहीं होता है तो यह मेरा सामान्य प्रवाह होता है। मैंने सर्वर को ठीक करने की कोशिश कर रहे अतीत में बहुत अधिक घंटे बर्बाद कर दिए हैं - कभी-कभी भाग्यशाली/कभी-कभी नहीं। मेरी बैकअप रणनीति अब , zip
के माध्यम से डेटाबेस के महत्वपूर्ण संग्रहों में mongodump
चलाती है और एडब्ल्यूएस एस 3 पर अपलोड होती है। इसका मतलब यह है कि अगर परमाणु विकल्प होता है (पूरा डेटाबेस भ्रष्टाचार) हम एक घंटे में पूरे डेटाबेस और mongorestore
या 2.
पुन: कर सकते हैं हालांकि, अगर आप एक नया ठीकरा बनाने (क्योंकि आप स्थान से बाहर चला रहे हैं) विन्यास है ज़रूरी। उदाहरण के लिए, यदि आप एक नया शार्ड 3 जोड़ रहे हैं तो आप 2 प्रतिकृति नोड्स (उदाहरण के साथ प्राथमिक = = mongo-s3r1
/नाम के साथ प्राथमिक = = mongo-s3r2
) और 1 आर्बिटर (उदाहरण के साथ mongo-s3r-arb
) के माध्यम से कनेक्ट करेंगे, तो आप कनेक्ट करेंगे एक mongos
(MongoDB रूटर) करने के लिए एक MongoDB खोल और इस कमांड चलाएँ: -
sh.addShard("s3r/mongo-s3r1.internal.mycompany.com:27017,mongo-s3r2.internal.mycompany.com:27017")
नोट: - यह आदेश मानता है कि आपके Route53 के माध्यम से निजी डीएनएस (सबसे अच्छा अभ्यास) का उपयोग कर रहे हैं। आप addShard
कमांड में 2 प्रतिकृतियों के निजी आईपी का उपयोग कर सकते हैं लेकिन मुझे अतीत में बहुत बुरी तरह से जला दिया गया है (उदाहरण के लिए सीरेल महीने पहले सभी एडब्लूएस इंस्टेंस को पुनरारंभ किया गया था और उन सभी के लिए नए निजी आईपी उत्पन्न किए गए थे। मोंगोडीबी क्लस्टर ने मुझे 2 दिन लगे क्योंकि मुझे मैन्युअल रूप से सबकुछ फिर से भरना पड़ा - जबकि रूट 53 में आईपी बदलने से कुछ सेकंड लगते हैं ...;-)
आप बहस कर सकते हम भी एक और CloudFormation टेम्पलेट को addShard
आदेश जोड़ना चाहिए लेकिन IMO यह अनावश्यक जटिलता कहते हैं, क्योंकि यह जो एक MongoDB रूटर (mongos
) है एक सर्वर के बारे में जानते हैं और चलाने के लिए है कि करने के लिए कनेक्ट करने के लिए है addShard
कमांड। इसलिए मैं इसे एक नए मोंगोडीबी शार्ड के उदाहरणों के बाद बस चलाता हूं।
वैसे भी, यह इस मामले पर मेरे बदले विचार हैं। मुख्य बात यह है कि एक बार जब आपके पास टेम्पलेट्स होते हैं तो आपका जीवन बहुत आसान हो जाता है और प्रयास के लायक हो जाते हैं! शुभकामनाएँ! :-)
बहुत विस्तार से स्पष्टीकरण के लिए धन्यवाद, मैं निश्चित रूप से इसे किसी बिंदु पर जाने दूंगा। मैं उस समय के लिए एक होस्टेड समाधान के साथ जा रहा था क्योंकि इस समस्या को हल करना आसान नहीं है और समय लेने वाला हो सकता है, लेकिन यहां आपके पास कुछ अच्छी सलाह है कि मैं फिर से जाना चाहूंगा। मुझे स्वीकार करना होगा, aws द्वारा प्रदान की गई कॉन्फ़िगरेशन बहुत जटिल है। – Sun
होस्ट किए गए समाधान (उपयोग में आसान, तैनात करने के लिए तेज़ी से) के लिए फायदे और नुकसान हैं जो इसे स्वयं बनाते हैं (बिजली, नियंत्रण, स्वामित्व की सस्ती कुल लागत आदि)। मैंने दोनों किया है और दोनों अलग-अलग परिदृश्यों में उपयुक्त हैं। क्लाउडफॉर्मेशन टेम्पलेट्स एक भारी सीखने की वक्र (और आम तौर पर एडब्ल्यूएस देव-ओपीएस) के साथ मुश्किल हैं लेकिन इसके लायक हैं! सर्वर लाने, सॉफ़्टवेयर इंस्टॉल करने और कॉन्फ़िगर करने के लिए क्लाउडफॉर्मेशन टेम्पलेट्स का उपयोग करने के मुख्य फायदे में शामिल हैं (ए) दोहराने योग्यता (बी) आधारभूत संरचना-कोड-कोड यानी कोड समीक्षा (सी) विश्वसनीयता इत्यादि सक्षम करता है – bobmarksie
मैं उपयोग करने का प्रयास करते समय एक ही समस्या में भाग गया एडब्ल्यूएस मोंगोडीबी क्विकस्टार्ट द्वारा प्रदान किया गया टेम्पलेट ... इसमें काफी समय लगा और कम या कोई प्रतिक्रिया नहीं मिली। मुझे आपका दृष्टिकोण पसंद है, @bobmarksie यह अधिक नियंत्रण प्रदान करता है। क्या कहीं भी हम उल्लिखित टेम्पलेट्स तक पहुंच सकते हैं? ('MongoDbConfigServer.template', 'MongoDbShardedReplicaServer.template' और' MongoDbArbiterServer.template') – monsieurBelbo