14

मैं एडब्ल्यूएस में अपना स्वयं का मोंगोडब क्लस्टर बनाने की जांच कर रहा हूं। Aws mongodb template कुछ अच्छे शुरुआती बिंदु प्रदान करता है। हालांकि, इसमें ऑटो स्केलिंग या नोड डाउन होने पर कवर नहीं होता है। उदाहरण के लिए, यदि मेरे पास 1 प्राथमिक और 2 माध्यमिक नोड्स हैं। और प्राथमिक नीचे चला जाता है और ऑटो स्केलिंग में शामिल होता है। मैं नए लॉन्च किए गए मोंगोडब उदाहरण को प्रतिकृति सेट में कैसे जोड़ूं?aws क्लाउड गठन और ऑटो स्केलिंग के साथ मोंगोड क्लस्टर

यदि आप टेम्पलेट को देखते हैं, तो यह जांचने के लिए init.sh स्क्रिप्ट का उपयोग करता है कि नोड लॉन्च किया जा रहा है या नहीं, यह अन्य नोड्स मौजूद है और प्राथमिक पर थियर आईपी पते के साथ प्रतिकृति सेट बनाता है। जब प्रतिकृति सेट को अनियमित रूप से कॉन्फ़िगर किया गया है, तो सभी नोड्स पहले से मौजूद हैं।

न केवल वह, लेकिन मेरा नोड ऐप मोंगोज़ का उपयोग करता है। डेटाबेस कनेक्शन का हिस्सा आपको एकाधिक नोड्स निर्दिष्ट करने की अनुमति देता है। मैं वर्तमान में क्या चल रहा है और चल रहा हूं (मुझे लगता है कि मैं डायनेमोडीबी का उपयोग कर सकता हूं लेकिन निश्चित नहीं) का ट्रैक कैसे रखूं।

यदि कोई उदाहरण नीचे चला जाता है तो सामान्य प्रवाह क्या होता है? यदि ऐसा होता है तो क्या लोग आमतौर पर समूहों को मैन्युअल रूप से कॉन्फ़िगर करते हैं?

कोई विचार? धन्यवाद।

उत्तर

26

यह एक बहुत अच्छा सवाल है और मैं हाल ही में इस बेहद दर्दनाक यात्रा के माध्यम से चला गया। मैं उम्मीद में यहां काफी व्यापक उत्तर लिख रहा हूं कि क्लाउडफॉर्मेशन के माध्यम से मोंगो डीबी क्लस्टर चलाने के इन विचारों में से कुछ दूसरों के लिए उपयोगी हैं।

मैं यह सोचते कर रहा हूँ कि तुम एक MongoDB उत्पादन क्लस्टर बना रहे हैं इस प्रकार है: -

  • 3 config सर्वर (माइक्रो/स्मॉल्स उदाहरणों यहाँ काम कर सकते हैं) जैसे की
  • कम से कम 1 ठीकरा मिलकर 2 (प्राथमिक & द्वितीयक) डेटा/लॉग/जर्नल डिस्क के लिए कॉन्फ़िगर किए गए बड़े डिस्क के साथ शेड इंस्टेंस (न्यूनतम या बड़ा)।
  • वोटिंग के लिए आर्बिटर मशीन (माइक्रो शायद ठीक है)।

यानी https://docs.mongodb.org/manual/core/sharded-cluster-architectures-production/

खुद की तरह

