amazon web services - एडब्ल्यूएस एस 3 बाल्टी के लिए बैकअप रणनीतियां




amazon-web-services amazon-s3 (4)

मूल रूप से मेरे ब्लॉग पर पोस्ट किया गया: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/

समय-समय पर अपने एस 3 बाल्टी को ईसी 2 सर्वर में सिंक करें

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

s3cmd
सबसे पहले, s3cmd बेहद आशाजनक लग रहा था। हालांकि, मेरी विशाल एस 3 बाल्टी पर कोशिश करने के बाद - यह Segmentation fault करने में विफल रहा। हालांकि, यह छोटी बाल्टी पर ठीक काम करता था। चूंकि यह भारी बाल्टी के लिए काम नहीं करता है, इसलिए मैंने एक विकल्प खोजने के लिए तैयार किया।

s4cmd
s3cmd लिए नए, बहु थ्रेडेड विकल्प। हालांकि, और भी आशाजनक लग रहा था, हालांकि, मैंने देखा कि यह उन फाइलों को फिर से डाउनलोड करना जारी रखता है जो स्थानीय फाइल सिस्टम पर पहले से मौजूद थे। यह सिंक कमांड से अपेक्षित व्यवहार नहीं है। यह जांचना चाहिए कि दूरस्थ फ़ाइल पहले से मौजूद है या नहीं (हैश / फाइलसाइज जांच साफ हो जाएगी) और उसी लक्ष्य निर्देशिका पर चलने वाले अगले सिंक में इसे छोड़ दें। मैंने इस अजीब व्यवहार की रिपोर्ट करने के लिए एक मुद्दा ( bloomreach/s4cmd/#46 ) खोला। इस बीच, मैं एक और विकल्प खोजने के लिए तैयार किया।

awscli
और फिर मुझे awscli मिला। यह अमेज़ॅन के आधिकारिक कमांड लाइन इंटरफ़ेस है जो विभिन्न क्लाउड सेवाओं के साथ बातचीत करने के लिए है, एस 3 शामिल है।

यह एक उपयोगी सिंक कमांड प्रदान करता है जो आपके स्थानीय फाइल सिस्टम में दूरस्थ बाल्टी फ़ाइलों को तेज़ी से और आसानी से डाउनलोड करता है

$ aws s3 sync s3://your-bucket-name /home/ubuntu/s3/your-bucket-name/

लाभ:

  • स्केलेबल - विशाल एस 3 बाल्टी का समर्थन करता है
  • बहु थ्रेडेड - एकाधिक धागे का उपयोग करके फ़ाइलों को तेज़ी से सिंक करता है
  • स्मार्ट - केवल नई या अद्यतन फ़ाइलों को सिंक करता है
  • तेज़ - इसकी बहु-थ्रेडेड प्रकृति और स्मार्ट सिंक एल्गोरिदम के लिए धन्यवाद

दुर्घटनाग्रस्त हटाना

सुविधाजनक रूप से, sync कमांड गंतव्य फ़ोल्डर (स्थानीय फाइल सिस्टम) में फ़ाइलों को हटा नहीं देगा अगर वे स्रोत (एस 3 बाल्टी) से गायब हैं, और इसके विपरीत। यह S3 का बैक अप लेने के लिए बिल्कुल सही है - यदि बाल्टी से फ़ाइलों को हटा दिया जाता है, तो इसे फिर से समन्वयित करने से उन्हें स्थानीय रूप से हटाया नहीं जाएगा। और यदि आप स्थानीय फ़ाइल को हटाते हैं, तो इसे स्रोत बाल्टी से हटाया नहीं जाएगा।

उबंटू 14.04 एलटीएस पर awscli सेट अप

चलो awscli स्थापित करके शुरू करते हैं। ऐसा करने के कई तरीके हैं, हालांकि, मुझे apt-get माध्यम से इसे इंस्टॉल करना सबसे आसान apt-get

$ sudo apt-get install awscli

विन्यास

इसके बाद, हमें उपयोगकर्ता को बनाकर और AmazonS3ReadOnlyAccess नीति को संलग्न करके, हमारे एक्सेस कुंजी आईडी और गुप्त कुंजी के साथ awscli को कॉन्फ़िगर करने की आवश्यकता है, जिसे आपको IAM से प्राप्त करना होगा। इससे आपको या किसी भी व्यक्ति को आपकी एस 3 फाइलों को हटाने से इन प्रमाण-पत्रों तक पहुंच प्राप्त हो जाएगी। अपने एस 3 क्षेत्र, जैसे कि us-east-1 दर्ज करना सुनिश्चित करें।

$ aws configure

तैयारी

आइए स्थानीय एस 3 बैकअप निर्देशिका तैयार करें, अधिमानतः /home/ubuntu/s3/{BUCKET_NAME} । अपने वास्तविक बाल्टी नाम के साथ {BUCKET_NAME} को प्रतिस्थापित करना सुनिश्चित करें।

$ mkdir -p /home/ubuntu/s3/{BUCKET_NAME}

प्रारंभिक सिंक

आइए आगे बढ़ें और बाल्टी को निम्न आदेश के साथ पहली बार सिंक करें:

$ aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

बाल्टी मानते हुए, एडब्ल्यूएस क्रेडेंशियल्स और क्षेत्र सही हैं, और गंतव्य फ़ोल्डर मान्य है, awscli स्थानीय फाइल सिस्टम में पूरी बाल्टी डाउनलोड करना शुरू कर देगा।

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

एक क्रॉन नौकरी की स्थापना

आगे बढ़ें और /home/ubuntu/s3 में sync.sh फ़ाइल बनाएं:

$ nano /home/ubuntu/s3/sync.sh

निम्न कोड को sync.sh में कॉपी और पेस्ट करें:

#!/bin/sh

# Echo the current date and time

echo '-----------------------------'
date
echo '-----------------------------'
echo ''

# Echo script initialization
echo 'Syncing remote S3 bucket...'

# Actually run the sync command (replace {BUCKET_NAME} with your S3 bucket name)
/usr/bin/aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/

# Echo script completion
echo 'Sync complete'

{SUCKET_NAME} को अपने S3 बाल्टी नाम के साथ, स्क्रिप्ट में दो बार प्रतिस्थापित करना सुनिश्चित करें।

प्रो टिप: आपको aws बाइनरी से लिंक करने के लिए /usr/bin/aws का उपयोग करना चाहिए, क्योंकि crontab सीमित शेल वातावरण में कमांड निष्पादित करता है और निष्पादन योग्य को अपने आप नहीं ढूंढ पाएगा।

इसके बाद, स्क्रिप्ट को chmod करना सुनिश्चित करें ताकि इसे crontab द्वारा निष्पादित किया जा सके।

$ sudo chmod +x /home/ubuntu/s3/sync.sh

आइए यह सुनिश्चित करने के लिए स्क्रिप्ट को चलाने का प्रयास करें कि यह वास्तव में काम करता है:

$ /home/ubuntu/s3/sync.sh

आउटपुट इस तरह होना चाहिए:

इसके बाद, निम्न आदेश निष्पादित करके वर्तमान उपयोगकर्ता के crontab को संपादित करें:

$ crontab -e

यदि यह पहली बार crontab -e निष्पादित करने वाला है, तो आपको एक पसंदीदा संपादक चुनना होगा। मैं nano चयन करने की सिफारिश करता हूं क्योंकि शुरुआती लोगों के साथ काम करना सबसे आसान है।

आवृत्ति सिंक करें

हमें crontab को यह बताने की ज़रूरत है कि कितनी बार हमारी स्क्रिप्ट को चलाने के लिए और जहां स्क्रिप्ट स्थानीय फाइल सिस्टम पर कमांड लिखकर रहता है। इस आदेश के लिए प्रारूप निम्नानुसार है:

m h  dom mon dow   command

निम्न आदेश crontab को हर घंटे sync.sh स्क्रिप्ट चलाने के लिए कॉन्फ़िगर करता है (मिनट: 0 और घंटे: * पैरामीटर के माध्यम से निर्दिष्ट) और इसे स्क्रिप्ट के आउटपुट को हमारी s3 निर्देशिका में sync.log फ़ाइल में पाइप करने के लिए:

0 * * * * /home/ubuntu/s3/sync.sh > /home/ubuntu/s3/sync.log

आपको इस लाइन को crontab फ़ाइल के नीचे जोड़ना चाहिए जिसे आप संपादित कर रहे हैं। फिर, आगे बढ़ें और Ctrl + W दबाकर फ़ाइल को डिस्क पर सहेजें और फिर एंटर करें । फिर आप Ctrl + X दबाकर nano से बाहर निकल सकते हैं। crontab अब हर घंटे सिंक कार्य चलाएगा।

प्रो टिप: आप यह सत्यापित कर सकते हैं कि /home/ubuntu/s3/sync.log निरीक्षण करके घंटे की क्रॉन नौकरी सफलतापूर्वक निष्पादित की जा रही है, निष्पादन दिनांक और समय के लिए इसकी सामग्री जांच रही है, और यह देखने के लिए लॉग की जांच कर रही है कि कौन सी नई फाइलें सिंक की गई हैं ।

सब तैयार! आपकी एस 3 बाल्टी अब आपके ईसी 2 सर्वर को स्वचालित रूप से हर घंटे सिंक हो जाएगी, और आपको जाने के लिए अच्छा होना चाहिए। ध्यान दें कि समय के साथ, आपकी एस 3 बाल्टी बड़ी हो जाती है, इसलिए आपको नई फाइलों को समायोजित करने के लिए अपने ईसी 2 सर्वर के ईबीएस वॉल्यूम आकार को बढ़ाना पड़ सकता है। आप इस गाइड का पालन ​​करके हमेशा अपने ईबीएस वॉल्यूम आकार को बढ़ा सकते हैं

मैं एस 3 बाल्टी का बैक अप लेने के लिए कुछ सलाह या सर्वोत्तम अभ्यास की तलाश में हूं।
एस 3 से डेटा का बैक अप लेने का उद्देश्य निम्न कारणों से डेटा हानि को रोकने के लिए है:

  1. एस 3 मुद्दा
  2. मुद्दा जहां मैं गलती से एस 3 से इस डेटा को हटा देता हूं

कुछ जांच के बाद मैं निम्नलिखित विकल्पों को देखता हूं:

  1. वर्जनिंग का उपयोग करें http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html
  2. एडब्ल्यूएस एसडीके का उपयोग कर एक एस 3 बाल्टी से दूसरे में कॉपी करें
  3. अमेज़ॅन ग्लेशियर के लिए बैकअप http://aws.amazon.com/en/glacier/
  4. उत्पादन सर्वर पर बैकअप, जिसका बैक अप लिया गया है

मुझे कौन सा विकल्प चुनना चाहिए और केवल एस 3 पर डेटा स्टोर करना कितना सुरक्षित होगा? अपनी राय सुनना चाहते हैं।
कुछ उपयोगी लिंक:


S3 बाल्टी पर आसानी से उपलब्ध क्रॉस क्षेत्र प्रतिकृति सुविधा का उपयोग करने के बारे में कैसे? सुविधा के बारे में कुछ उपयोगी लेख यहां दिए गए हैं


आपको लगता है कि अब एक diff क्षेत्र पर कुछ प्रकार के incremental बैकअप पकड़ने के लिए एक आसान तरीका होगा।

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

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


संबंधित लिंक को ध्यान में रखते हुए, जो बताता है कि एस 3 में 99.9 99 99 99 99% स्थायित्व है, मैं आपकी चिंता # 1 को त्याग दूंगा। गंभीरता से।

अब, यदि # 2 एक वैध उपयोग केस है और आपके लिए एक वास्तविक चिंता है, तो मैं निश्चित रूप से विकल्प # 1 या # 3 के साथ रहूंगा। इनमें से कौन सा? यह वास्तव में कुछ सवालों पर निर्भर करता है:

  • क्या आपको किसी अन्य संस्करण की विशेषताओं की आवश्यकता है या क्या यह केवल आकस्मिक ओवरराइट / हटाए जाने से बचने के लिए है?
  • संस्करण द्वारा सस्ती अतिरिक्त लागत लगाया गया है?
  • Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable. क्या यह तुम्हारे लिए ठीक है?

जब तक आपका स्टोरेज उपयोग वास्तव में बड़ा न हो, मैं बाल्टी संस्करण के साथ चिपके रहूंगा। इस तरह, आपको ग्लेशियर, अन्य बाल्टी, या यहां तक ​​कि किसी भी अन्य सर्वर पर बैकअप डेटा के लिए कोई अतिरिक्त कोड / वर्कफ़्लो की आवश्यकता नहीं होगी (जो वास्तव में एक खराब विकल्प IMHO है, कृपया इसके बारे में भूल जाएं)।





amazon-glacier