इस सवाल के बारे में कुछ दिलचस्प है - विशेष रूप से डाउनटाइम के विचार के संबंध में। विचार का हिस्सा यह है कि यदि कोई एप्लिकेशन डाउनटाइम के लिए संवेदनशील है, तो पुनर्प्राप्ति समय को भी इसमें शामिल किया जाना चाहिए। (एक चरम तर्क के रूप में, किसी भी बैकअप को डाउनटाइम की आवश्यकता नहीं होती है, जब तक कि आपको उन बैकअप की आवश्यकता नहीं होती है, जिस स्थिति में डाउनटाइम अनंतता का दृष्टिकोण कर सकता है। )।
EBS के बारे में थोड़ा सा
ईबीएस वॉल्यूम और स्नैपशॉट एक ब्लॉक स्तर पर काम करते हैं - जिसके परिणामस्वरूप स्नैपशॉट लिया जा सकता है जबकि एक उदाहरण चल रहा है, भले ही ईबीएस वॉल्यूम उपयोग में हो। हालांकि, केवल वह डेटा जो वास्तव में डिस्क पर है (यानी फ़ाइल कैश में नहीं) स्नैपशॉट में शामिल किया जाएगा। यह बाद का कारण है जो लगातार स्नैपशॉट के विचार को जन्म देता है।
- अनुशंसित तरीका वॉल्यूम को अलग करना है, इसे स्नैपशॉट है, और इसे रीटैट करें - आमतौर पर व्यावहारिक नहीं है।
- अगले सबसे अच्छे विकल्प में डिस्क में राइट-कैश फ्लश करना, फ़ाइल सिस्टम को फ्रीज़ करना और आपका स्नैपशॉट लेना शामिल है
यहां एक दिलचस्प बात यह है कि ऊपर दिए गए दोनों मामलों में, आपको स्नैपशॉट के डिस्क पर रीटच / अनफ़्रीज़ और फिर से लिखना शुरू करने के लिए समाप्त होने की प्रतीक्षा करने की आवश्यकता नहीं है - एक बार स्नैपशॉट शुरू होने के बाद आपका डेटा उस बिंदु के अनुरूप होगा। आमतौर पर इसके लिए केवल कुछ सेकंड की आवश्यकता होती है, जिसके दौरान आपकी डिस्क लॉक होती है। चूंकि अधिकांश डेटाबेस डिस्क पर अपनी फ़ाइलों को एक उचित तरीके से संरचना करते हैं - एक अच्छा मौका है कि आवेषण का मौजूदा ब्लॉकों पर न्यूनतम प्रभाव पड़ता है - जो स्नैपशॉट में जोड़े गए डेटा को कम करता है।
बैकअप के बिंदु पर विचार करें
ईबीएस वॉल्यूम पहले से ही एक उपलब्धता क्षेत्र के भीतर दोहराए जाते हैं - इसलिए इसमें अतिरेक की एक डिग्री है। यदि आपका उदाहरण समाप्त हो जाता है, तो आप बस ईबीएस वॉल्यूम को एक नए उदाहरण में संलग्न कर सकते हैं और (आपके द्वारा संगतता की कमी के बाद) फिर से शुरू करें जहां आप दूर छोड़ दिया। कई मामलों में यह ईबीएस वॉल्यूम को असंगत स्नैपशॉट की तरह बनाता है, बशर्ते कि आप इसे एक्सेस कर सकें। उस ने कहा, अधिकांश EC2 उपयोगकर्ताओं को शायद 2011 की शुरुआत से ईबीएस संस्करणों के कैस्केडिंग विफलताओं को याद करते हैं - कई दिनों के लिए वॉल्यूम अप्राप्य थे, और कुछ उपयोगकर्ताओं ने डेटा भी खो दिया था।
RAID1
यदि आप ईबीएस डिस्क की विफलता के खिलाफ सुरक्षा करने की कोशिश कर रहे हैं (ऐसा होता है), तो आप एक RAID1 सेटअप पर विचार कर सकते हैं। चूंकि ईबीएस वॉल्यूम ब्लॉक डिवाइस हैं, आप अपने इच्छित कॉन्फ़िगरेशन में उन्हें सेट करने के लिए आसानी से mdadm का उपयोग कर सकते हैं। यदि आपका कोई ईबीएस वॉल्यूम अनुमान नहीं लगा रहा है, तो इसे मैन्युअल रूप से विफल करना आसान है (और बाद में इसे अन्य ईबीएस वॉल्यूम से बदल दें)। बेशक, इसमें गिरावट है - हर लेखन के लिए समय बढ़ा, चर प्रदर्शन के लिए अधिक संवेदनशीलता, I / O लागत (monetariliy, प्रदर्शन-वार नहीं) दोगुना, अधिक व्यापक AWS विफलता के खिलाफ कोई वास्तविक सुरक्षा नहीं थी (पिछले साल एक आम समस्या थी) ईबीएस वॉल्यूम को बंद करने की अक्षमता जो एक बंद स्थिति में थी), और निश्चित रूप से, विफलता पर डिस्क की असंगत स्थिति।
S3FS
कुछ अनुप्रयोगों के लिए एक विकल्प (निश्चित रूप से नहीं डेटाबेस के लिए) एक स्थानीय फाइल सिस्टम के रूप में S3 माउंट करने के लिए है (उदाहरण के माध्यम से s3fs)। यह धीमा है, कुछ ऐसी विशेषताओं का अभाव है जो एक फ़ाइल सिस्टम से अपेक्षा करेंगे, और उम्मीद के मुताबिक व्यवहार नहीं कर सकते हैं (अंतिम स्थिरता)। कहा कि, एक साधारण उद्देश्य के लिए जैसे कि अपलोड की गई फ़ाइलों को इंस्टेंस पर उपलब्ध कराना, इसमें योग्यता हो सकती है। जाहिर है कि यह किसी ऐसी चीज के लिए नहीं है जिसके लिए अच्छे पढ़ने / लिखने के प्रदर्शन की आवश्यकता हो।
MySQL बिन-लॉग
MySQL के लिए विशिष्ट एक और विकल्प बिन-लॉग का उपयोग हो सकता है। आप एक दूसरा ईबीएस वॉल्यूम सेट कर सकते हैं जो आपके बिन-लॉग को स्टोर करेगा (आपके डेटाबेस पर जोड़े गए लेखन के प्रभाव को कम करने के लिए), और जो भी डेटाबेस डंप लेता है, उसके साथ इसका उपयोग करें। आप s3fs के साथ भी ऐसा करने में सक्षम हो सकते हैं, जो वास्तव में योग्यता हो सकती है यदि प्रदर्शन सहनीय है (rsync संभवतः बेहतर होगा हालांकि सीधे s3fs का उपयोग करने की कोशिश कर रहा है, और आप निश्चित रूप से जो आप कर सकते हैं उसे संपीड़ित करना चाहेंगे)।
एक बार फिर, हालांकि, हम उद्देश्य के विचार पर वापस आते हैं। उपरोक्त सुझावों के साथ क्या होगा इस पर विचार करें:
- ईबीएस वॉल्यूम अप्राप्य:
- RAID1 - बेकार है, क्योंकि आप डेटा को प्राप्त नहीं कर सकता
- बिन-लॉग - बेकार, जब तक आप इसे S3 को निर्यात नहीं करते - शायद एक देरी हालांकि अगर आपने ऐसा किया
- उदाहरण अप्रत्याशित रूप से समाप्त होता है:
- RAID1 - आपके डिस्क उपलब्ध हैं, लेकिन सुसंगत नहीं हैं, आपका डेटाबेस अपने आप असंगतता से उबर सकता है
- बिन-लॉग - आपका डेटा सुलभ होना चाहिए, हालांकि आपको पिछली कुछ घटनाओं की समीक्षा करने की आवश्यकता हो सकती है
- कोई व्यक्ति रूट के रूप में DROP DATABASE चलाता है:
- RAID1 - आपके पास एक गैर-मौजूद डेटाबेस की दो सही प्रतियां हैं
- बिन-लॉग - आपको कमांड से ठीक पहले की घटनाओं को फिर से खेलना चाहिए, इसलिए आपको ठीक होना चाहिए
तो वास्तव में, RAID1 ज्यादातर बेकार है, और बिन-लॉग बहुत लंबा है - दोनों में कुछ परिस्थितियों में योग्यता हो सकती है, लेकिन विचार बैकअप से बहुत दूर हैं।
स्नैपशॉट्स
यह ध्यान रखना महत्वपूर्ण है कि स्नैपशॉट अंतर हैं, और केवल उन वास्तविक ब्लॉकों को संग्रहीत करते हैं जिनमें डेटा होता है (और संकुचित होते हैं)। एक ईबीएस वॉल्यूम के विपरीत, जहां यदि आपके पास 20 जीबी की मात्रा है, लेकिन केवल 1 जीबी का उपयोग करते हैं, तो भी आपसे 'प्रावधानित' संग्रहण (20 जीबी) के लिए शुल्क लिया जाता है। एक स्नैपशॉट के साथ, आप केवल आपके द्वारा उपयोग किए जाने वाले शुल्क लिए जाते हैं। यदि स्नैपशॉट के बीच कोई डेटा नहीं बदलता है, तो (सैद्धांतिक रूप से) कोई शुल्क नहीं है। (स्नैपशॉट PUTS / GETS और उपयोग किए गए भंडारण के लिए शुल्क लिया जाता है)।
एक तरफ के रूप में, मैं आपके एप्लिकेशन डेटा (डेटाबेस सहित) को आपके रूट वॉल्यूम (जो आपके पास पहले से सेटअप हो सकता है) पर संग्रहीत नहीं किया जाएगा। एक लाभ यह है कि, उम्मीद है, आपकी रूट वॉल्यूम में न्यूनतम परिवर्तन दिखाई देता है - जिसका अर्थ है कि इसका स्नैपशॉट लगातार कम हो सकता है (या कम से कम परिवर्तन होगा) लागत और उपयोग में आसानी को कम करता है।
यह उल्लेख करना भी प्रासंगिक है कि आप किसी भी समय पुराने स्नैपशॉट को हटा सकते हैं - भले ही वे अंतर हों लेकिन वे दूसरे स्नैपशॉट को प्रभावित नहीं करेंगे। उस ने कहा, एक स्नैपशॉट के लिए आवंटित प्रत्येक ब्लॉक को तब तक त्याग नहीं किया जाएगा जब तक कि कोई स्नैपशॉट नहीं है जो अभी भी उस ब्लॉक को संदर्भित करता है।
समय-समय पर डंप के साथ समस्या सबसे पहले डंप के बीच का समय होता है (संभवतः MySQL के बिन-लॉग का उपयोग करके संबोधित किया जाता है) और वसूली की कठिनाई भी। एक बड़े डंप को आयात करने और बिन-लॉग से सभी घटनाओं को फिर से करने में समय लगता है। इसके अलावा, एक डंप बनाना इसके प्रदर्शन निहितार्थ के बिना नहीं है। संभवतः, ऐसे डंप की संभावना स्नैपशॉट की तुलना में कहीं अधिक भंडारण की आवश्यकता होती है। केवल डेटाबेस और स्नैपशॉट के लिए एक ईबीएस वॉल्यूम सेट करना जो कि ज्यादातर मामलों में बेहतर होगा (यह कहा कि, स्नैपशॉट लेने से प्रदर्शन का थोड़ा सा भी प्रभाव होता है)।
स्नैपशॉट और ईबीएस वॉल्यूम की सुंदरता यह है कि उनका उपयोग अन्य उदाहरणों पर किया जा सकता है। यदि आपका उदाहरण बूट करने में विफल रहता है, तो आप समस्या का निदान करने और उसे ठीक करने के लिए रूट वॉल्यूम को किसी अन्य उदाहरण के साथ संलग्न कर सकते हैं - या बस इसे अपने डेटा को कॉपी करने के लिए - और रूट वॉल्यूम को केवल कुछ मिनट डाउनटाइम के साथ स्विच कर सकते हैं (उदाहरण रोकें, अलग करें) रूट वॉल्यूम, एक नया रूट वॉल्यूम संलग्न करें, उदाहरण शुरू करें)। यही विचार आपके डेटा को एक दूसरे ईबीएस वॉल्यूम पर लागू होता है। अनिवार्य रूप से, आप अपने कस्टम एएमआई से एक नया उदाहरण लेते हैं, और अपनी वर्तमान ईबीएस मात्रा को इसमें संलग्न करते हैं - यह डाउनटाइम को कम करने में मदद करता है।
(एक तर्क कर सकता है (और मैं शायद इसकी सिफारिश नहीं करूंगा) कि आप एक ही सर्वर (मास्टर-स्लेव) पर दो ईबीएस संस्करणों का उपयोग करके MySQL की दो प्रतियों को सेटअप कर सकते हैं, और फिर अपने स्नैपशॉट को उसका स्नैपशॉट लेने के लिए बंद कर सकते हैं ईबीएस वॉल्यूम - यह बिना किसी डाउनटाइम के संगत होगा, लेकिन प्रदर्शन लागत संभवतः इसके लायक नहीं है)।
AWS में ऑटोस्कोलिंग है - जो निरंतर संख्या को बनाए रखने में सक्षम होगा (भले ही वह संख्या 1 है) - आप एक स्नैपशॉट से तैनात करेंगे - लेकिन यदि आपका स्नैपशॉट उपयोगी नहीं है, तो आधार का अधिक उपयोग नहीं होता है ।
एक और जोड़ी - आप एक स्नैपशॉट (एक ईबीएस मात्रा के विपरीत, जो केवल किसी भी समय में एक ही उदाहरण के लिए संलग्न किया जा सकता है) से जितने चाहें उतने उदाहरणों को तैनात कर सकते हैं। इसके अलावा, ईबीएस वॉल्यूम एक उपलब्धता क्षेत्र के भीतर उपयोग करने के लिए प्रतिबंधित है, जबकि स्नैपशॉट का उपयोग किसी क्षेत्र के भीतर किया जा सकता है।
आदर्श रूप से, स्नैपशॉट के साथ, यदि आपका सर्वर नीचे चला जाता है, तो आप अंतिम स्नैपशॉट का उपयोग करके एक नया लॉन्च कर सकते हैं - खासकर यदि आप अपने डेटा से अपने रूट वॉल्यूम को अलग करते हैं, तो एक खराब अपडेट के परिणामस्वरूप कम से कम डाउनटाइम (जब आप बस चाहते हैं) ईबीएस वॉल्यूम को अपने डेटा में ट्रांसफर करें - और जो कुछ भी असंगत होने के कारण दूषित हो सकता है उसे संरक्षित करने के लिए इसका स्नैपशॉट लें)।
एक साइड नोट के रूप में, अमेज़ॅन ने कहा कि अंतिम स्नैपशॉट के बाद से उन पर बदले गए डेटा की मात्रा के साथ ईबीएस वॉल्यूम की विफलता दर बढ़ जाती है।
अंतिम सिफारिशें
- स्नैपशॉट का उपयोग करें - वे महान हैं - वे डाउनटाइम को बहुत कम करते हैं क्योंकि वे इसका कारण बनते हैं
- अलग-अलग डेटा और रूट वॉल्यूम, शायद डेटाबेस को अपने वॉल्यूम पर भी डाल रहे हैं, और यदि आवश्यक हो तो अपडेट से पहले स्नैपशॉट
- संभव के रूप में 'गर्म' रहने के लिए बिन-लॉग का उपयोग करें - इसे (संपीड़ित) S3 पर अपलोड करें
- सुनिश्चित करें कि आप वास्तव में उदाहरण से डेटा प्राप्त करते हैं (भले ही डेटा ईबीएस वॉल्यूम पर बरकरार है, वॉल्यूम स्वयं अस्थायी रूप से अप्राप्य हो सकता है)।
अनुशंसित पाठ:
(मुझे विश्वास है कि मैंने बहुत अधिक लिखा है, लेकिन पर्याप्त नहीं कहा है - लेकिन उम्मीद है कि आपको पढ़ने लायक कुछ मिल जाएगा)।