PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

डेबियन/उबंटू पर एक पोस्टग्रेएसक्यूएल प्रतिकृति सेटअप बनाना

PostgreSQL एक ही डेटा संरचना के साथ कई मशीनों पर अलग-अलग काम कर सकता है, जिससे एप्लिकेशन की दृढ़ता परत अधिक लचीला हो जाती है और कुछ अप्रत्याशित घटना के लिए तैयार हो जाती है जो सेवा की निरंतरता से समझौता कर सकती है।

इसके पीछे का विचार "राउंड रॉबिन" नेटवर्क में अनुरोधों को वितरित करके सिस्टम प्रतिक्रिया समय में सुधार करना है जहां मौजूद प्रत्येक नोड एक क्लस्टर है। इस प्रकार के सेटअप में यह महत्वपूर्ण नहीं है कि किस अनुरोध को संसाधित करने के लिए वितरित किया जाएगा, क्योंकि प्रतिक्रिया हमेशा समान होगी।

इस ब्लॉग में, हम बताएंगे कि प्रोग्राम इंस्टॉलेशन में दिए गए टूल का उपयोग करके PostgreSQL क्लस्टर को कैसे दोहराया जाए। उपयोग किया गया संस्करण PostgreSQL 11.5 है, जो ऑपरेटिंग सिस्टम डेबियन बस्टर के लिए वर्तमान स्थिर, सामान्य रूप से उपलब्ध संस्करण है। इस ब्लॉग के उदाहरणों के लिए यह माना जाता है कि आप पहले से ही Linux से परिचित हैं।

पोस्टग्रेएसक्यूएल प्रोग्राम

निर्देशिका के अंदर /usr/bin/ क्लस्टर के प्रबंधन के लिए जिम्मेदार प्रोग्राम है।

# 1. Lists the files contained in the directory
# 2. Filters the elements that contain 'pg_' in the name
ls /usr/bin/ | grep pg_

इन कार्यक्रमों के माध्यम से की जाने वाली गतिविधियों को क्रमिक रूप से या अन्य कार्यक्रमों के संयोजन में भी किया जा सकता है। एक ही कमांड के माध्यम से इन गतिविधियों का एक ब्लॉक चलाना संभव है, उसी निर्देशिका में पाए जाने वाले लिनक्स प्रोग्राम के लिए धन्यवाद, जिसे मेक कहा जाता है।

उपस्थित समूहों को सूचीबद्ध करने के लिए pg_lsclusters प्रोग्राम का उपयोग करें। आप इसे चलाने के लिए मेक का भी उपयोग कर सकते हैं। इसका काम Makefile नाम की फाइल पर निर्भर करता है, जिसे उसी डायरेक्टरी में होना चाहिए जहां कमांड चलेगा।

# 1. The current directory is checked
pwd

# 2. Creates a directory
mkdir ~/Documents/Severalnines/

# 3. Enroute to the chosen directory
cd ~/Documents/Severalnines/

# 4. Create the file Makefile
touch Makefile

# 5. Open the file for editing

ब्लॉक की परिभाषा नीचे दिखाई गई है, जिसका नाम ls है, और चलाने के लिए एक ही प्रोग्राम है, pg_lsclusters।

# 1. Block name
ls:
# 2. Program to be executed
pg_lsclusters

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

pg_lsclusters प्रोग्राम को चलाने के लिए मेक का उपयोग मेक एलएस कमांड का उपयोग करके पूरा किया जाता है।

# 1. Executes pg_lsclusters
make ls

हाल ही में पोस्टग्रेएसक्यूएल इंस्टालेशन में प्राप्त परिणाम मेन नामक एक क्लस्टर लाता है, जिसे ऑपरेटिंग सिस्टम के पोर्ट 5432 पर आवंटित किया जाता है। जब pg_createcluster प्रोग्राम का उपयोग किया जाता है, तो बनाए गए नए क्लस्टर को एक नया पोर्ट आवंटित किया जाता है, जिसका मान 5432 प्रारंभिक बिंदु के रूप में होता है, जब तक कि दूसरा आरोही क्रम में नहीं मिल जाता।

आगे लिखें लॉगिंग (WAL)

