मेटियोर को कैसे स्केल करें

अनुवादक से : MeteorJS - open (MIT) फुल-स्टैक जावास्क्रिप्ट फ्रेमवर्क (क्लाइंट और सर्वर दोनों)। वर्तमान संस्करण 0.7.0 - संस्करण 1.0 को 2014 की शुरुआत में रिलीज करने की योजना है। एक हाब पर प्रकाशन: 1 , 2 , 3

स्केलिंग की तैयारी


घटक चार्ट:
छवि
एक लोड बैलेंसर के रूप में तीन उल्का सर्वर, एक MongoDb सर्वर और एक HaProxy सर्वर हैं। SSL का समर्थन करने के लिए, HaProxy के सामने स्टड रखें।

आइए घटकों और उनके विन्यास पर चर्चा करें।

MongoDb को कॉन्फ़िगर करें


मैं एक एकल-सर्वर oplog प्रतिकृति सेट का उपयोग कर रहा हूं। बेशक, बहु-सर्वर एक का उपयोग करना बेहतर है, लेकिन मैंने अधिक स्पष्टता के लिए इसे थोड़ा सरल किया।

एकल सर्वर प्रतिकृतियां कॉन्फ़िगर करें

सबसे पहले, आपको MongoDb शुरू करने की आवश्यकता है ताकि यह प्रतिकृति के बारे में जानता हो। उल्का प्रतिकृति सेट को कॉन्फ़िगर करने के लिए निम्न कमांड का उपयोग करें:

mongod --replSet meteor 

उसके बाद, मानगो-खोल खोलें, और हमारे एकल-सर्वर प्रतिकृति के लिए निम्नलिखित सेटिंग्स दर्ज करें:

 var config = {_id: "meteor", members: [{_id: 0, host: "127.0.0.1:27017"}]} rs.initiate(config) 

अभिगम नियंत्रण

चूंकि हम एक समर्पित MongoDb सर्वर का उपयोग कर रहे हैं, इसलिए इसके लिए अनधिकृत पहुँच को रोकना आवश्यक है। आप फ़ायरवॉल को कॉन्फ़िगर कर सकते हैं, या MongoDb में रोल-आधारित पहुँच का उपयोग कर सकते हैं। कॉन्फ़िगरेशन को आसान बनाने के लिए, मैं मानता हूं कि आपके पास फ़ायरवॉल ठीक से कॉन्फ़िगर किया गया है, या MongoDb भूमिका-आधारित एक्सेस प्रलेखन से परामर्श करें।

Meteor एप्लिकेशन के डेटाबेस को ऐप कहा जाता है। Oplog के साथ एकीकरण के लिए, हम स्थानीय नामक एक डेटाबेस का उपयोग करेंगे, जिसमें oplog स्वयं स्थित होगा।

उल्का सेटिंग


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

समर्थन का समर्थन करें

पिछले लेख में, मैंने पहले से ही इस बारे में बात की थी कि कैसे oplog उल्का पैमाने को बाहर निकालने में मदद कर सकता है। दो विकल्प हैं। आप SmartCollections या Meteor के प्रारंभिक संस्करण का उपयोग कर सकते हैं जिसमें Oplog ( UPD जारी किया गया संस्करण Meteor 0.7.0 OpLog के लिए पूर्ण समर्थन के साथ हो। इसका उपयोग किया जाना चाहिए।)।

Meteor में MongoDb oplog को एकीकृत करने के बारे में अधिक जानकारी के लिए, डेविड ग्रेसर की DevShop 10 चर्चा देखें।

दोनों ही मामलों में, आपको एक अतिरिक्त MongoDB कनेक्शन URL को oplog लॉग ( स्थानीय डेटाबेस, जिसे मैंने पहले उल्लेख किया था) को निर्दिष्ट करने की आवश्यकता होगी। SmartCollection के लिए, आपको पर्यावरण चर OPLOG_URL सेट करना होगा, Meteor में oplog की प्रारंभिक कार्यान्वयन के लिए, चर MONGO_OPLOG_URL

(और निश्चित रूप से, हमेशा की तरह, आपको MONGO_URL सेट करना याद रखना होगा)

IE 8 और 9 में स्टिकी-सत्र का समर्थन

IE 8 और 9 AJAX अनुरोध के साथ कुकीज़ नहीं भेजते हैं और यह हमारे लोड बैलेंसर को तोड़ देगा, जिसके बारे में हम आगे चर्चा करेंगे। सौभाग्य से, SockJS के पास इस समस्या का एक अंतर्निहित समाधान है, लेकिन यह Meteor में डिफ़ॉल्ट रूप से बंद है। इसे सक्षम करने के लिए, आपको निम्नलिखित पर्यावरण चर का निर्यात करना होगा:

 export USE_JSESSIONID=1 

Meteor संस्करण 0.6.6 या बाद के संस्करण का उपयोग करें, यह विकल्प इस संस्करण के बाद से प्रकट हुआ है।

सर्वर का चयन

यह बहुत महत्वपूर्ण है कि आप उल्का के लिए एक ही सर्वर चुनें। यह आवश्यक है कि वे एक ही डेटा सेंटर में हों, एक ही प्रदर्शन, ओएस और आर्किटेक्चर हो, अन्यथा लोड अनुचित रूप से संतुलित होगा।

