प्रतिकृति के साथ, आप एक डेटाबेस सर्वर, स्रोत . से डेटा कॉपी करते हैं , दूसरे सर्वर पर, प्रतिकृति . प्रतिकृति एक शक्तिशाली डेटाबेस सुविधा है, जो उच्च उपलब्धता प्रदान करती है और आपदा वसूली का समर्थन करती है।
परिचय
आप परीक्षण और रिपोर्टिंग उद्देश्यों के लिए उपयोग करने के लिए प्रतिकृति सर्वर भी बना सकते हैं, उत्पादन ऑनलाइन लेनदेन प्रसंस्करण (ओएलटीपी) डेटाबेस पर भार को कम कर सकते हैं। यह पोस्ट आपको PostgreSQL® में विभिन्न प्रकार की प्रतिकृति और PostgreSQL डेटाबेस की स्ट्रीमिंग प्रतिकृति को लागू करने के लिए आवश्यक चरणों को समझने में मदद करती है।
प्रतिकृति विवरण
अब, पोस्टग्रेएसक्यूएल में प्रतिकृति मोड, मॉडल और प्रतिकृति के प्रकारों को समझने और राइट-फ़ॉरवर्ड लॉगिंग के बारे में जानने का समय आ गया है।
एसिंक्रोनस और सिंक्रोनस मोड
निम्न आरेख PostgreSQL प्रतिकृति के तरीके दिखाता है:
एसिंक्रोनस . में प्रतिकृति, स्रोत सर्वर को प्रतिकृति सर्वर से लेन-देन-पूर्णता पावती के लिए प्रतीक्षा करने की आवश्यकता नहीं है। प्रतिकृति लेनदेन प्रतिकृति सर्वर पर कतारबद्ध है, और प्रसंस्करण पूर्ण होने तक दो सर्वर एक निर्दिष्ट समय के लिए आउट-ऑफ-सिंक रह सकते हैं।
तुल्यकालिक . में मोड प्रतिकृति, स्रोत सर्वर थेरेप्लिका सर्वर, या सर्वर से पावती के लिए प्रतीक्षा करता है, कि प्रत्येक प्रतिकृति लेनदेन आगे बढ़ने से पहले पूरा हो गया है। स्रोत और प्रतिकृति सर्वर दोनों हर समय उपलब्ध होना चाहिए। यदि यह प्रतिकृति से एक लेनदेन-विफल संदेश प्राप्त करता है, तो स्रोत सर्वर उस लेनदेन को वापस ले लेता है। प्रतिकृति के इस मोड में, स्रोत और प्रतिकृति सर्वर हमेशा सिंक में होते हैं। दोष यह है कि यदि कोई प्रतिकृति सर्वर डाउन हो जाता है या लेन-देन पूरा नहीं कर पाता है, तो स्रोत सर्वर रुकी हुई स्थिति में चला जाता है।
सिंगल- और मल्टी-सोर्स प्रतिकृति मॉडल
एकल स्रोत . के साथ प्रतिकृति, आपके पास केवल एक स्रोत सर्वर और एक या अधिक प्रतिकृति सर्वर हैं। स्रोत प्रतिकृति लेनदेन को सभी प्रतिकृतियों को भेजता है।
प्रतिकृति सर्वर केवल स्रोत सर्वर से परिवर्तन स्वीकार कर सकते हैं। यदि वे एक गैर-स्रोत सर्वर से परिवर्तन प्राप्त करते हैं, तो प्रतिकृतियां उन लेन-देन को वापस स्रोत पर नहीं दोहराती हैं।
बहु-स्रोत . में प्रतिकृति, आपके पास एक से अधिक स्रोत सर्वर हैं। यदि एक स्रोत डेटाबेस पर कोई तालिका पंक्ति बदल जाती है, तो वह स्रोत सर्वर अन्य स्रोत सर्वर पर समकक्ष तालिका पंक्तियों में परिवर्तनों की प्रतिकृति बनाता है। इस मॉडल के सफल होने के लिए, आपको डुप्लीकेट प्राथमिक कुंजियों और अन्य मुद्दों को रोकने के लिए संघर्ष समाधान योजनाओं को नियोजित करने की आवश्यकता है।
प्रतिकृति के प्रकार
प्रतिकृति तीन प्रकार की होती है:
- स्ट्रीमिंग प्रतिकृति :PostgreSQL ने इस प्रकार की प्रतिकृति को संस्करण 9 और बाद में उपलब्ध कराया। केवल-चलाने वाली चुनिंदा क्वेरी के लिए प्रतिकृतियां उपलब्ध हैं। इस प्रकार के लिए प्राथमिक आवश्यकता स्रोत है और प्रतिकृति डेटाबेस एक ही प्रमुख संस्करण होना चाहिए।
- कैस्केडिंग प्रतिकृति :PostgreSQL 9.2 में पेश किया गया, उसके प्रकार की प्रतिकृति आपको सीधे स्रोत सर्वर के बजाय स्टैंडबाय सर्वर से दोहराने की अनुमति देती है। यह स्रोत सर्वर पर लोड को कम कर सकता है।
- तार्किक प्रतिकृति :आप इस प्रकार का उपयोग किसी चयनित डेटा सेट या डेटाबेस ऑब्जेक्ट को दोहराने के लिए या PostgreSQL के विभिन्न प्रमुख संस्करणों के बीच दोहराने के लिए कर सकते हैं। इनलॉजिकल प्रतिकृति, आप लिखने के लिए स्टैंडबाय सर्वर का उपयोग कर सकते हैं, लेकिन इसकी कुछ सीमाएं हैं। यह ट्रंकेट, बड़ी वस्तुओं जैसे (लॉब, ब्लॉब, क्लोब), सीक्वेंस, स्कीमा और डीडीएल की नकल नहीं कर सकता।
राइट-फॉरवर्ड लॉगिंग
स्ट्रीमिंग प्रतिकृति का उपयोग शुरू करने से पहले, आपको राइट-फ़ॉरवर्ड लॉगिंग (WAL) को समझना चाहिए और यह कैसे काम करता है।
PostgreSQL में, सिस्टम पहले डेटाबेस में किए गए किसी भी परिवर्तन को डेटा फ़ाइल में सहेजने से पहले एक लॉग फ़ाइल में सहेजता है, और इन परिवर्तनों को WAL रिकॉर्ड कहा जाता है। प्रत्येक WAL रिकॉर्ड में एक अद्वितीय संख्या होती है जिसे लॉग अनुक्रम संख्या (LSN) कहा जाता है।
PostgreSQL में स्ट्रीमिंग प्रतिकृति के साथ, प्रतिकृति डेटाबेस सर्वर स्रोत डेटाबेस सर्वर पर परिवर्तनों को दोहराने के लिए WAL फ़ाइल का उपयोग करता है।
तीन अनिवार्य प्रक्रियाएं PostgreSQLडेटाबेस पर प्रतिकृति स्ट्रीमिंग में महत्वपूर्ण भूमिका निभाती हैं:
- वाल प्रेषक
- वाल रिसीवर
- स्टार्टअप
WAL प्रेषक प्रक्रिया स्रोत सर्वर पर चलती है, जबकि WAL रिसीवर और स्टार्टअप प्रक्रिया प्रतिकृति सर्वर पर चलती है। जब आप प्रतिकृति प्रारंभ करते हैं, तो निम्न घटनाएं होती हैं:
- WAL रिसीवर प्रक्रिया LSN को तब तक भेजती है जब तक कि प्रतिकृति WAL डेटा को मास्टर को फिर से न चला दे।
- स्रोत पर WAL प्रेषक प्रक्रिया तब तक WAL डेटा को प्रतिकृति में भेजती है जब तक कि वह WAL रिसीवर द्वारा भेजे गए नवीनतम LSN तक नहीं पहुंच जाता।
- इसके बाद, वाल रिसीवर वाल प्रेषक द्वारा वाल सेगमेंट में भेजे गए वाल डेटा को लिखता है।
- प्रतिकृति पर स्टार्टअप प्रक्रिया एक WAL खंड में लिखे गए डेटा को फिर से चलाती है।
- आखिरकार, स्ट्रीमिंग प्रतिकृति शुरू होती है।
टेस्ट केस
यहाँ एक स्रोत और onereplica के बीच PostgreSQL में स्ट्रीमिंग प्रतिकृति स्थापित करने के चरण दिए गए हैं:
एक कदम
सबसे पहले, हमें यह सुनिश्चित करने की आवश्यकता है कि स्रोत और प्रतिकृति सर्वर दोनों में पासवर्ड रहित एसएसएच प्रमाणीकरण कॉन्फ़िगर किया गया है। यदि नहीं, तो हमें ssh-keygen
. का उपयोग करके इसे कॉन्फ़िगर करने की आवश्यकता है ।
पासवर्ड रहित SSH कॉन्फ़िगरेशन के बारे में जानने के लिए, देखेंhttps://linuxize.com/post/how-to-setup-passwordless-ssh-login/।
Source node 192.168.24.28
Replica node 192.168.24.29
Username `postgres` on both source and replica.
दूसरा चरण
फ़ायरवॉल को रोकने के लिए दोनों सर्वरों पर निम्न कमांड चलाएँ:
$ 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/संग्रह/ बनाएं संग्रह निर्देशिका अगर यह मौजूद नहीं है।
-
परिवर्तनों को दर्शाने के लिए सर्वर को पुनरारंभ करें।
चरण चार
प्रतिकृति सर्वर पर:
-
डेटा निर्देशिका पर जाएँ और सेवा बंद करें:
$ /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
निष्कर्ष
यह पोस्ट प्रतिकृति के प्रकार और स्ट्रीमिंग प्रतिकृति सेट करने के चरणों की व्याख्या करता है। प्राथमिक सर्वर को लोड-ऑफ करने के लिए आप आमतौर पर इसका उपयोग (विशेषकर एनालिटिक्स में) केवल-पढ़ने के लिए प्रतिकृति प्रदान करने के लिए करते हैं।
यदि आपको उच्च उपलब्धता वातावरण की आवश्यकता है या प्राथमिक डाउन होने पर हॉटस्टैंडबाय सर्वर पर फेलओवर की आवश्यकता है तो यह भी सहायक होता है।
हमारी डेटा सेवाओं के बारे में अधिक जानें।
कोई भी टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप हमारे साथ बातचीत भी शुरू कर सकते हैं।