इस प्रतिकृति प्रक्रिया में एक कार्यशील क्लस्टर का बैकअप बनाना शामिल है जो अद्यतन प्राप्त करना जारी रखता है। यदि यह उसी मशीन पर किया जाता है, तथापि, इस तकनीक द्वारा लाए गए कई लाभ समाप्त हो जाते हैं।

सिस्टम को क्षैतिज रूप से स्केल करने से सेवा की अधिक उपलब्धता सुनिश्चित होती है, जैसे कि यदि कोई हार्डवेयर समस्या होती है, तो इससे बहुत फर्क नहीं पड़ेगा क्योंकि अन्य मशीनें काम का बोझ उठाने के लिए तैयार हैं।

WAL शब्द का प्रयोग PostgreSQL के लिए एक आंतरिक जटिल एल्गोरिथम का प्रतिनिधित्व करने के लिए किया जाता है जो सिस्टम पर किए गए लेनदेन की अखंडता को सुनिश्चित करता है। हालांकि, लिखित अनुमति के साथ इसे एक्सेस करने की जिम्मेदारी केवल एक क्लस्टर के पास होनी चाहिए।

आर्किटेक्चर में अब तीन अलग-अलग प्रकार के क्लस्टर हैं:

  1. WAL को लिखने की जिम्मेदारी वाला एक प्राथमिक;
  2. प्राथमिक पद संभालने के लिए तैयार एक प्रतिकृति;
  3. वाल रीडिंग ड्यूटी के साथ विविध अन्य प्रतिकृतियां।

राइट ऑपरेशंस ऐसी कोई भी गतिविधियां हैं जिनका उद्देश्य डेटा संरचना को संशोधित करना है, या तो नए तत्वों को दर्ज करके, या मौजूदा रिकॉर्ड को अपडेट और हटाकर।

PostgreSQL क्लस्टर कॉन्फ़िगरेशन

प्रत्येक क्लस्टर में दो निर्देशिकाएं होती हैं, एक में इसकी कॉन्फ़िगरेशन फ़ाइलें होती हैं और दूसरी लेनदेन लॉग के साथ। ये क्रमशः /etc/postgresql/11/$(cluster) और /var/lib/postgresql/11/$(cluster) में स्थित हैं (जहां $(cluster) क्लस्टर का नाम है)।

pg_createcluster प्रोग्राम चलाकर क्लस्टर बनाने के तुरंत बाद फ़ाइल postgresql.conf बनाई जाती है, और गुणों को क्लस्टर के अनुकूलन के लिए संशोधित किया जा सकता है।

इस फ़ाइल को सीधे संपादित करने की अनुशंसा नहीं की जाती है क्योंकि इसमें लगभग सभी गुण होते हैं। उनके मूल्यों पर टिप्पणी की गई है, प्रत्येक पंक्ति की शुरुआत में # प्रतीक है, और कई अन्य पंक्तियों में टिप्पणी की गई है जिसमें संपत्ति के मूल्यों को बदलने के निर्देश हैं।

वांछित परिवर्तनों वाली एक और फ़ाइल जोड़ना संभव है, बस शामिल नाम की एक ही संपत्ति को संपादित करें, डिफ़ॉल्ट मान #include ='' को शामिल ='postgresql.replication.conf' के साथ बदलें।

क्लस्टर शुरू करने से पहले, आपको उसी निर्देशिका में फ़ाइल postgresql.replication.conf की उपस्थिति की आवश्यकता है जहां आपको मूल कॉन्फ़िगरेशन फ़ाइल मिलती है, जिसे postgresql.conf कहा जाता है।

# 1. Block name
create:
# 2. Creates the cluster
pg_createcluster 11 $(cluster) -- --data-checksums
# 3. Copies the file to the directory
cp postgresql.replication.conf /etc/postgresql/11/$(cluster)/
# 4. A value is assigned to the property
sed -i "s|^#include = ''|include = 'postgresql.replication.conf'|g" /etc/postgresql/11/$(cluster)/postgresql.conf