वर्तमान सेटअप में, मैं प्रति सर्वर केवल एक प्रक्रिया का उपयोग करता हूं, इसलिए मल्टी-कोर सर्वर मदद करने की संभावना नहीं है। सर्वरों के लिए सिंगल-कोर हार्डवेयर वातावरण का उपयोग करने का प्रयास करें। निम्नलिखित लेखों में मैं इसके बारे में अधिक विस्तार से बात करूंगा।

तैनाती

सर्वरों को ठीक से कॉन्फ़िगर करके अपने उल्का सर्वरों को सही ढंग से तैनात करना बहुत महत्वपूर्ण है। यदि संभव हो, तो किसी ऐसे व्यक्ति से सहायता लें जो इसके द्वारा निर्देशित हो। या आप उल्का-अप का उपयोग कर सकते हैं, जो मैंने औद्योगिक उपयोग के लिए तैयार उल्का अनुप्रयोगों को तैनात करने के लिए बनाया था।

लोड बैलेंसर (HaProxy) कॉन्फ़िगर करना


हमारे उल्का अनुप्रयोग में लोड संतुलन के लिए मैं HaProxy का उपयोग करूंगा। यह कई कंपनियों द्वारा औद्योगिक संचालन में बहुत स्थिर और परीक्षण किया गया है। HaProxy भी चिपचिपा-सत्र का समर्थन करता है और कुछ अन्य सेटिंग्स हैं जो हमारे लिए उपयोगी हैं।

स्टिकी-सत्र का समर्थन

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

क्लाइंट के आईपी पते को लागू करना इसे लागू करने का सबसे आसान तरीका है, लेकिन आप इसे ठीक से लोड नहीं कर सकते। हम आईपी सूचना पर भरोसा नहीं कर सकते हैं और पारदर्शी परदे के पीछे (जिनमें से अधिकांश प्रदाताओं द्वारा उपयोग किया जाता है) मूल आईपी को छिपाते हैं, जिसके परिणामस्वरूप हम सर्वरों में से एक पर लोड में वृद्धि करेंगे।

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

एक कुकी-आधारित समाधान हमारे लिए सबसे अच्छा काम करता है - यह अच्छी तरह से संतुलित है और कॉन्फ़िगर करना आसान है।

लोड संतुलन एल्गोरिथ्म

एक अच्छा भार संतुलन एल्गोरिदम चुनना बहुत महत्वपूर्ण है। HaProxy में उनमें से कई हैं। राउंडरोबिन एल्गोरिदम को प्रलेखन द्वारा अनुशंसित किया जाता है। यह उन अनुप्रयोगों के लिए बहुत अच्छा है, जिनमें स्टेटलेस स्टेट नहीं है, उदाहरण के लिए, RoR या PHP में।

हालांकि, उल्का राज्य के लेखांकन और दीर्घकालिक कनेक्शन पर आधारित है, इसलिए कम से कम एल्गोरिथ्म का उपयोग करना बेहतर है। इसमें, एक नया कनेक्शन सर्वर को दिया जाता है जिसमें कम से कम संख्या में कनेक्शन होते हैं। यह एक सर्वर के अस्थायी बंद होने की स्थिति में भी एक समान भार वितरण देता है। राउंड्रोबिन के मामले में , लोडिंग असमान होगी।

समायोजन

देखें कि मैंने HaProxy को कैसे कॉन्फ़िगर किया, यह कॉन्फ़िगरेशन फ़ाइल है:

 defaults mode http timeout connect 5s timeout client 10s timeout server 10s frontend public #binding port 80 bind *:80 default_backend apps backend apps #load balancing algorithm balance leastconn #using JSESSIONID as the cookie cookie JSESSIONID insert nocache #adding server server host1 host1.example.com cookie host1 server host2 host2.example.com cookie host2 server host3 host3.example.com cookie host3 

मैंने स्पष्टता के लिए कॉन्फ़िगरेशन फ़ाइल के कुछ हिस्सों को हटा दिया। पूर्ण संस्करण यहां लिया जा सकता है

स्टड के साथ एसएसएल


मेरी राय में, औद्योगिक संचालन में एसएसएल का उपयोग अनिवार्य है। दुर्भाग्य से, HaProxy का स्थिर संस्करण SSL का समर्थन नहीं करता है। लेकिन हम SSL कनेक्शन के दूसरे छोर के रूप में HaProxy से पहले Stud का उपयोग कर सकते हैं। और हां, हैप्रोकी के समान सर्वर पर स्टड को तैनात करना बेहतर है।

स्रोत से स्टड स्थापित करना सुनिश्चित करें। Apt-get द्वारा प्राप्त संस्करण को हटा दिया गया है।

आप निम्न सेटिंग्स फ़ाइल का उपयोग कर सकते हैं:

 #bind to defualt SSL port frontend = "[*]:443" #haproxy host and port backend = "[localhost]:80" #location of the .pem file pem-file = "/path/to/ssl.pem" 


यहाँ सेटिंग्स फ़ाइल का पूर्ण संस्करण है।

स्टड को आपके .pem फ़ाइल में एसएसएल प्रमाणपत्र और निजी कुंजी की आवश्यकता होती है। इस मैनुअल में अधिक जानकारी।

पुनश्च हब पर एक नया हब दिखाई दिया है: Meteor.JS - साइन अप करें।

Source: https://habr.com/ru/post/In206330/


All Articles