कई फ्रंट एंड सर्वर पर कोड की तैनाती


8

हमारे पास एक ऐसी स्थिति है जहां हमारे पास एक सामान्य डेटाबेस की ओर इशारा करते हुए कई लोड संतुलित सर्वर हैं।

चीजों के सामान्य चलने में यह ठीक काम करता है और अतिरेक, स्केलेबिलिटी आदि देता है।

हालाँकि हम थोड़े चौके के लिए तैनाती पा रहे हैं।

हम बड़े पैमाने पर सुविधाओं का उपयोग कर रहे हैं और तैनाती को स्वचालित करने की कोशिश कर रहे हैं। फिलहाल तैनाती बहुत विश्वसनीय नहीं है।

सरलीकृत रूप में प्रत्येक सर्वर के लिए परिनियोजन स्क्रिप्ट में दो चरण होते हैं

  1. फ़ाइलें अद्यतन करें

  2. विशेषताएं बदलें (जो निर्भरता, सेटिंग्स परिवर्तन आदि का प्रबंधन करेगा)

क्या बिना किसी असंगत स्थिति के कई सर्वरों पर तैनाती के लिए कोई सर्वोत्तम प्रथा है?

जहाँ तक मैं देख सकता हूँ कि यदि आप चरण 1 और 2 को सर्वर ए में तैनात करते हैं तो इससे सर्वर बी टूट जाएगा, यदि आप चरण 2 पर आगे बढ़ने से पहले दोनों सर्वरों पर एक-एक करके प्रयास करते हैं तो वे दोनों कुछ समय के लिए टूट जाएंगे।

जवाबों:


6

आपको शायद एजिर में देखना चाहिए , जो अब तक का सबसे लचीला और शक्तिशाली ड्रुपल साइट प्रबंधन / तैनाती प्रणाली है। यह 'प्लेटफ़ॉर्म' को प्रबंधित करने में सक्षम है जो कई वेब हेड्स या 'क्लस्टर्स' को फैलाता है, साथ ही कई अन्य कॉन्फ़िगरेशन भी।

मैं उनके सामुदायिक प्रलेखन के माध्यम से पढ़ने का सुझाव देता हूं, जो आम तौर पर बहुत अच्छा होता है, साथ ही साथ Mig5 के उत्कृष्ट अवलोकन और परिचयात्मक लेख और इस तरह के उनके कुछ अन्य लेखों के माध्यम से पढ़ना ।

आपको #airir IRC चैनल में भी अच्छा समर्थन मिल सकता है।

यह थोड़ा सा वर्कफ़्लो परिवर्तन होगा, जो निश्चित रूप से आपके सिर को पाने के लिए कुछ समय ले सकता है, लेकिन एक बार जब आप वहां होते हैं तो आप पीछे नहीं देखेंगे।


धन्यवाद, यह दिलचस्प है, लेकिन एक बड़ा बदलाव हो सकता है जो हम उम्मीद कर रहे थे। हमारे पास केवल एक साइट है इसलिए एजिर एक ओवरकिल और जटिलता का एक और स्तर जैसा लगता है।
जेरेमी फ्रेंच

धन्यवाद मुझे नहीं पता कि क्या हम ऐसा कर पाएंगे लेकिन यह एक बहुत अच्छा विकल्प है।
जेरेमी फ्रेंच

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

4

हमारी कंपनी में हम Drupal साइटों की एक बहुत बनाए रखते हैं, हमारा वर्तमान सेटअप कुछ इस तरह से है:

  • हर साइट के कोडबेस का अपना स्वयं का गिट रेपो है
  • अगली रिलीज के लिए नई सुविधाओं के पर्याप्त रूप से स्थिर होने की संभावना नहीं है

ऊपर मैं कहूंगा कि अधिकांश Drupal साइटों के लिए काफी सामान्य है।

हम अपनी कंपनी में विशेष क्या करते हैं डेबियन पैकेज एक कस्टम ड्रश कमांड का उपयोग करके तैनाती के लिए साइटों - ' ड्रश डेबियन पैकेजिंग '।

ड्रश डेबियन पैकेजिंग ड्रुपल साइटों को डेबियन या उबंटू सर्वर पर तैनात करने के साधन के रूप में डेबियन संकुल के निर्माण के लिए एक ड्रश कमांड प्रदान करता है।

ड्रश डेबियन पैकेजिंग ने ड्रुपल हुक सिस्टम का उपयोग एक डेबियन पैकेज बनाने के लिए किया है जो आपकी साइटों की जरूरतों को सबसे अच्छा फिट करता है। विशेषताओं में शामिल:

  • Apache2 और Nginx webservers के लिए स्वचालित वर्चुअल होस्ट कॉन्फ़िगरेशन
  • /Etc/cron.d में क्रोन सेटअप
  • साइटों / डिफ़ॉल्ट / फ़ाइलों के लिए विभाजन विभाजन के साथ स्वचालित कोड परिनियोजन
  • Dpkg debconf सेटिंग टूल के माध्यम से स्वचालित कॉन्फ़िगरेशन
  • स्वचालित तैनाती प्रक्रिया
  • कस्टम गिट VCS Git से पैकेज बनाने के लिए हैंडलर