क्लस्टर के निर्माण में --data-checksums का उपयोग डेटा के लिए एक उच्च स्तर की अखंडता जोड़ता है, जिसमें थोड़ा सा प्रदर्शन खर्च होता है लेकिन फाइलों के भ्रष्टाचार से बचने के लिए बहुत महत्वपूर्ण होता है जब एक क्लस्टर से दूसरे क्लस्टर में स्थानांतरित किया गया।

उपरोक्त वर्णित प्रक्रियाओं को अन्य समूहों के लिए पुन:उपयोग किया जा सकता है, बस प्रोग्राम के निष्पादन में एक पैरामीटर के रूप में $(क्लस्टर) के लिए एक मान पास करना।

# 1. Executes the block 'create' by passing a parameter
sudo make create cluster=primary

अब जब कार्यों का एक संक्षिप्त स्वचालन स्थापित हो गया है, तो प्रत्येक क्लस्टर की आवश्यकता के अनुसार फ़ाइल postgresql.replication.conf की परिभाषा क्या करना बाकी है।

PostgreSQL पर प्रतिकृति

एक क्लस्टर को दोहराने के दो तरीके संभव हैं, एक को पूरा करना दूसरा पूरे क्लस्टर को शामिल करना (स्ट्रीमिंग प्रतिकृति कहा जाता है) और दूसरा आंशिक या पूर्ण हो सकता है (जिसे तार्किक प्रतिकृति कहा जाता है)।

एक क्लस्टर के लिए निर्दिष्ट की जाने वाली सेटिंग्स चार मुख्य श्रेणियों में आती हैं:

  • मास्टर सर्वर
  • स्टैंडबाय सर्वर
  • सर्वर भेजना
  • सदस्य

जैसा कि हमने पहले देखा, WAL एक फ़ाइल है जिसमें क्लस्टर पर किए गए लेन-देन होते हैं, और प्रतिकृति इन फ़ाइलों का एक क्लस्टर से दूसरे क्लस्टर में स्थानांतरण है।

फ़ाइल postgresql.conf में मौजूद सेटिंग्स के अंदर, हम उन गुणों को देख सकते हैं जो WAL फ़ाइलों के संबंध में क्लस्टर के व्यवहार को परिभाषित करते हैं, जैसे कि उन फ़ाइलों का आकार।

# default values
max_wal_size = 1GB
min_wal_size = 80MB

एक और महत्वपूर्ण संपत्ति जिसे max_wal_senders कहा जाता है। विशेषता भेजने वाले सर्वर वाले क्लस्टर से संबंधित, इन फ़ाइलों को अन्य समूहों में भेजने के लिए ज़िम्मेदार प्रक्रियाओं की मात्रा है, जिसका मूल्य हमेशा उनकी प्राप्ति पर निर्भर क्लस्टर की संख्या से अधिक होता है।

WAL फ़ाइलों को एक क्लस्टर में संचरण के लिए संग्रहीत किया जा सकता है जो देर से कनेक्ट होता है, या जिसे इसे प्राप्त करने में कुछ समस्याएं होती हैं, और वर्तमान समय के संबंध में पिछली फ़ाइलों की आवश्यकता होती है, जिसमें विशेषता के रूप में wal_keep_segments संपत्ति होती है। क्लस्टर द्वारा कितने WAL फ़ाइल खंडों का रखरखाव किया जाना है।

एक प्रतिकृति स्लॉट एक कार्यक्षमता है जो क्लस्टर को सभी रिकॉर्ड के साथ एक और क्लस्टर प्रदान करने के लिए आवश्यक WAL फ़ाइलों को संग्रहीत करने की अनुमति देता है, जिसमें इसकी संपत्ति के रूप में max_replication_slots विकल्प होता है।

# default values
max_wal_senders = 10
wal_keep_segments = 0
max_replication_slots = 10

जब इरादा इन WAL फ़ाइलों के भंडारण को आउटसोर्स करने का होता है, तो इन फ़ाइलों को संसाधित करने की एक अन्य विधि का उपयोग किया जा सकता है, जिसे सतत संग्रह कहा जाता है।

सतत संग्रह

