क्लाउड बैकअप के बारे में: Rackspace CloudFiles का उपयोग करना


एक बार बर्फीले सर्दियों के मौसम में, वे एक टांका लगाने वाले लोहे के साथ हमेशा की तरह मेरे पास आए।

टास्क: हमारे पास रेकस्पेस में एक सर्वर है, पूरी भराई पर । एक नीयन सर्वर पर, डेटाबेस MS SQL वेब संस्करण पर घूम रहा है। और फिर लोगों को अचानक एहसास हुआ - और रात का बैकअप कहां रखा जाए? और फिर उसने सभी उचित सीमाओं को पार करना शुरू कर दिया, और इसे उसी उदाहरण की डिस्क पर संग्रहीत करने के लाभ - थोड़ा।

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



मुझे बहुत आश्चर्य हुआ और उसने पूछा - मेरे घुटने पर एक पटकथा को गढ़ना इतना कठिन क्यों है? और डेटाबेस डंप होने के बाद इसे सही से चलाएं?

उन्होंने मृत राष्ट्रपतियों की हरी छवियों का उपयोग करते हुए मुझे फिर से लोकप्रिय रूप से समझाया, कि उनके पास एक सम्मानित कार्यालय था, वे 200 साल पुराने थे, और स्क्रिप्ट ऐसा करने के लिए शाही नहीं थे। और जब से मेरे पास बहुत सी चीजें हैं जो बहुत गंभीर कारणों से उनके साथ हैं, तो मुझे मदद करनी थी।

आप कभी नहीं जानते, अचानक कोई और उपयोगी होगा, इसलिए मैं आपको इन लिपियों के बारे में अधिक बताऊंगा।

ट्रेनिंग




मैनुअल का अध्ययन हमें बताता है कि क्लाउड के साथ काम करने के लिए, बस कर्ल स्थापित करें। हालाँकि, हम उन पर विश्वास नहीं करते हैं और वे सभी MSYS डालेंगे जो MinGW के साथ आते हैं।

और लॉगिन फाइल भरें:

<?xml version="1.0" encoding="UTF-8"?> <credentials xmlns="http://docs.rackspacecloud.com/auth/api/v1.1" username="LOGIN" key="RS API KEY"/> 


हम टोकन प्राप्त करने के लिए इस फाइल को रेक्सस्पेस को फीड करेंगे। इस तरह के टोकन के बिना हम आगे नहीं जाएंगे।

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

 @echo off setlocal set PATH="%PATH%;C:\MinGW\msys\1.0\bin ... endlocal 

इसलिए, मैं उसे एक बार लाऊंगा।

लॉग इन



एक टोकन जो 24 घंटे के लिए वैध है, हम इस तरह से प्राप्त करेंगे:

 curl -k -X POST -d @mylogin.xml -H "Content-Type: application/xml" -H "Accept: application/xml" https://auth.api.rackspacecloud.com/v1.1/auth > auth-token.xml cat auth-token.xml | sed -e 's/.*token id=.//' | sed -e 's/..expires=.*//g' > token 


शैलियों का एक गंभीर मिश्रण - लेकिन हमारे पास पहली स्क्रिप्ट है, यह login.bat है। और - अपने काम के परिणामस्वरूप टोकन। हम भविष्य में इस तरह से टोकन का उपयोग कर सकते हैं

 set /p TOKEN=<token 


बैकअप के लिए एक कंटेनर बनाएँ



अब हमें यह तय करने की जरूरत है कि हम बैकअप कहां और कैसे स्टोर करेंगे। योजनाएं अलग और काफी विस्तृत हो सकती हैं, लेकिन हम सबसे सरल मामला लेंगे। एक पल के लिए कल्पना करें कि हमारे पास एक साधारण अंतर बैकअप है, और हमें केवल एक दिन में एक बार इसे एक विशिष्ट स्थान पर अपलोड करना है।

 set /p TOKEN=<token curl -k -X PUT -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup 

और हमने इस जगह को परिभाषित किया है, कंटेनर को बैकअप कहा जाता है। उनके नाम चखने के लिए हैं।

भरें - पहला प्रयास




अब कुछ भरने की कोशिश करें:

 set /p TOKEN=<token curl -# -k -X PUT -T %1 -H "Content-Type: application/octet-stream" -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 

और वहां क्या झूठ है?



एक पल के लिए जाने दो, और जैसा कि हम देखेंगे - वहाँ क्या है?

 set /p TOKEN=<token curl -# -k -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 


शुरू करने के बाद, हम कंटेनर में क्या है, इसकी एक सूची देखेंगे, उदाहरण के लिए

 4.0.327-RC1.rar 5.0.709-RELENG-spfix.rar 5.5.907-spfix.rar foo.bak 

अंतिम चरण में वे जो भरने में कामयाब रहे वह तर्कसंगत है।

वापस डाउनलोड करें



