सामान्य रूप से PostgreSQL के लिए बैकअप और पुनर्स्थापना विकल्प के रूप में कई शक्तिशाली उपकरण उपलब्ध होने चाहिए; इस संदर्भ में बर्मन, पीजीबैकरेस्ट, बार्ट कुछ नाम रखने वाले हैं। जिस बात ने हमारा ध्यान खींचा, वह यह थी कि बर्मन एक ऐसा उपकरण है जो उत्पादन परिनियोजन और बाजार के रुझानों के साथ तेजी से आगे बढ़ रहा है।
चाहे वह डॉकटर आधारित परिनियोजन हो, बैकअप को किसी भिन्न क्लाउड स्टोरेज में संग्रहीत करने की आवश्यकता हो या अत्यधिक अनुकूलन योग्य आपदा पुनर्प्राप्ति वास्तुकला की आवश्यकता हो - ऐसे सभी मामलों में बर्मन एक बहुत मजबूत दावेदार है।
यह ब्लॉग बर्मन को परिनियोजन के बारे में कुछ मान्यताओं के साथ खोजता है, हालांकि किसी भी स्थिति में इसे केवल संभावित सुविधा-सेट नहीं माना जाना चाहिए। बर्मन इस ब्लॉग में जो हम कैप्चर कर सकते हैं उससे कहीं आगे है और अगर 'पोस्टग्रेएसक्यूएल इंस्टेंस का बैकअप और पुनर्स्थापना' पर विचार किया जाता है तो इसे और खोजा जाना चाहिए।
DR तैयार परिनियोजन अनुमान
RPO=0 आम तौर पर एक लागत पर आता है - सिंक्रोनस स्टैंडबाय सर्वर परिनियोजन अक्सर इसे पूरा करेगा, लेकिन फिर यह प्राथमिक सर्वर के TPS को अक्सर प्रभावित करता है।
PostgreSQL की तरह, जब RPO बनाम प्रदर्शन की बात आती है, तो बर्मन आपकी आवश्यकताओं को पूरा करने के लिए कई परिनियोजन विकल्प देता है। परिनियोजन सरलता, RPO=0 या लगभग शून्य प्रदर्शन प्रभाव के बारे में सोचें; बर्मन सभी में फिट बैठता है।
हमने अपने बैकअप और रीस्टोर आर्किटेक्चर के लिए डिजास्टर रिकवरी सॉल्यूशन स्थापित करने के लिए निम्नलिखित परिनियोजन पर विचार किया।
चित्र 1:बर्मन के साथ PostgreSQL परिनियोजनदो साइटें हैं (सामान्य रूप से की तरह) आपदा-वसूली साइटों के लिए) - साइट-एक्स और साइट-वाई।
साइट-X में है:
- एक सर्वर 'pgServer' एक PostgreSQL सर्वर इंस्टेंस pgServer को होस्ट करता है, और एक OS उपयोगकर्ता 'पोस्टग्रेज' करता है
- PostgreSQL इंस्टेंस भी एक सुपरयूज़र भूमिका 'bmuser' को होस्ट करने के लिए
- एक सर्वर 'bServer' जो बर्मन बायनेरिज़ को होस्ट करता है और एक OS उपयोगकर्ता 'bmuser'
साइट-Y में है:
- एक सर्वर 'geobServer' जो बर्मन बायनेरिज़ को होस्ट करता है और एक OS उपयोगकर्ता 'bmuser'
इस सेटअप में कई प्रकार के कनेक्शन शामिल हैं।
- 'bServer' और 'pgServer' के बीच:
- मैनेजमेंट-प्लेन कनेक्टिविटी बर्मन से पोस्टग्रेएसक्यूएल इंस्टेंस तक
- बर्मन से PostgreSQL इंस्टेंस तक वास्तविक आधार बैकअप करने के लिए rsync कनेक्टिविटी
- WAL पोस्टग्रेएसक्यूएल इंस्टेंस से बर्मन तक बर्मन-वाल-आर्काइव का उपयोग करके संग्रह करना
- बर्मन में pg_receivexlog का उपयोग करके वाल स्ट्रीमिंग
- 'बीसर्वर' और 'जियोसर्वर' के बीच:
- भू-प्रतिकृति प्रदान करने के लिए बर्मन सर्वरों के बीच सिंक्रनाइज़ेशन
कनेक्टिविटी पहले
सर्वर के बीच प्राथमिक कनेक्टिविटी की जरूरत ssh के माध्यम से है। इसे पासवर्ड रहित बनाने के लिए ssh-keys का उपयोग किया जाता है। आइए ssh कुंजियाँ स्थापित करें और उनका आदान-प्रदान करें।
पीजीसर्वर पर:
[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"
बीसर्वर पर:
[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"
जियोबसर्वर पर:
[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"
PostgreSQL इंस्टेंस कॉन्फ़िगरेशन
पोस्टग्रेज इंस्टेंस को फिर से बनाने के लिए हमें दो मुख्य चीजों की आवश्यकता होती है - आधार निर्देशिका और उसके बाद उत्पन्न वाल / लेनदेन लॉग। बर्मन सर्वर समझदारी से उन पर नज़र रखता है। हमें यह सुनिश्चित करने की आवश्यकता है कि बर्मन के लिए इन कलाकृतियों को एकत्र करने के लिए उचित फ़ीड तैयार की जाए।
postgresql.conf में निम्नलिखित पंक्तियाँ जोड़ें:
listen_addresses = '172.25.130.180' #as per above deployment assumption
wal_level = replica #or higher
archive_mode = on
archive_command = 'barman-wal-archive -U bmuser bserver pgserver %p'
आर्काइव कमांड यह सुनिश्चित कर रहा है कि जब WAL को पोस्टग्रेज इंस्टेंस द्वारा आर्काइव किया जाना है, तो बर्मन-वाल-आर्काइव यूटिलिटी इसे बर्मन सर्वर पर सबमिट कर देती है। यह ध्यान दिया जाना चाहिए कि बर्मन-क्ली पैकेज इसलिए 'पीजीसर्वर' पर उपलब्ध कराया जाना चाहिए। यदि हम बर्मन-वाल-आर्काइव उपयोगिता का उपयोग नहीं करना चाहते हैं तो rsync का उपयोग करने का एक और विकल्प है।
निम्नलिखित को pg_hba.conf में जोड़ें:
host all all 172.25.130.186/32 md5
host replication all 172.25.130.186/32 md5
यह मूल रूप से इस पोस्टग्रेज इंस्टेंस के लिए 'bmserver' से एक प्रतिकृति और एक सामान्य कनेक्शन की अनुमति दे रहा है।
अब बस इंस्टेंस को पुनरारंभ करें और bmuser नामक एक सुपर उपयोगकर्ता भूमिका बनाएं:
[email protected]$ pg_ctl restart
[email protected]$ createuser -s -P bmuser
यदि आवश्यक हो, तो हम सुपर-उपयोगकर्ता के रूप में भी bmuser का उपयोग करने से बच सकते हैं; जिसे इस उपयोगकर्ता को सौंपे गए विशेषाधिकारों की आवश्यकता होगी। उपरोक्त उदाहरण के लिए, हमने bmuser को पासवर्ड के रूप में भी इस्तेमाल किया। लेकिन जहां तक PostgreSQL इंस्टेंस कॉन्फ़िगरेशन की आवश्यकता है, वह बहुत अधिक है।
बर्मन कॉन्फ़िगरेशन
बर्मन के विन्यास में तीन बुनियादी घटक हैं:
- वैश्विक कॉन्फ़िगरेशन
- सर्वर स्तर कॉन्फ़िगरेशन
- बरमन चलाने वाला उपयोगकर्ता
हमारे मामले में, चूंकि बर्मन आरपीएम का उपयोग करके स्थापित किया गया है, इसलिए हमने अपनी वैश्विक कॉन्फ़िगरेशन फ़ाइलें यहां संग्रहीत की हैं:
/etc/barman.conf
हम सर्वर स्तर कॉन्फ़िगरेशन को bmuser होम निर्देशिका में संग्रहीत करना चाहते थे, इसलिए हमारी वैश्विक कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित सामग्री थी:
[barman]
barman_user = bmuser
configuration_files_directory = /home/bmuser/barman.d
barman_home = /home/bmuser
barman_lock_directory = /home/bmuser/run
log_file = /home/bmuser/barman.log
log_level = INFO
प्राथमिक बर्मन सर्वर कॉन्फ़िगरेशन
उपरोक्त परिनियोजन में, हमने प्राथमिक बर्मन सर्वर को उसी डेटा-सेंटर / साइट में रखने का निर्णय लिया जहां पोस्टग्रेएसक्यूएल इंस्टेंस रखा गया है। इसका लाभ यह है कि आवश्यकता पड़ने पर कम अंतराल और तेजी से वसूली होती है। कहने की जरूरत नहीं है कि PostgreSQL सर्वर पर भी कम कंप्यूटिंग और/या नेटवर्क बैंडविड्थ की जरूरत है।
बर्मन को pgServer पर PostgreSQL इंस्टेंस को प्रबंधित करने देने के लिए, हमें निम्नलिखित सामग्री के साथ एक कॉन्फ़िगरेशन फ़ाइल (हमने pgserver.conf नाम दिया) जोड़ने की आवश्यकता है:
[pgserver]
description = "Example pgserver configuration"
ssh_command = ssh [email protected]
conninfo = host=pgserver user=bmuser dbname=postgres
backup_method = rsync
reuse_backup = link
backup_options = concurrent_backup
parallel_jobs = 2
archiver = on
archiver_batch_size = 50
path_prefix = "/usr/pgsql-12/bin"
streaming_conninfo = host=pgserver user=bmuser dbname=postgres
streaming_archiver=on
create_slot = auto
और एक .pgpass फ़ाइल जिसमें PostgreSQL इंस्टेंस में bmuser के क्रेडेंशियल हैं:
echo 'pgserver:5432:*:bmuser:bmuser' > ~/.pgpass
महत्वपूर्ण कॉन्फ़िगरेशन आइटम को थोड़ा और समझने के लिए:
- ssh_command :कनेक्शन स्थापित करने के लिए प्रयुक्त होता है जिस पर rsync किया जाएगा
- conninfo :बर्मन को पोस्टग्रेज सर्वर के साथ कनेक्शन स्थापित करने देने के लिए कनेक्शन स्ट्रिंग
- reuse_backup :कम संग्रहण के साथ वृद्धिशील बैकअप की अनुमति देने के लिए
- बैकअप_विधि :मूल निर्देशिका का बैकअप लेने की विधि
- path_prefix :वह स्थान जहां pg_receivexlog बायनेरिज़ संग्रहीत हैं
- streaming_conninfo :WAL स्ट्रीम करने के लिए उपयोग की जाने वाली कनेक्शन स्ट्रिंग
- create_slot :यह सुनिश्चित करने के लिए कि पोस्टग्रेज़ इंस्टेंस द्वारा स्लॉट बनाए गए हैं
निष्क्रिय बर्मन सर्वर कॉन्फ़िगरेशन
भू-प्रतिकृति साइट का विन्यास बहुत आसान है। इसके लिए केवल एक ssh कनेक्शन जानकारी की आवश्यकता होती है, जिस पर यह निष्क्रिय नोड साइट प्रतिकृति करेगी।
दिलचस्प बात यह है कि ऐसा निष्क्रिय नोड मिक्स-मोड में काम कर सकता है; दूसरे शब्दों में - वे PostgreSQL साइटों के लिए बैकअप करने के लिए सक्रिय बर्मन सर्वर के रूप में कार्य कर सकते हैं और समानांतर में अन्य बर्मन सर्वरों के लिए प्रतिकृति/कैस्केड साइट के रूप में कार्य कर सकते हैं।
चूंकि, हमारे मामले में बर्मन (साइट-वाई पर) के इस उदाहरण को केवल एक निष्क्रिय नोड होने की आवश्यकता है, हमें केवल /home/bmuser/barman.d/pgserver.conf फ़ाइल बनाने की आवश्यकता है निम्नलिखित विन्यास के साथ:
[pgserver]
description = "Geo-replication or sync for pgserver"
primary_ssh_command = ssh [email protected]
इस धारणा के साथ कि चाबियों का आदान-प्रदान किया गया है और इस नोड पर वैश्विक कॉन्फ़िगरेशन पहले बताए गए अनुसार किया जाता है - हम कॉन्फ़िगरेशन के साथ बहुत कुछ कर चुके हैं।
और यहां हमारा पहला बैकअप और पुनर्स्थापना है
bserver पर सुनिश्चित करें कि WAL प्राप्त करने की पृष्ठभूमि प्रक्रिया शुरू हो गई है; और फिर सर्वर के कॉन्फ़िगरेशन की जाँच करें:
[email protected]$ barman cron
[email protected]$ barman check pgserver
चेक सभी सबस्टेप्स के लिए ठीक होना चाहिए। यदि नहीं, तो /home/bmuser/barman.log देखें।
बर्मन पर बैकअप कमांड जारी करें ताकि यह सुनिश्चित हो सके कि एक आधार डेटा है जिस पर वाल लागू किया जा सकता है:
[email protected]$ barman backup pgserver
'जियोबमसर्वर' पर सुनिश्चित करें कि प्रतिकृति निम्नलिखित आदेशों को निष्पादित करके की जाती है:
[email protected]$ barman cron
[email protected]$ barman list-backup pgserver
क्रोन को crontab फ़ाइल में डाला जाना चाहिए (यदि मौजूद नहीं है)। सादगी के लिए, मैंने इसे यहाँ नहीं दिखाया है। अंतिम कमांड दिखाएगा कि बैकअप फ़ोल्डर जियोबमसर्वर पर भी बनाया गया है।
अब Postgres उदाहरण पर, आइए कुछ डमी डेटा बनाएं:
[email protected]$ psql -U postgres -c "CREATE TABLE dummy_data( i INTEGER);"
[email protected]$ psql -U postgres -c "insert into dummy_data values ( generate_series (1, 1000000 ));"
WAL की PostgreSQL आवृत्ति से प्रतिकृति को नीचे दिए गए आदेश का उपयोग करके देखा जा सकता है:
[email protected]$ psql -U postgres -c "SELECT * from pg_stat_replication ;”
साइट-Y पर एक इंस्टेंस को फिर से बनाने के लिए, पहले सुनिश्चित करें कि WAL रिकॉर्ड स्विच-ओवर हैं। या यह उदाहरण, क्लीन रिकवरी बनाने के लिए:
[email protected]$ barman switch-xlog --force --archive pgserver
साइट-X पर, आइए एक स्टैंडअलोन पोस्टग्रेएसक्यूएल इंस्टेंस लाते हैं ताकि यह जांचा जा सके कि बैकअप सही है या नहीं:
[email protected]$ barman cron
barman recover --get-wal pgserver latest /tmp/data
अब, आवश्यकता के अनुसार postgresql.conf और postgresql.auto.conf फ़ाइलों को संपादित करें। निम्नलिखित इस उदाहरण के लिए किए गए परिवर्तनों की व्याख्या करें:
- postgresql.conf :सुनने_पते ने टिप्पणी की ताकि स्थानीयहोस्ट के लिए डिफ़ॉल्ट हो
- postgresql.auto.conf :sudo bmuser को restore_command से हटा दिया
इस डेटा को /tmp/data में लाएं और अपने रिकॉर्ड के अस्तित्व की जांच करें।
निष्कर्ष
यह तो बस एक हिमखंड का सिरा था। बर्मन इसके द्वारा प्रदान की जाने वाली कार्यक्षमता के कारण इससे कहीं अधिक गहरा है - उदा। एक सिंक्रनाइज़ स्टैंडबाय, हुक स्क्रिप्ट आदि के रूप में कार्य करना। कहने की जरूरत नहीं है कि आपके उत्पादन परिवेश की आवश्यकताओं के अनुसार इसे कॉन्फ़िगर करने के लिए दस्तावेज़ीकरण को समग्रता में खोजा जाना चाहिए।