प्रतिकृति के साथ, आप एक डेटाबेस सर्वर, स्रोत, से दूसरे सर्वर, प्रतिकृति में डेटा कॉपी करते हैं। प्रतिकृति एक शक्तिशाली डेटाबेस सुविधा है, जो उच्च उपलब्धता प्रदान करती है और डिजास्टर रिकवरी का समर्थन करती है।
परिचय
आप परीक्षण और रिपोर्टिंग उद्देश्यों के लिए प्रतिकृति सर्वर भी बना सकते हैं, जिससे उत्पादन ऑनलाइन ट्रांजैक्शनल प्रोसेसिंग (OLTP) डेटाबेस पर भार कम होता है। यह पोस्ट आपको PostgreSQL® में प्रतिकृति के विभिन्न प्रकारों और PostgreSQL डेटाबेस की स्ट्रीमिंग प्रतिकृति को लागू करने के लिए आवश्यक चरणों को समझने में मदद करता है।
प्रतिकृति विवरण
अब, PostgreSQL में प्रतिकृति मोड, मॉडल, और प्रकारों के बारे में समझने और राइट-अहेड लॉगिंग के बारे में जानने का समय है।
एसिंक्रोनस और सिंक्रोनस मोड
निम्न आरेख PostgreSQL प्रतिकृति के मोड दिखाता है:
एसिंक्रोनस प्रतिकृति में, स्रोत सर्वर को प्रतिकृति सर्वर से लेनदेन-पूर्ण पावती की प्रतीक्षा करने की आवश्यकता नहीं होती है। प्रतिकृति लेनदेन प्रतिकृति सर्वर पर कतारबद्ध होते हैं, और दोनों सर्वर प्रसंस्करण पूरा होने तक निर्दिष्ट समय के लिए आउट-ऑफ-सिंक रह सकते हैं।
सिंक्रोनस मोड प्रतिकृति में, स्रोत सर्वर प्रतिकृति सर्वर, या सर्वरों, से पावती की प्रतीक्षा करता है कि प्रत्येक प्रतिकृति लेनदेन आगे बढ़ने से पहले पूरा हो गया है। दोनों स्रोत और प्रतिकृति सर्वर हर समय उपलब्ध होने चाहिए। यदि यह प्रतिकृति से लेनदेन-विफल संदेश प्राप्त करता है, तो स्रोत सर्वर उस लेनदेन को रोल बैक करता है। प्रतिकृति के इस मोड में, स्रोत और प्रतिकृति सर्वर हमेशा सिंक में होते हैं। खामी यह है कि यदि कोई प्रतिकृति सर्वर डाउन हो जाता है या लेनदेन पूरा नहीं कर सकता, तो स्रोत सर्वर हैंग स्थिति में चला जाता है।
सिंगल- और मल्टी-सोर्स प्रतिकृति मॉडल
सिंगल-सोर्स प्रतिकृति के साथ, आपके पास केवल एक स्रोत सर्वर और एक या अधिक प्रतिकृति सर्वर होते हैं। स्रोत सभी प्रतिकृति को प्रतिकृति लेनदेन भेजता है।
प्रतिकृति सर्वर केवल स्रोत सर्वर से परिवर्तन स्वीकार कर सकते हैं। यदि वे गैर-स्रोत सर्वर से परिवर्तन प्राप्त करते हैं, तो प्रतिकृति उन लेनदेन को वापस स्रोत पर प्रतिकृति नहीं करते हैं।
मल्टी-सोर्स प्रतिकृति में, आपके पास एक से अधिक स्रोत सर्वर होते हैं। यदि एक स्रोत डेटाबेस पर एक टेबल पंक्ति बदलती है, तो वह स्रोत सर्वर अन्य स्रोत सर्वरों पर समकक्ष टेबल पंक्तियों में परिवर्तनों को दोहराता है। इस मॉडल के सफल होने के लिए, आपको डुप्लिकेट प्राथमिक कुंजी और अन्य मुद्दों को रोकने के लिए संघर्ष समाधान योजनाओं को नियोजित करने की आवश्यकता होती है।
प्रतिकृति के प्रकार
प्रतिकृति के तीन प्रकार हैं:
- स्ट्रीमिंग प्रतिकृति: PostgreSQL ने इस प्रकार की प्रतिकृति को संस्करण 9 और बाद में उपलब्ध कराया। प्रतिकृति केवल-चयन क्वेरी के लिए उपलब्ध हैं। इस प्रकार के लिए प्राथमिक आवश्यकता यह है कि स्रोत और प्रतिकृति डेटाबेस एक ही प्रमुख संस्करण के होने चाहिए।
- कैस्केडिंग प्रतिकृति: PostgreSQL 9.2 में पेश किया गया, इस प्रकार की प्रतिकृति आपको स्रोत सर्वर से सीधे प्रतिकृति के बजाय स्टैंडबाय सर्वर से प्रतिकृति बनाने की अनुमति देती है। यह स्रोत सर्वर पर भार कम कर सकता है।
- लॉजिकल प्रतिकृति: आप इस प्रकार का उपयोग चयनित डेटा सेट या डेटाबेस ऑब्जेक्ट को दोहराने के लिए या PostgreSQL के विभिन्न प्रमुख संस्करणों के बीच प्रतिकृति के लिए कर सकते हैं। लॉजिकल प्रतिकृति में, आप स्टैंडबाय सर्वर का उपयोग लेखन के लिए कर सकते हैं, लेकिन इसकी कुछ सीमाएं हैं। यह ट्रंकेट, बड़े ऑब्जेक्ट जैसे (lob, blob, clob), सीक्वेंस, स्कीमा, और DDL को दोहरा नहीं सकता।
राइट-अहेड लॉगिंग
इससे पहले कि आप स्ट्रीमिंग प्रतिकृति का उपयोग शुरू करें, आपको राइट-अहेड लॉगिंग (WAL) और यह कैसे काम करता है, को समझना चाहिए।
PostgreSQL में, सिस्टम पहले डेटाबेस में किए गए किसी भी परिवर्तन को डेटा फ़ाइल में सहेजने से पहले एक लॉग फ़ाइल में सहेजता है, और इन परिवर्तनों को WAL रिकॉर्ड कहा जाता है। प्रत्येक WAL रिकॉर्ड का एक अद्वितीय संख्या होती है जिसे लॉग सीक्वेंस नंबर (LSN) कहा जाता है।
PostgreSQL में स्ट्रीमिंग प्रतिकृति के साथ, प्रतिकृति डेटाबेस सर्वर स्रोत डेटाबेस सर्वर पर परिवर्तनों को दोहराने के लिए WAL फ़ाइल का उपयोग करता है।
PostgreSQL डेटाबेस पर स्ट्रीमिंग प्रतिकृति में महत्वपूर्ण भूमिका निभाने वाली तीन अनिवार्य प्रक्रियाएं हैं:
- WAL सेंडर
- WAL रिसीवर
- स्टार्टअप
WAL सेंडर प्रक्रिया स्रोत सर्वर पर चलती है, जबकि WAL रिसीवर और स्टार्टअप प्रक्रियाएं प्रतिकृति सर्वर पर चलती हैं। जब आप प्रतिकृति शुरू करते हैं, तो निम्नलिखित घटनाएं होती हैं:
- एक WAL रिसीवर प्रक्रिया LSN भेजती है जब तक कि प्रतिकृति WAL डेटा को मास्टर पर दोबारा नहीं चलाती।
- स्रोत पर WAL सेंडर प्रक्रिया तब WAL डेटा को प्रतिकृति को भेजती है जब तक कि यह WAL रिसीवर द्वारा भेजे गए नवीनतम LSN तक नहीं पहुंच जाता।
- अगला, WAL रिसीवर WAL सेंडर द्वारा भेजे गए WAL डेटा को WAL सेगमेंट में लिखता है।
- प्रतिकृति पर स्टार्टअप प्रक्रिया WAL सेगमेंट में लिखे गए डेटा को दोबारा चलाती है।
- अंत में, स्ट्रीमिंग प्रतिकृति शुरू होती है।
टेस्ट केस
स्रोत और एक प्रतिकृति के बीच PostgreSQL में स्ट्रीमिंग प्रतिकृति सेट अप करने के चरण यहां दिए गए हैं:
चरण एक
सबसे पहले, हमें यह सुनिश्चित करने की आवश्यकता है कि दोनों स्रोत और प्रतिकृति सर्वरों में पासवर्ड रहित SSH प्रमाणीकरण कॉन्फ़िगर किया गया है। यदि नहीं, तो हमें ssh-keygen का उपयोग करके इसे कॉन्फ़िगर करने की आवश्यकता है।
पासवर्ड रहित SSH कॉन्फ़िगरेशन के बारे में जानने के लिए, https://linuxize.com/post/how-to-setup-passwordless-ssh-login/ देखें।
स्रोत नोड 192.168.24.28 प्रतिकृति नोड 192.168.24.29
उपयोगकर्ता नाम `postgres` दोनों स्रोत और प्रतिकृति पर।
चरण दो
दोनों सर्वरों पर फ़ायरवॉल रोकने के लिए निम्नलिखित कमांड चलाएं:
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
चरण तीन
-
स्रोत सर्वर पर, डेटा निर्देशिका पर जाएं:
cd /var/lib/pgsql/11/data -
postgresql.conf फ़ाइल संपादित करें और निम्नलिखित परिवर्तन करें:
archive_mode = on archive_command = 'cp %p /var/lib/pgsql/archive/%f' max_wall_senders = 5 wal_keep_segment =32 wal_level = replica listen_addresses = '*' -
pg_hba.conf में प्रतिकृति सर्वर IP पता प्रविष्टि जोड़ें:
host postgres postgres (ip_address)192.168.24.29/32 trust host replication postgres (ip_address)192.168.24.29/32 trust -
pg_hba.conf में प्रत्येक परिवर्तन के लिए, सेवा रीलोड करें:
$ /usr/local/pgsql_11/bin/pg_ctl -D /var/lib/pgsql/11/ reload -
यदि /var/lib/pgsql/archive/ आर्काइव निर्देशिका मौजूद नहीं है तो बनाएं।
-
परिवर्तनों को प्रतिबिंबित करने के लिए सर्वर को पुनरारंभ करें।
चरण चार
प्रतिकृति सर्वर पर:
-
डेटा निर्देशिका पर जाएं और सेवा बंद करें:
$ /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ stop -
प्रतिकृति पर डेटा निर्देशिका से सब कुछ हटाएं और निम्नलिखित कमांड का उपयोग करके स्रोत से कनेक्ट करने का प्रयास करें:
$ /usr/pgsql-11/bin/psql -h 192.168.24.28 -
यदि यह काम करता है, तो प्रतिकृति से बेस बैकअप शुरू करें:
$ cd /var/lib/pgsql/11/data $ /usr/pgsql-11/bin/pg_basebackup -D /var/lib/pgsql/11/data/ -X fetch -h 192.168.24.28 -R -P
ये कमांड स्रोत डेटाबेस के डेटा निर्देशिका से सभी डेटा को प्रतिकृति डेटा निर्देशिका में कॉपी करते हैं और recovery.conf फ़ाइल बनाते हैं।
चरण पांच
बेस बैकअप पूरा होने के बाद, आपको recovery.conf फ़ाइलों की जांच करने की आवश्यकता है। डेटा निर्देशिका में recovery.conf फ़ाइल वाला कोई भी सर्वर एक प्रतिकृति सर्वर है और इसमें स्रोत सर्वर की जानकारी होती है। निम्नलिखित संशोधन करें:
Standby_mode = 'on'
Primary_conninfo = 'user=postgres host=192.168.24.28 port=5432'
फ़ाइल निम्नानुसार दिखाई देनी चाहिए:
$ Vi recovery.conf
Standby_mode = 'on'
Primary_conninfo = 'user=postgres passfile=''/home/postgres/.pgpass'' host=192.168.24.28 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
चरण छह
अब सर्वर शुरू करें और परिवर्तनों को मान्य करें:
-
स्रोत में लॉग इन करें:
/usr/local/pgsql_11/bin/psql Postgres=# Postgres=# Select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------ pid | 1934 usesysid | 26712 usename | postgres application_name | walreceiver client_addr | 192.168.24.29 client_hostname | client_port | 52143 backend_start | 2020-11-07 11:30:31.035614-05 backend_xmin | state | streaming sent_lsn | 0/50000E34 write_lsn | 0/50000E34 flush_lsn | 0/50000E34 replay_lsn | 0/50000E34 write_lag | flush_lag | replay_lag | sync_priority | 0 sync_state | async -
प्रतिकृति में लॉग इन करें:
/usr/local/pgsql_11/bin/psql Postgres=# Postgres=# Select * from pg_is_in_recovery(); Pg_is_in_recovery ---------------------------------- t -
स्रोत से OS-स्तरीय कमांड से जांचें:
$ ps -ef|grep sender postgres 1934 1718 0 11:31 ? 00:00:00 postgres: wal sender process replicator 192.168.24.29(52143) streaming 0/50000E34 -
प्रतिकृति से OS-स्तरीय कमांड से जांचें:
$ ps -ef|grep receiver postgres 1358 1748 0 11:31 ? 00:00:04 postgres: wal receiver process streaming 0/50000E34सेंडर और रिसीवर लेनदेन समान होने चाहिए, और प्रतिकृति हमेशा रीड-ओनली मोड में होती है।
-
(वैकल्पिक) डिफ़ॉल्ट रूप से, प्रतिकृति एसिंक्रोनस मोड में है। सिंक्रोनस प्रतिकृति में बदलने के लिए, स्रोत सर्वर पर जाएं और postgresql.conf में निम्नलिखित परिवर्तन करें:
synchronous_standby_names='*' inफिर, सेवाओं को पुनरारंभ करें:
$ /usr/local/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/ restart
निष्कर्ष
यह पोस्ट प्रतिकृति के प्रकारों और स्ट्रीमिंग प्रतिकृति सेट अप करने के चरणों की व्याख्या करता है। आप आमतौर पर इसका उपयोग (विशेष रूप से विश्लेषण में) प्राथमिक सर्वर से भार हटाने के लिए रीड-ओनली प्रतिकृति प्रदान करने के लिए करते हैं।
यह तब भी उपयोगी होता है जब आपको उच्च उपलब्धता वातावरण की आवश्यकता होती है या प्राथमिक डाउन होने पर हॉट स्टैंडबाय सर्वर पर फेलओवर करने के लिए।
हमारी डेटा सेवाओं के बारे में अधिक जानें।
कोई टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप हमसे बातचीत भी शुरू कर सकते हैं।