यह अवधारणा आपको लिनक्स प्रोग्राम का उपयोग करके WAL फ़ाइलों को एक विशिष्ट स्थान पर निर्देशित करने की अनुमति देती है, और फ़ाइल के पथ का प्रतिनिधित्व करने वाले दो चर, और इसका नाम, जैसे %p, और %f, क्रमशः।

यह गुण डिफ़ॉल्ट रूप से अक्षम है, लेकिन इसके उपयोग को आसानी से कार्यान्वित किया जा सकता है, इस तरह की महत्वपूर्ण फ़ाइलों को संग्रहीत करने से क्लस्टर की जिम्मेदारी वापस ले ली जाती है, और इसे पोस्टग्रेस्क्ल.replication.conf फ़ाइल में जोड़ा जा सकता है।

# 1. Creates a directory
mkdir ~/Documents/Severalnines/Archiving

# 2. Implementation on postgresql.replication.conf
archive_mode = on
archive_command = 'cp %p ~/Documents/Severalnines/Archiving/%f'

# 3. Starts the cluster
sudo systemctl start [email protected]

क्लस्टर प्रारंभ होने के बाद, कुछ गुणों को संशोधित करने की आवश्यकता हो सकती है, और क्लस्टर पुनरारंभ की आवश्यकता हो सकती है। हालांकि, कुछ गुणों को केवल क्लस्टर के पूर्ण रीबूट की आवश्यकता के बिना ही पुनः लोड किया जा सकता है।

इस तरह के विषयों पर जानकारी फ़ाइल postgresql.conf में मौजूद टिप्पणियों के माध्यम से प्राप्त की जा सकती है, जो # के रूप में दिखाई दे रही है (नोट:परिवर्तन को पुनरारंभ करने की आवश्यकता है)।

यदि ऐसा है, तो इसे हल करने का एक आसान तरीका Linux प्रोग्राम systemctl के साथ है, जिसका उपयोग पहले क्लस्टर शुरू करने के लिए किया गया था, जिसमें केवल पुनरारंभ करने के विकल्प को ओवरराइड करना था।

जब एक पूर्ण रीबूट की आवश्यकता नहीं होती है, तो क्लस्टर स्वयं एक क्वेरी के माध्यम से अपने गुणों को पुन:असाइन कर सकता है, हालांकि, यदि एक ही मशीन पर एकाधिक क्लस्टर चल रहे हैं, तो इसे पैरामीटर पास करने की आवश्यकता होगी ऑपरेटिंग सिस्टम पर क्लस्टर आवंटित किया गया पोर्ट मान युक्त।

# Reload without restarting
sudo -H -u postgres psql -c ‘SELECT pg_reload_conf();’ -p 5433

उपरोक्त उदाहरण में, आर्काइव_मोड प्रॉपर्टी को रीबूट करने की आवश्यकता है, जबकि आर्काइव_कमांड को नहीं। इस विषय के इस संक्षिप्त परिचय के बाद, आइए देखें कि पॉइंट इन टाइम रिकवरी (PITR) का उपयोग करके एक प्रतिकृति क्लस्टर इन संग्रहीत WAL फ़ाइलों का बैकअप कैसे ले सकता है।

PostgreSQL प्रतिकृति पॉइंट-इन-टाइम रिकवरी

यह विचारोत्तेजक नाम किसी क्लस्टर को एक निश्चित अवधि से अपनी स्थिति में वापस जाने की अनुमति देता है। यह पुनर्प्राप्ति_टारगेट_टाइमलाइन नामक एक संपत्ति के माध्यम से किया जाता है, जो दिनांक प्रारूप में मान प्राप्त करने की अपेक्षा करता है, जैसे कि 2019-08-22 12:05 GMT, या नवीनतम असाइनमेंट, जो पिछले मौजूदा रिकॉर्ड तक पुनर्प्राप्ति की आवश्यकता को सूचित करता है।

प्रोग्राम pg_basebackup जब यह चलता है, तो एक निर्देशिका की एक प्रति बनाता है जिसमें एक क्लस्टर से दूसरे स्थान पर डेटा होता है। यह प्रोग्राम कई पैरामीटर प्राप्त करता है, उनमें से एक होने के नाते -R, जो कॉपी की गई निर्देशिका के भीतर पुनर्प्राप्ति.conf नाम की एक फ़ाइल बनाता है, जो बदले में वही नहीं है जिसमें पहले देखी गई अन्य कॉन्फ़िगरेशन फ़ाइलें शामिल हैं, जैसे कि postgresql.conf ।