इसका क्या मतलब है?

एक रिलीज बनाने के लिए:

cd /path/to/drupal-root
drush dh-make

एक रिलीज को तैनात करने के लिए, पहले SCP .deb को क्लस्टर के सभी वेब सर्वर पर भेजें। फिर सभी वेब सर्वरों पर (आप एक ही समय में फार्म में सभी सर्वरों को कमांड टाइप करने के लिए लिनक्स पैकेज cssh का उपयोग कर सकते हैं ):

sudo dpkg -i drupal-site-yoursitehere.2011.05.25-1.all.deb

एक वेब सर्वर चलाने पर:

cd /path/to/drupal-root
sudo -u drupal-site-yoursitehere drush updb && drush fra -y && drush cron

किया हुआ

बेशक इसे वापस रोल करने के लिए अब एक कोडबेस बिंदु से तुच्छ है, बस सभी वेब सर्वर के लिए .deb के पिछले संस्करण को स्थापित करें और डेटाबेस को रोलबैक करें।

इस बारे में किसी भी प्रश्न का उत्तर देने में खुशी होगी


यह एक बढ़िया तरीका है! क्या आपने इस वर्कफ़्लो को स्थापित करने से पहले Aegir में देखा था?
एंडी

एजिर महान है यदि आप अपनी सभी वेबसाइटों को एक ही क्लस्टर में होस्ट करते हैं, तो जब आप भौतिक होस्ट को अलग करने के लिए अपनी वेबसाइटों को तैनात करते हैं तो यह मदद नहीं करता है। मैं इस सेटअप के प्रतियोगी के रूप में एजिर को नहीं देखता हूं, वास्तव में जल्द ही हम होस्टमास्टर इंस्टाल करेंगे और ड्रग डिसैन पैकेजिंग के साथ एजिंग के लिए प्लेटफार्म
wiifm

3

परिनियोजन प्रक्रिया का कौन सा हिस्सा एक राग / अविश्वसनीय है?

यदि यह "अपडेट सर्वर ए तो बी / असंगति" समस्या है, तो अपने पुश की अवधि के लिए रखरखाव पृष्ठ को ऊपर रखने के बारे में क्या? रखरखाव पृष्ठ ऊपर, दोनों वेब प्रमुखों पर अपडेट कोड, उनमें से किसी एक पर अद्यतन चलाएँ । रखरखाव पृष्ठ नीचे। यह बहुत आसानी से स्क्रिप्ट योग्य है।

एक अन्य विकल्प: आप जिस तरह की साइट चलाते हैं, उसके आधार पर, आप एक "रीड-ओनली मोड" बना सकते हैं, जो सभी उपयोगकर्ताओं को ऑफ़लाइन करता है और लॉगिन / रजिस्टर को निष्क्रिय करता है। अपने DB को उसी db बॉक्स पर एक दूसरे DB में क्लोन करें, अपने सामने के छोर को एक नए डॉकरॉट पर क्लोन करें, वहां अपने अपडेट करें, फिर नए फ्रंट एंड डॉक्रॉट में Apache के डॉक्रोट को सिमिलिंक करें। वर्कफ़्लो कुछ इस तरह है:

  1. केवल मोड पर पढ़ें
  2. Current_db का चयन करें new_db
  3. cp -R current_docroot new_docroot
  4. new.yourdomain.com ==> / new_docroot
  5. new_docroot में अपडेट कोड
  6. update.php
  7. symlink / new_docroot ==> current_docroot
  8. पढ़ें- केवल मोड बंद

दिलचस्प विचार, इसे ऑफ़लाइन लेने के लिए +1। हम किसी भी समय आसान चित्रण करने का लक्ष्य बना रहे थे। ऑफ़लाइन लेना आपको रिलीज़ विंडो के बारे में सोचने पर मजबूर करता है लेकिन ऐसा करने का एक बहुत विश्वसनीय तरीका हो सकता है।
जेरेमी फ्रेंच

यह सब उस पर निर्भर करता है जो आप तैनात कर रहे हैं। उदाहरण के लिए सीएसएस परिवर्तन को न्यूनतम प्रभाव के साथ लाइव तैनात किया जा सकता है (कैशे अपडेट के अलावा जो होना है)।
एंटेंदु

