2012-03-05 35 views
6

प्रत्येक अब और फिर लोचदार लोड बैलेंसर (ईएलबी) अनुपलब्ध होने के लिए मेरे सर्वरों में से एक को निकाल देता है। जो अच्छा है - शायद ही कोई बाधा।ईएल 2 उदाहरण स्वचालित रूप से रीबूट कैसे करें जब ईएलबी कहता है कि यह अनुपलब्ध है?

आमतौर पर, एडब्ल्यूएस कंसोल के माध्यम से इंस्टेंस को रीबूट करने से समस्या ठीक हो जाती है।

मैं अनुपलब्ध होने पर अपना ईसी 2 इंस्टेंस स्वचालित रूप से रीबूट करना चाहता हूं।

ऐसा करने का सबसे अच्छा तरीका क्या है? (यह एक विंडोज़ उदाहरण होता है, लेकिन आदर्श रूप से इससे कोई फर्क नहीं पड़ता)

उत्तर

5

मुझे एक सस्ता ईसी 2 माइक्रो इंस्टेंस मिला और एक साधारण लिपि लिखी जो ईसी 2 पर मेरे सभी सर्वर सूचीबद्ध करती है, और यह सुनिश्चित करने के लिए प्रत्येक पर एक जीईटी करता है कि यह ठीक से काम कर रहा है। यदि कोई सर्वर ठीक से काम नहीं कर रहा है, तो मेरी स्क्रिप्ट इसे रीबूट करती है। मेरे पास हर 10 मिनट में एक बार स्क्रिप्ट चल रही है।

यदि मेरे लिए ऐसा करने के लिए वहां कोई सेवा थी, तो यह थोड़ा आसान हो गया था, लेकिन सिस्टम स्थापित करना आसान था और माइक्रो इंस्टेंस सस्ता है।

+4

क्या होगा यदि आपका माइक्रो इंस्टेंस क्रैश हो जाए? –

+1

जो हुआ है। अभी मुझे एक पिंगडम अलर्ट मिलता है। हालांकि, आदर्श रूप में, मेरे पास उत्पादन सर्वर सूक्ष्म जांच कर रहा है, और सूक्ष्म उत्पादन की जांच करनी चाहिए। आह। – pk1557

+1

इस स्क्रिप्ट को साझा करने के लिए देखभाल? – Mike

3

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

आपके विंडोज़ इंस्टेंस का उपयोग करने के रूप में देखकर आप अपने सर्वर को कॉन्फ़िगर करने के लिए पावरहेल स्क्रिप्ट लिख सकते हैं और सर्वर प्रारंभ होने पर स्क्रिप्ट निष्पादित करने के लिए CloudInit.NET का उपयोग कर सकते हैं। लिपि के अंतिम भाग को लोड बैलेंसर पर चेक सक्षम करना चाहिए।

+0

यह अच्छी जानकारी है, लेकिन विभिन्न कारणों के लिए मैं अभी भी पसंद करेंगे कि एक सरल रिबूट हो एक termination-> नया उदाहरण बनाम,। – pk1557

+1

आप नए ec2-description-instance-status कमांड का उपयोग करने और एक स्क्रिप्ट लिखने का प्रयास कर सकते हैं जो इसके डाउन होने पर इंस्टेंस को रीबूट करेगा। इस स्क्रिप्ट को लोड बैलेंसर में आवृत्ति को वापस जोड़ने की भी आवश्यकता होगी। लिखने के लिए बहुत आसान लिपि।एक बार स्क्रिप्ट पूर्ण हो जाने पर इसे क्रॉन्टाब में डाल दें और यह तब तक काम करेगा जब तक मशीन चल रही है। http://aws.typepad.com/aws/2012/01/ec2-instance-status-checks.html – bwight

6

ऑटोस्कलिंग समूह का उपयोग करें और इसे 1 लाइव इंस्टेंस रखने के लिए सेट करें। यदि आपका उदाहरण दुर्घटनाग्रस्त हो जाता है तो यह पूर्वनिर्धारित उदाहरण छवि से एक नया उत्पन्न करेगा। यह आसान और सुविधाजनक है।

+0

हालांकि यह सच है, अक्सर प्रश्न में उदाहरण को रिबूट करने से समस्या ठीक होती है, और एक नया उदाहरण लॉन्च करने से रीबूटिंग * बहुत तेज है ... –

1

लैम्ब्डा फ़ंक्शन लिखें!

माइक्रो इंस्टॉलेशन चलाने से सस्ता है, और आप इसे जो भी अंतराल चाहते हैं उसे चलाने के लिए सेट कर सकते हैं। आपको क्लाउडवॉच निगरानी भी मिलती है ताकि आपको अपने माइक्रो इंस्टेंस के स्वास्थ्य को अलग-अलग जांचने की चिंता करने की आवश्यकता न हो।

मैं एक लोचदार बीनस्टॉक का उपयोग कर रहा हूं, जो describeInstancesHealth एंडपॉइंट प्रदान करता है। वैकल्पिक रूप से आप ec2 के describeInstanceStatus एंडपॉइंट का उपयोग कर सकते हैं।

फिर यदि आप एक खराब उदाहरण का पता लगाते हैं, तो ec2 के rebootInstances चलिए आप एक या अधिक उदाहरण रीबूट करते हैं।

2

@agmin के साथ सहमत हैं कि एक लैम्ब्डा फ़ंक्शन ऐसा करने का एक शानदार तरीका है। आप एक एसएनएस विषय के माध्यम से लैम्ब्डा फ़ंक्शन को ट्रिगर करने के लिए क्लाउडवॉच अलार्म को कॉन्फ़िगर कर सकते हैं।

मैंने इस कार्यान्वयन को एक साथ रखा और ऐसा लगता है कि यह अच्छी तरह से काम कर रहा है। इसे सेट किया जा सकता है और कमांड लाइन के माध्यम से पूरी तरह से कॉन्फ़िगर किया गया:

https://github.com/jcowley/elb-instance-reboot