, मैं शुरू में है कि आप लिंक (https://s3.amazonaws.com/quickstart-reference/mongodb/latest/templates/MongoDB-VPC.template), लेकिन ईमानदार यह अब तक, अभी तक बहुत जटिल यानी यह 9,300 लाइनों लंबी और सेट है था होना करने के लिए में तैनात एडब्ल्यूएस MongoDB CloudFormation टेम्पलेट की कोशिश की कई सर्वर ऊपर (यानी प्रतिकृति shards, विन्यास, arbitors, आदि)। क्लाउडफॉर्मेशन टेम्पलेट को चलाने में उम्र लग गई और यह असफल रहा (उदा। 15 मिनट के बाद) जिसका अर्थ है कि सर्वर्स फिर से समाप्त हो गए थे और मुझे फिर से प्रयास करना था जो वास्तव में निराशाजनक/समय लेने वाला था।

जिस समाधान में मैं अंत में गया था (जिसे मैं बहुत खुश हूं) क्लस्टर में प्रत्येक प्रकार के मोंगोडीबी सर्वर के लिए अलग टेम्पलेट बनाना था।

  1. MongoDbConfigServer.template(config सर्वर बनाने के लिए टेम्पलेट - चलाने के इस 3 बार)
  2. MongoDbShardedReplicaServer.template(प्रतिकृति बनाने के लिए टेम्पलेट - रन प्रत्येक ठीकरा के लिए 2 बार)
  3. MongoDbArbiterServer.template(टेम्पलेट मध्यस्थ बनाने के लिए - प्रत्येक शार्ड के लिए एक बार चलाएं)

नोट: templat https://github.com/adoreboard/aws-cloudformation-templates

पर उपलब्ध तों विचार तो अलग-अलग अर्थात 3 config सर्वर, (1 ठीकरा के लिए) 2 sharded प्रतिकृति सर्वर और एक arbitor क्लस्टर में प्रत्येक सर्वर को लाने के लिए है। फिर आप प्रत्येक टेम्पलेट्स में कस्टम पैरामीटर जोड़ सकते हैं उदा। प्रतिकृति सर्वर के पैरामीटर में निम्न शामिल हो सकते हैं: -

  • InstanceType उदा। t2.micro
  • ReplicaSetName उदा। s1r(शार्ड 1 प्रतिकृति)
  • ReplicaSetNumber उदा। 2
  • VpcId उदा (नाम जैसे नाम हो जाता है s1r2 बनाने के लिए ReplicaSetName साथ प्रयुक्त) vpc-e4ad2b25(नहीं एक असली जाहिर VPC!)
  • SubnetId उदा
  • Route53HostedZone- subnet-2d39a157(! नहीं एक असली जाहिर सबनेट)
  • GroupId
  • Route53(मौजूदा MongoDB समूह क्रमांक का नाम) (सर्वोत्तम प्रथाओं बूलियन एक आंतरिक DNS के लिए एक रिकॉर्ड जोड़ने के लिए) (यदि बूलियन तो सच है आंतरिक DNS Route53 का उपयोग करने का आईडी)

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 कमांड। इसलिए मैं इसे एक नए मोंगोडीबी शार्ड के उदाहरणों के बाद बस चलाता हूं।

वैसे भी, यह इस मामले पर मेरे बदले विचार हैं। मुख्य बात यह है कि एक बार जब आपके पास टेम्पलेट्स होते हैं तो आपका जीवन बहुत आसान हो जाता है और प्रयास के लायक हो जाते हैं! शुभकामनाएँ! :-)

+0

बहुत विस्तार से स्पष्टीकरण के लिए धन्यवाद, मैं निश्चित रूप से इसे किसी बिंदु पर जाने दूंगा। मैं उस समय के लिए एक होस्टेड समाधान के साथ जा रहा था क्योंकि इस समस्या को हल करना आसान नहीं है और समय लेने वाला हो सकता है, लेकिन यहां आपके पास कुछ अच्छी सलाह है कि मैं फिर से जाना चाहूंगा। मुझे स्वीकार करना होगा, aws द्वारा प्रदान की गई कॉन्फ़िगरेशन बहुत जटिल है। – Sun

+0

होस्ट किए गए समाधान (उपयोग में आसान, तैनात करने के लिए तेज़ी से) के लिए फायदे और नुकसान हैं जो इसे स्वयं बनाते हैं (बिजली, नियंत्रण, स्वामित्व की सस्ती कुल लागत आदि)। मैंने दोनों किया है और दोनों अलग-अलग परिदृश्यों में उपयुक्त हैं। क्लाउडफॉर्मेशन टेम्पलेट्स एक भारी सीखने की वक्र (और आम तौर पर एडब्ल्यूएस देव-ओपीएस) के साथ मुश्किल हैं लेकिन इसके लायक हैं! सर्वर लाने, सॉफ़्टवेयर इंस्टॉल करने और कॉन्फ़िगर करने के लिए क्लाउडफॉर्मेशन टेम्पलेट्स का उपयोग करने के मुख्य फायदे में शामिल हैं (ए) दोहराने योग्यता (बी) आधारभूत संरचना-कोड-कोड यानी कोड समीक्षा (सी) विश्वसनीयता इत्यादि सक्षम करता है – bobmarksie

+0

मैं उपयोग करने का प्रयास करते समय एक ही समस्या में भाग गया एडब्ल्यूएस मोंगोडीबी क्विकस्टार्ट द्वारा प्रदान किया गया टेम्पलेट ... इसमें काफी समय लगा और कम या कोई प्रतिक्रिया नहीं मिली। मुझे आपका दृष्टिकोण पसंद है, @bobmarksie यह अधिक नियंत्रण प्रदान करता है। क्या कहीं भी हम उल्लिखित टेम्पलेट्स तक पहुंच सकते हैं? ('MongoDbConfigServer.template', 'MongoDbShardedReplicaServer.template' और' MongoDbArbiterServer.template') – monsieurBelbo

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