वूप्स, मतलब एक लाइन ब्रेक करना। ऊपर विकल्प # 2 को हडसन / जेनकिंस के साथ स्क्रिप्ट और क्वार्टरबैक किया जा सकता है। यह किस सीमा तक निर्भर करता है कि यह किस प्रकार की साइट है (उपयोगकर्ताओं में 100% लॉग इन किया गया? अधिकतर एनोन?) और आपके आगंतुकों पर अपेक्षित प्रभाव।
एंटेंदु

2

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

आप समय से पहले प्रत्येक सर्वर पर एक "नई" निर्देशिका स्थापित करने और फिर एक ही समय में नई निर्देशिका को इंगित करने के लिए उन पर स्विच कर रहे हैं जैसे मूल अनुकूलन कर सकते हैं (शायद Entendu के जवाब में जैसे सिर्लिंक का उपयोग करके) ताकि आप सभी प्राप्त कर सकें सर्वर 5-10 सेकंड के भीतर नई फ़ाइलों पर स्विच कर दिया।

यह डेटाबेस अद्यतन के मुद्दे को छोड़ देता है। यदि वे उस प्रकार के हैं जो केवल एक सर्वर से किया जाना है, तो आप दूसरों को रखरखाव मोड में रखना चाहते हैं या ऐसा होने पर उनका उपयोग न करने के लिए लोड बैलेंसर को समायोजित कर सकते हैं। बेशक, यदि वे नहीं किए जा सकते हैं जबकि उपयोगकर्ता साइट पर सक्रिय रहते हैं, तो आपको केवल रखरखाव मोड में सब कुछ होना चाहिए, लेकिन सरल अपडेट के लिए यह कुछ ऐसा हो सकता है जिसे आप लगभग 30 सेकंड या उससे कम समय में कर सकते हैं।

यह विभिन्न प्रकार के परिवर्तनों के लिए अलग-अलग परिनियोजन स्क्रिप्ट होने के लायक हो सकता है, इसलिए आप आवश्यक न्यूनतम प्रक्रिया चला सकते हैं, चाहे वह फ़ाइलों की प्रतिलिपि बनाना हो, एक छोटा डेटाबेस अद्यतन चलाना हो, या एक बड़ा डेटाबेस परिवर्तन करना हो।

यदि आप अपनी फ़ाइल और डेटाबेस अपडेट को ऑप्टिमाइज़ कर सकते हैं और देख सकते हैं कि क्या साधारण बदलाव हैं जिनसे आप चीजें विकसित कर सकते हैं, तो यह आपको और करीब ले जा सकता है, लेकिन मुझे नहीं पता कि इसमें से कोई भी आपके लिए नया है :)


0

Aegir साइटों के एक नेटवर्क का प्रबंधन करने में उपयोगी है। मैंने इसे एक ही क्लाइंट के लिए 2000 से अधिक साइटों को तैनात करने और प्रबंधित करने के लिए उपयोग किया।

आपका प्रश्न बताता है कि आप एक वेब साइट को कई वेबहेड्स के साथ प्रबंधित करना चाहते हैं। अगर ऐसा है तो एजेर आपके लिए कम उपयोगी हो सकता है। इसके बजाय मैं आपको एक फ़ाइल सिस्टम का उपयोग करने पर सुझाव दूंगा जो नेटवर्किंग का समर्थन करता है। इतना ही नहीं यह सुनिश्चित करता है कि आपके कोड को सिंक में रखा गया है इसका मतलब है कि आपके अपलोड सभी नोड्स पर उपलब्ध हैं।

ऐतिहासिक रूप से लोगों ने एनएफएस का उपयोग किया है जो एक सर्वर के फाइल सिस्टम को अन्य नोड्स के साथ साझा करने की अनुमति देता है। दुर्भाग्य से यह विफलता का एक बिंदु पेश करता है, क्योंकि यदि NFS सर्वर आपकी साइट को बंद या मर जाता है, तो उसे सेवा नहीं दी जा सकती।

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

आपकी परिनियोजन रणनीति के संदर्भ में आपको अपनी सूची में पहले उपकरण के रूप में ड्रश करना चाहिए । ड्रश के साथ आपको अपनी तैनाती के चरणों को स्वचालित करने में सक्षम होना चाहिए। आपको मिश्रण में जेनकिंस को जोड़ने पर विचार करना चाहिए ताकि आप अपनी तैनाती की नौकरियों को ट्रैक कर सकें और यदि चीजें विफल होती हैं तो पैटर्न की पहचान कर सकें। कैपिस्ट्रानो तैनाती में शामिल चरणों को स्वचालित करने के लिए उपयोगी हो सकता है। यदि आप चीजों को ठीक से करते हैं तो आप इसे बना सकते हैं ताकि आपके उपयोगकर्ता यह भी कभी नहीं जान सकें कि आपने तैनाती की है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.