फ़ाइल पुनर्प्राप्ति.conf प्रोग्राम के निष्पादन में पारित मापदंडों को संग्रहीत करता है pg_basebackup, और इसका अस्तित्व स्ट्रीमिंग प्रतिकृति कार्यान्वयन के लिए आवश्यक है, क्योंकि यह इसके भीतर है कि कंटीन्यूअस आर्काइविंग के लिए रिवर्स ऑपरेशन कर सकते हैं प्रदर्शन किया जाए।

# 1. Block name
replicate:
# 2. Removes the current data directory
rm -rf /var/lib/postgresql/11/$(replica)
# 3. Connects to primary cluster as user postgres
# 4. Copies the entire data directory
# 5. Creates the file recovery.conf
pg_basebackup -U postgres -d postgresql://localhost:$(primaryPort) -D /var/lib/postgresql/11/$(replica) -P -R
# 6. Inserts the restore_command property and its value
echo "restore_command = 'cp ~/Documents/Severalnines/Archiving/%f %p'" >> /var/lib/postgresql/11/$(replica)/recovery.conf
# 7. The same is done with recovery_target_timeline
echo "recovery_target_timeline = 'latest'" >> /var/lib/postgresql/11/$(replica)/recovery.conf

उपरोक्त निर्दिष्ट इस प्रतिकृति ब्लॉक को ऑपरेटिंग सिस्टम के पोस्टग्रेज उपयोगकर्ता द्वारा चलाने की आवश्यकता है, ताकि क्लस्टर डेटा का स्वामी, पोस्टग्रेज या उपयोगकर्ता रूट के साथ संभावित टकराव से बचा जा सके।

प्रतिकृति क्लस्टर अभी भी खड़ा है, प्रतिकृति को सफलतापूर्वक शुरू करने के लिए इसे चखने के लिए, pg_walreceiver नामक प्रतिकृति क्लस्टर प्रक्रिया को एक TCP कनेक्शन पर pg_walsender नामक प्राथमिक क्लस्टर के साथ इंटरैक्ट कर रहा है।

# 1. Executes the block ‘replicate’ by passing two parameters
sudo -H -u postgres make replicate replica=replica primaryPort=5433
# 2. Starts the cluster replica
sudo systemctl start [email protected]

स्ट्रीमिंग प्रतिकृति नामक इस प्रतिकृति मॉडल के स्वास्थ्य का सत्यापन प्राथमिक क्लस्टर पर चलने वाली क्वेरी द्वारा किया जाता है।

# 1. Checks the Streaming Replication created
sudo -H -u postgres psql -x -c ‘select * from pg_stat_replication;’ -p 5433

निष्कर्ष

इस ब्लॉग में, हमने दिखाया कि दो पोस्टग्रेएसक्यूएल क्लस्टर्स के बीच एसिंक्रोनस स्ट्रीमिंग प्रतिकृति कैसे सेटअप करें। याद रखें, हालांकि, उपरोक्त कोड में कमजोरियां मौजूद हैं, उदाहरण के लिए, इस तरह के कार्य को करने के लिए पोस्टग्रेज उपयोगकर्ता का उपयोग करने की अनुशंसा नहीं की जाती है।

एक क्लस्टर की प्रतिकृति कई लाभ प्रदान करती है जब इसका सही तरीके से उपयोग किया जाता है और क्लस्टर के साथ बातचीत करने के लिए आने वाले एपीआई तक आसान पहुंच होती है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:सीरियल बनाम पहचान

  2. सभी तालिकाओं के लिए अनुक्रम आईडी पोस्टग्रेएसक्यूएल को बल्क अपडेट कैसे करें

  3. भौतिक पथ के साथ पेड़ को छांटना?

  4. पोस्टग्रेएसक्यूएल में एसयूएम () फ़ंक्शन

  5. PostgreSQL 9.3 . में एक्सेल डेटा आयात करें