प्रस्तावना
कितने वर्तमान बर्मन उपयोगकर्ताओं ने क्लाउड में दूरस्थ गंतव्य में बैकअप सहेजने के बारे में सोचा है? कितने लोगों ने उस बैकअप को सीधे PostgreSQL सर्वर से लेने के बारे में सोचा है?
खैर, चूंकि बर्मन 2.10 यह अब संभव है!
कैसे?
आइए इसे निम्नलिखित लेखों में एक साथ देखें।
आवश्यकताएं
निम्नलिखित दो लेख नए barman-cloud-wal-archive के व्यावहारिक परिचय के लिए हैं और barman-cloud-backup barman-cli . में जोड़े गए टूल पैकेज.
पहले भाग में barman-cloud-wal-archive शामिल होगा कमांड जबकि दूसरा barman-cloud-backup को कवर करेगा कमांड।
पाठकों को PostgreSQL WAL संग्रह और बैकअप विधियों, और बर्मन के बुनियादी ज्ञान की आवश्यकता है। यह भी अनुशंसा की जाती है कि आप Amazon S3 जैसे संग्रहण समाधानों के लिए क्लाउड तकनीकों से अवगत हों।
वाल संग्रह
बर्मन ने कई वर्षों तक रिमोट वाल संग्रह के रूप में काम किया है, और बर्मन सीएलआई पैकेज को पोस्टग्रेएसक्यूएल पक्ष पर संग्रह विश्वसनीयता और मजबूती का विस्तार करने के लिए डिज़ाइन किया गया है। वास्तव में barman-cli barman-wal-restore . जैसी स्क्रिप्ट प्रदान करता है एक स्टैंडबाय नोड को restore_command के माध्यम से बर्मन संग्रह से WAL फ़ाइलों को स्मार्ट तरीके से और सुरक्षा को पुनर्स्थापित करने की अनुमति देना postgresql.auto.conf में पैरामीटर फ़ाइल (या recovery.conf PostgreSQL 12 तक फ़ाइल), और barman-wal-archive मास्टर नोड से WAL फ़ाइलों को archive_command . के माध्यम से बर्मन में संग्रहीत करने के लिए पैरामीटर postgresql.conf . में कॉन्फ़िगर किया गया है फ़ाइल।
क्लाउड वाल संग्रह
उपयोगकर्ताओं की प्रतिक्रिया के लिए धन्यवाद, बर्मन डेवलपर्स ने संस्करण में दो नए टूल पेश किए हैं 2.10 :
barman-cloud-wal-archivebarman-cloud-backup
संस्करण 2.11 में पुनर्प्राप्ति के लिए दो अतिरिक्त उपकरण शामिल होंगे, जिन्हें barman-cloud-wal-restore कहा जाता है। और barman-cloud-restore .
यह पोस्ट पूरी तरह से barman-cloud-wal-archive को समर्पित है , जो WAL फ़ाइलों को क्लाउड में संग्रहीत कर सकता है, बर्मन के साथ बहु-स्तरीय संग्रह को सक्षम कर सकता है, और बैकअप प्रतिधारण नीति का विस्तार कर सकता है।
वास्तव में, barman-cloud-wal-archive pre_archive_retry_script को कॉन्फ़िगर करने वाली एक हुक-स्क्रिप्ट के रूप में इस्तेमाल किया जा सकता है बर्मन में पैरामीटर, कॉन्फ़िगर किए गए क्लाउड स्टोरेज में WAL फ़ाइलों की प्रतिलिपि बनाने के लिए, संग्रह की अतिरेक को बढ़ाने के लिए, और बर्मन की तुलना में लंबी अवधारण नीति चुनना संभव बनाता है।
बस इतना ही नहीं!
barman-cloud-wal-archive barman-wal-archive को प्रतिस्थापित कर सकता है archive_command . में कमांड पैरामीटर, WAL फ़ाइलों को सीधे बर्मन सर्वर में कॉपी करने के बजाय, क्लाउड में संग्रहीत करने के लिए। इस तरह, यहां तक कि एक PostgreSQL क्लस्टर जिसमें एक अलग समर्पित बैकअप सर्वर नहीं है, WAL फ़ाइलों को संग्रहीत करने के लिए दूरस्थ संग्रहण सेवा पर भरोसा कर सकता है।
यह कैसे काम करता है?
निम्नलिखित निर्देश केवल barman-cloud-wal-archive को स्थापित और कॉन्फ़िगर करने के लिए हैं archive_command . के रूप में PostgreSQL में।
सबसे पहले, तय करें कि WAL फ़ाइलों को कहाँ संग्रहित किया जाए। इस लेख में हम Amazon S3 का उपयोग करेंगे, जो इस समय एकमात्र समर्थित तकनीक है। हालांकि अन्य प्रौद्योगिकियां जो S3 जैसी API (Google क्लाउड, DigitalOcean, Microsoft Azure, आदि) का समर्थन करती हैं, boto3 लाइब्रेरी के साथ काम कर सकती हैं, उनका अभी तक परीक्षण नहीं किया गया है।
आवश्यकताएं
- बर्मन-क्ली 2.10 (या उच्चतर)
- अमेज़न एडब्ल्यूएस खाता
- awscli
- S3 बकेट
- एक PostgreSQL उदाहरण
इस लेख में हम बर्मन सीएलआई का परीक्षण करेंगे वर्चुअल मशीन में डेबियन बस्टर . के साथ और पोस्टग्रेएसक्यूएल 12 जो पहले से ही चल रहा है।
इंस्टॉलेशन
-
- दूसरा चतुर्थांश सार्वजनिक भंडार स्थापित करें
- बर्मन-क्ली पैकेज स्थापित करें
example@sqldat.com:~# apt update example@sqldat.com:~# apt install barman-cli
- awscli इंस्टॉल करें
example@sqldat.com:~# apt install awscli
कॉन्फ़िगरेशन और सेटअप
आइए मैनुअल पढ़ें:
example@sqldat.com:~$ man barman-cloud-wal-archive [...] SYNOPSIS barman-cloud-wal-archive [OPTIONS] DESTINATION_URL SERVER_NAME WAL_PATH [...] POSITIONAL ARGUMENTS DESTINATION_URL URL of the cloud destination, such as a bucket in AWS S3. For example: s3://BUCKET_NAME/path/to/folder (where BUCKET_NAME is the bucket you have created in AWS). SERVER_NAME the name of the server as configured in Barman. WAL_PATH the value of the `%p' keyword (according to `archive_command'). [...]इसलिए, इसका ठीक से उपयोग करने के लिए हमें बस AWS क्रेडेंशियल्स को
awscli. के साथ कॉन्फ़िगर करने की आवश्यकता हैpostgres. के रूप में टूल उपयोगकर्ता, AWS कंसोल में IAM अनुभाग में पहले बनाई गई एक्सेस कुंजी और गुप्त कुंजी की प्रतिलिपि बनाना:example@sqldat.com:~$ aws configure --profile barman-cloud AWS Access Key ID [None]: AKI***************** AWS Secret Access Key [None]: **************************************** Default region name [None]: eu-west-1 Default output format [None]: json
सुनिश्चित करें कि AWS पर S3 बकेट उपलब्ध है। मैंने इसे
barman-s3-testcall कहना चुना इसे स्पष्ट करने के लिए।
हमें अबbarman-cloud-wal-archiveका परीक्षण करने में सक्षम होना चाहिए आदेश:example@sqldat.com:~$ barman-cloud-wal-archive -t -P barman-cloud s3://barman-s3-test/ pg12 /var/lib/postgresql/12/main/pg_wal/000000010000000000000001 example@sqldat.com:~$ echo $? 0
बाहर निकलने की स्थिति पुष्टि करती है कि आदेश सफल हुआ। अब हम PostgreSQL कॉन्फ़िगरेशन फ़ाइल के निचले भाग में निम्न पंक्ति जोड़ सकते हैं और इंस्टेंस को पुनरारंभ कर सकते हैं:
archive_mode = onexample@sqldat.com:~# systemctl restart example@sqldat.com
चूंकि हमारे डेटा को रिमोट स्टोरेज में कॉपी किया जाएगा, हमारे नियंत्रण से बाहर, यह महत्वपूर्ण है कि हम उन्हें संपीड़ित स्टोर करें और एन्क्रिप्टेड .
barman-cloud-wal-archiveकमांड संपीड़न के लिए दो अलग-अलग तरीकों का समर्थन करता है:example@sqldat.com:~$ barman-cloud-wal-archive --help [...] -z, --gzip gzip-compress the WAL while uploading to the cloud -j, --bzip2 bzip2-compress the WAL while uploading to the cloud -e ENCRYPTION, --encryption ENCRYPTION Enable server-side encryption for the transfer. Allowed values: 'AES256', 'aws:kms' [...]एन्क्रिप्शन विकल्प केवल S3 बकेट को सूचित करेगा कि एन्क्रिप्टेड डेटा को स्टोर करने के लिए किस विधि का उपयोग करना है। एन्क्रिप्टेड डेटा किसी अन्य AWS उपयोगकर्ता द्वारा नहीं बल्कि बाल्टी के स्वामी द्वारा पढ़ा जा सकता है। S3 को भेजने से पहले बर्मन क्लाउड किसी ऑब्जेक्ट को एन्क्रिप्ट नहीं करता है, यह बस बाल्टी को उन्हें एन्क्रिप्टेड स्टोर करने के लिए कहता है यदि S3 को ठीक से कॉन्फ़िगर किया गया है। हालांकि, S3 से कोई भी कनेक्शन
https. के माध्यम से सुरक्षित रूप से स्थापित हैं ।आइए
postgresql.confके नीचे निम्न पंक्ति जोड़ें फ़ाइल:archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'इस बार, नए परिवर्तनों को लागू करने के लिए केवल कॉन्फ़िगरेशन का पुनः लोड करना पर्याप्त है:
example@sqldat.com:~$ psql -c “SELECT pg_reload_conf()”
यह जांचने के लिए कि क्या नया आर्काइव_कमांड काम कर रहा है, पोस्टग्रेएसक्यूएल को आर्काइव करने के लिए WAL फाइल्स तैयार करनी चाहिए, इसलिए हमें
pgbenchकी मदद से कुछ ट्रैफिक बनाना होगा। उपकरण:example@sqldat.com:~$ createdb pg_bench_db example@sqldat.com:~$ pgbench -i -s10 pg_bench_db [some irrelevant output here] example@sqldat.com:~$ pgbench -c 10 -j 2 -T 30 pg_bench_db starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 10 query mode: simple number of clients: 10 number of threads: 2 duration: 30 s number of transactions actually processed: 84501 latency average = 3.552 ms tps = 2815.224687 (including connections establishing) tps = 2815.427535 (excluding connections establishing)
इस बिंदु पर हमें S3 बकेट में संग्रहीत WAL फ़ाइलों को देखना चाहिए। आइए इसे जांचें, सर्वर नाम और वाल गंतव्य निर्देशिका के साथ लक्ष्य पथ का निर्माण:
example@sqldat.com:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/ PRE 0000000100000000/आइए 0000000100000000 निर्देशिका के अंदर एक नज़र डालें:
example@sqldat.com:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/0000000100000000/ 2020-01-08 08:20:54 1624168 000000010000000000000001.bz2 2020-01-08 08:21:00 293422 000000010000000000000002.bz2 2020-01-08 08:21:06 301934 000000010000000000000003.bz2 2020-01-08 08:21:11 295648 000000010000000000000004.bz2 2020-01-08 08:21:16 293675 000000010000000000000005.bz2 2020-01-08 08:21:21 299348 000000010000000000000006.bz2 2020-01-08 08:21:27 551249 000000010000000000000007.bz2 2020-01-08 08:21:33 976523 000000010000000000000008.bz2 2020-01-08 08:21:37 4542104 000000010000000000000009.bz2 2020-01-08 08:21:46 5052693 00000001000000000000000A.bz2
बढ़िया!
S3 बकेट में अपलोड होने से पहले WAL फ़ाइलों को संपीड़ित किया जा रहा है और एन्क्रिप्टेड संग्रहीत किया जाता है, जिससे हमें स्थान (और धन) की बचत होती है और हमारे डेटा का सुरक्षा स्तर बढ़ जाता है।
निष्कर्ष
barman-cloud-wal-archiveकमांड वह है जिसका उपयोगकर्ताओं ने लंबे समय से इंतजार किया है।अगर आप उन लोगों में से हैं जिन्होंने
pre_archive_retry_script. का इस्तेमाल किया है WAL फ़ाइलों को S3 बकेट में अपलोड करने के लिए एक कस्टम स्क्रिप्ट को लागू करने के लिए, फिर इसे एक बेहतर प्रतिस्थापन के रूप में इस्तेमाल किया जा सकता है क्योंकि इसे बर्मन डेवलपर्स द्वारा विकसित और रखरखाव किया जाता है, और इसे 2ndQuadrant सतत वितरण प्रणाली द्वारा परीक्षण और वितरित किया जाता है।यदि आपने इसके बारे में अभी तक नहीं सोचा है, तो यह नई अवधारण नीतियों को खोलता है जो बर्मन स्थानीय लोगों की तुलना में क्लाउड स्टोरेज के लिए लंबी हो सकती हैं, क्लाउड में ऑब्जेक्ट्स की उम्र बढ़ सकती है, जबकि स्थानीय स्टोरेज पर जगह बचाते हुए, उचित सेटिंग करके S3 बकेट के कॉन्फ़िगरेशन में एक लंबी अवधारण नीति।
अन्यथा, इसका उपयोग हम इस लेख में किया जा सकता है, सीधे PostgreSQL सर्वर से WAL फ़ाइलों को संग्रहीत करने के लिए। हालांकि यह एक मध्यवर्ती चरण को हटा देता है, RPO स्ट्रीमिंग विधि की तुलना में बढ़ जाती है, क्योंकि PostgreSQL WAL फ़ाइल को बंद करने के बाद ही संग्रहीत करेगा। इसलिए PostgreSQL नोड पर समस्याओं के मामले में, हम कुछ बदलाव खो सकते हैं। जब संभव हो, हम RPO=0 प्राप्त करने के लिए बर्मन सर्वर पर स्ट्रीमिंग के साथ इस पद्धति को लागू करने की अनुशंसा करते हैं (सिंक्रोनस स्ट्रीमिंग के साथ)।
अब जबकि हमारे पास एक सतत संग्रह प्रणाली है, हम अपना पहला क्लाउड बैकअप . ले सकते हैं
barman-cloud-backupका उपयोग करना उपकरण।मिलते हैं लेख के दूसरे भाग में।