यह आम तौर पर स्पष्ट है - सिर्फ एक टोकन के साथ एक यूआरएल।

 set /p TOKEN=<token curl -# -o %1 -k -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 

हम पैरामीटर के साथ फ़ाइल नाम पास करते हैं - यह काम करता है!

और अब - कुबड़ा!



यदि यह एकमात्र चीज होती, तो मैं एक पोस्ट नहीं लिखता।

हम इसे उत्पादन में लागू करते हैं, अर्थात्, स्क्रिप्ट को सर्वर पर कॉपी करते हैं, और ... बैंग! पोस्ट अनुरोध का आकार पार हो गया। यह तर्कसंगत है - परीक्षणों के लिए, हमने छोटी फाइलें अपलोड कीं, और डेटाबेस डंप 50 गीगाबाइट से अधिक है।

बड़ी फाइलें भरना - नंबर दो का प्रयास



इसका मतलब यह है कि हम पूरे डेटाबेस डंप नहीं भर सकते हैं?

हाँ और नहीं।

हम इसे एक अनुरोध के साथ नहीं भर सकते, यह एक सच्चाई है। लेकिन हम 50+ गीगाबाइट सर्वर में एक फाइल प्राप्त कर सकते हैं। आप भागों में भर सकते हैं, और फिर इन भागों को एक फ़ाइल में जोड़ सकते हैं।

इसके लिए, मैं पूरे टुकड़े को दूंगा, और फिर हम इसे और अधिक विस्तार से विश्लेषण करेंगे।

छिपा हुआ पाठ
 set /p TOKEN=<token split -d --bytes=500m %1 %1.parts. ls %1.parts.* | awk 'BEGIN{x=0; print "@echo off"; }{ ++x; print "echo Uploading part " x "...\ncurl -# -k -X PUT -T " $1 " -H \"Content-Type: application/octet-stream\" -H \"X-Auth-Token: TOKEN\" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/FNN/" x " --data-binary \'" x "\'" }' | sed -es/FNN/%1/g | sed -es/TOKEN/%TOKEN%/g > _1.bat echo curl -# -k -X PUT -H "X-Auth-Token: TOKEN" -H "X-Object-Manifest: Backup/%1/" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 --data-binary '' | sed -es/TOKEN/%TOKEN%/g >> _1.bat call _1.bat echo Clearing... rm -f _1.bat %1.parts.* 



तो, पहले हमें एक बड़ी फ़ाइल को टुकड़ों में काटने की आवश्यकता है:

 split -d --bytes=500m %1 %1.parts. 


उसके बाद, हम एक कठिन रूप में कोड-निर्माण से निपटेंगे, अर्थात्, हम अपनी स्क्रिप्ट से दूसरी स्क्रिप्ट बनाएंगे, जो सभी काम करेगी।


 ls %1.parts.* | awk 'BEGIN{x=0; print "@echo off"; }{ ++x; print "echo Uploading part " x "...\ncurl -# -k -X PUT -T " $1 " -H \"Content-Type: application/octet-stream\" -H \"X-Auth-Token: TOKEN\" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/FNN/" x " --data-binary \'" x "\'" }' | sed -es/FNN/%1/g | sed -es/TOKEN/%TOKEN%/g > _1.bat 


एक साधारण ट्रिक ls% 1.parts। * awk हम हर टुकड़े के लिए अपनी टीम प्राप्त करेंगे। इस तरह

छिपा हुआ पाठ
 curl -# -k -X PUT -T foo.parts.0 -H "Content-Type: application/octet-stream" -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/foo.0 --data-binary 0 curl -# -k -X PUT -T foo.parts.1 -H "Content-Type: application/octet-stream" -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/foo.1 --data-binary 1 curl -# -k -X PUT -T foo.parts.2 -H "Content-Type: application/octet-stream" -H "X-Auth-Token: %TOKEN%" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/foo.2 --data-binary 2 ... 


जहां foo फ़ाइल का नाम कॉम स्ट्रिंग में हमारे पास है।

एक अंतिम स्पर्श था - यह सब एक साथ रहना:

 echo curl -# -k -X PUT -H "X-Auth-Token: TOKEN" -H "X-Object-Manifest: Backup/%1/" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 --data-binary '' | sed -es/TOKEN/%TOKEN%/g >> _1.bat 

हमें नए सिरे से निर्मित बैच फ़ाइल में क्या मिलेगा यह अंतिम पंक्ति है:
 curl -# -k -X PUT -H "X-Auth-Token: %TOKEN%" -H "X-Object-Manifest: Backup/foo/" https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_d3125ab9-8601-45ba-a432-edf3728673bb/Backup/%1 --data-binary 

लाभ! हमने बड़ी फ़ाइलों को क्लाउड पर अपलोड करना और उन्हें वहां से हटाना सीखा।

मुझे उम्मीद है कि हिंदू कोड का यह सूत्र किसी के लिए उपयोगी है।

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


All Articles