PostgreSQL का उपयोग करने वाली दुनिया भर में लगभग हर कंपनी के लिए उच्च उपलब्धता एक आवश्यकता है यह सर्वविदित है कि PostgreSQL प्रतिकृति विधि के रूप में स्ट्रीमिंग प्रतिकृति का उपयोग करता है। PostgreSQL स्ट्रीमिंग प्रतिकृति डिफ़ॉल्ट रूप से अतुल्यकालिक है, इसलिए प्राथमिक नोड में कुछ लेनदेन करना संभव है जिन्हें अभी तक स्टैंडबाय सर्वर पर दोहराया नहीं गया है। इसका मतलब है कि कुछ संभावित डेटा हानि की संभावना है।
प्रतिबद्ध प्रक्रिया में यह विलंब बहुत छोटा माना जाता है... यदि स्टैंडबाय सर्वर लोड को बनाए रखने के लिए पर्याप्त शक्तिशाली है। यदि कंपनी में यह छोटा डेटा हानि जोखिम स्वीकार्य नहीं है, तो आप डिफ़ॉल्ट के बजाय सिंक्रोनस प्रतिकृति का भी उपयोग कर सकते हैं।
तुल्यकालिक प्रतिकृति में, एक लिखित लेन-देन की प्रत्येक प्रतिबद्धता तब तक प्रतीक्षा करेगी जब तक यह पुष्टि नहीं हो जाती कि प्रतिबद्धता प्राथमिक और स्टैंडबाय सर्वर दोनों की डिस्क पर राइट-फॉरवर्ड लॉग पर लिखी गई है।
यह विधि डेटा हानि की संभावना को कम करती है। डेटा हानि होने के लिए आपको एक ही समय में विफल होने के लिए प्राथमिक और स्टैंडबाय दोनों की आवश्यकता होगी।
इस पद्धति का नुकसान सभी तुल्यकालिक विधियों के लिए समान है क्योंकि इस पद्धति के साथ प्रत्येक लेखन लेनदेन के लिए प्रतिक्रिया समय बढ़ जाता है। यह तब तक प्रतीक्षा करने की आवश्यकता के कारण है जब तक कि लेन-देन किए जाने की सभी पुष्टि नहीं हो जाती। सौभाग्य से, केवल-पढ़ने के लिए लेनदेन इससे प्रभावित नहीं होंगे लेकिन; केवल लेन-देन लिखें।
इस ब्लॉग में, आप आपको दिखाते हैं कि कैसे एक PostgreSQL क्लस्टर को खरोंच से स्थापित किया जाए, एसिंक्रोनस प्रतिकृति (डिफ़ॉल्ट) को एक सिंक्रोनस में परिवर्तित किया जाए। अगर प्रतिक्रिया समय स्वीकार्य नहीं है तो मैं आपको रोलबैक करने का तरीका भी दिखाऊंगा क्योंकि आप आसानी से पिछली स्थिति में वापस जा सकते हैं। आप देखेंगे कि पूरी प्रक्रिया के लिए केवल एक टूल का उपयोग करके ClusterControl का उपयोग करके आसानी से PostgreSQL सिंक्रोनस प्रतिकृति को कैसे परिनियोजित, कॉन्फ़िगर और मॉनिटर किया जाए।
एक PostgreSQL क्लस्टर स्थापित करना
आइए एक async PostgreSQL प्रतिकृति को स्थापित और कॉन्फ़िगर करना शुरू करते हैं, जो कि PostgreSQL क्लस्टर में उपयोग किया जाने वाला सामान्य प्रतिकृति मोड है। हम CentOS 7 पर PostgreSQL 11 का उपयोग करेंगे।
पोस्टग्रेएसक्यूएल इंस्टालेशन
PostgreSQL आधिकारिक स्थापना मार्गदर्शिका के बाद, यह कार्य बहुत आसान है।
सबसे पहले, रिपॉजिटरी स्थापित करें:
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
PostgreSQL क्लाइंट और सर्वर पैकेज स्थापित करें:
$ yum install postgresql11 postgresql11-server
डेटाबेस को प्रारंभ करें:
$ /usr/pgsql-11/bin/postgresql-11-setup initdb
$ systemctl enable postgresql-11
$ systemctl start postgresql-11
स्टैंडबाय नोड पर, आप अंतिम कमांड से बच सकते हैं (डेटाबेस सेवा शुरू करें) क्योंकि आप स्ट्रीमिंग प्रतिकृति बनाने के लिए बाइनरी बैकअप को पुनर्स्थापित करेंगे।
अब, आइए एक एसिंक्रोनस PostgreSQL प्रतिकृति के लिए आवश्यक कॉन्फ़िगरेशन देखें।
एसिंक्रोनस पोस्टग्रेएसक्यूएल प्रतिकृति को कॉन्फ़िगर करना
प्राथमिक नोड सेटअप
PostgreSQL प्राथमिक नोड में, आपको Async प्रतिकृति बनाने के लिए निम्नलिखित बुनियादी कॉन्फ़िगरेशन का उपयोग करना चाहिए। जिन फ़ाइलों को संशोधित किया जाएगा वे हैं postgresql.conf और pg_hba.conf। सामान्य तौर पर, वे डेटा निर्देशिका (/var/lib/pgsql/11/data/) में होते हैं, लेकिन आप डेटाबेस की ओर से इसकी पुष्टि कर सकते हैं:
postgres=# SELECT setting FROM pg_settings WHERE name = 'data_directory';
setting
------------------------
/var/lib/pgsql/11/data
(1 row)
Postgresql.conf
postgresql.conf कॉन्फ़िगरेशन फ़ाइल में निम्न पैरामीटर बदलें या जोड़ें।
यहां आपको आईपी पता जोड़ना होगा जहां पर सुनना है। डिफ़ॉल्ट मान 'लोकलहोस्ट' है, और इस उदाहरण के लिए, हम सर्वर में सभी आईपी पतों के लिए '*' का उपयोग करेंगे।
listen_addresses = '*'
सर्वर पोर्ट सेट करें जहां पर सुनना है। डिफ़ॉल्ट रूप से 5432.
port = 5432
निर्धारित करें कि वाल को कितनी जानकारी लिखी गई है। संभावित मान न्यूनतम, प्रतिकृति या तार्किक हैं। hot_standby मान को प्रतिकृति में मैप किया जाता है और इसका उपयोग पिछले संस्करणों के साथ संगतता बनाए रखने के लिए किया जाता है।
wal_level = hot_standby
वाल्सेंडर प्रक्रियाओं की अधिकतम संख्या सेट करें, जो स्टैंडबाय सर्वर के साथ कनेक्शन का प्रबंधन करती हैं।
max_wal_senders = 16
pg_wal निर्देशिका में रखी जाने वाली WAL फ़ाइलों की न्यूनतम मात्रा सेट करें।
wal_keep_segments = 32
इन मापदंडों को बदलने के लिए एक डेटाबेस सेवा पुनरारंभ की आवश्यकता है।
$ systemctl restart postgresql-11
Pg_hba.conf
pg_hba.conf कॉन्फ़िगरेशन फ़ाइल में निम्न पैरामीटर बदलें या जोड़ें।
# TYPE DATABASE USER ADDRESS METHOD
host replication replication_user IP_STANDBY_NODE/32 md5
host replication replication_user IP_PRIMARY_NODE/32 md5
जैसा कि आप देख सकते हैं, यहां आपको उपयोगकर्ता पहुंच अनुमति जोड़ने की आवश्यकता है। पहला कॉलम कनेक्शन प्रकार है, जो होस्ट या स्थानीय हो सकता है। फिर, आपको डेटाबेस (प्रतिकृति), उपयोगकर्ता, स्रोत आईपी पता और प्रमाणीकरण विधि निर्दिष्ट करने की आवश्यकता है। इस फ़ाइल को बदलने के लिए डेटाबेस सेवा को पुनः लोड करना आवश्यक है।
$ systemctl reload postgresql-11
आपको इस कॉन्फ़िगरेशन को प्राथमिक और स्टैंडबाय दोनों नोड्स में जोड़ना चाहिए, क्योंकि विफलता के मामले में स्टैंडबाय नोड को मास्टर में पदोन्नत करने पर आपको इसकी आवश्यकता होगी।
अब, आपको एक प्रतिकृति उपयोगकर्ता बनाना होगा।
प्रतिकृति भूमिका
भूमिका (उपयोगकर्ता) के पास स्ट्रीमिंग प्रतिकृति में इसका उपयोग करने के लिए प्रतिकृति विशेषाधिकार होना चाहिए।
postgres=# CREATE ROLE replication_user WITH LOGIN PASSWORD 'PASSWORD' REPLICATION;
CREATE ROLE
संबंधित फ़ाइलों और उपयोगकर्ता निर्माण को कॉन्फ़िगर करने के बाद, आपको प्राथमिक नोड से एक सुसंगत बैकअप बनाने और इसे स्टैंडबाय नोड पर पुनर्स्थापित करने की आवश्यकता है।
स्टैंडबाय नोड सेटअप
स्टैंडबाय नोड पर, /var/lib/pgsql/11/ निर्देशिका पर जाएं और वर्तमान डेटादिर को स्थानांतरित या हटा दें:
$ cd /var/lib/pgsql/11/
$ mv data data.bk
फिर, वर्तमान प्राथमिक डेटादिर प्राप्त करने के लिए pg_basebackup कमांड चलाएँ और सही स्वामी (पोस्टग्रेज़) असाइन करें:
$ pg_basebackup -h 192.168.100.145 -D /var/lib/pgsql/11/data/ -P -U replication_user --wal-method=stream
$ chown -R postgres.postgres data
अब, आपको Async प्रतिकृति बनाने के लिए निम्न बुनियादी कॉन्फ़िगरेशन का उपयोग करना चाहिए। जिस फ़ाइल को संशोधित किया जाएगा वह postgresql.conf है, और आपको एक नई पुनर्प्राप्ति.conf फ़ाइल बनाने की आवश्यकता है। दोनों /var/lib/pgsql/11/ में स्थित होंगे।
Recovery.conf
निर्दिष्ट करें कि यह सर्वर एक स्टैंडबाय सर्वर होगा। यदि यह चालू है, तो सर्वर संग्रहीत WAL के अंत तक पहुंचने पर नए WAL खंड प्राप्त करके पुनर्प्राप्त करना जारी रखेगा।
standby_mode = 'on'
एक कनेक्शन स्ट्रिंग निर्दिष्ट करें जिसका उपयोग प्राथमिक नोड से कनेक्ट करने के लिए स्टैंडबाय सर्वर के लिए किया जाना है।
primary_conninfo = 'host=IP_PRIMARY_NODE port=5432 user=replication_user password=PASSWORD'
किसी विशेष समयरेखा में पुनर्प्राप्ति निर्दिष्ट करें। डिफ़ॉल्ट उसी समयरेखा के साथ पुनर्प्राप्त करना है जो आधार बैकअप लेते समय चालू था। इसे "नवीनतम" पर सेट करना संग्रह में मिली नवीनतम टाइमलाइन पर वापस आ जाता है।
recovery_target_timeline = 'latest'
एक ट्रिगर फ़ाइल निर्दिष्ट करें जिसकी उपस्थिति स्टैंडबाय में पुनर्प्राप्ति समाप्त करती है।
trigger_file = '/tmp/failover_5432.trigger'
Postgresql.conf
postgresql.conf कॉन्फ़िगरेशन फ़ाइल में निम्न पैरामीटर बदलें या जोड़ें।
निर्धारित करें कि वाल को कितनी जानकारी लिखी गई है। संभावित मान न्यूनतम, प्रतिकृति या तार्किक हैं। hot_standby मान को प्रतिकृति में मैप किया जाता है और इसका उपयोग पिछले संस्करणों के साथ संगतता बनाए रखने के लिए किया जाता है। इस मान को बदलने के लिए एक सेवा पुनरारंभ की आवश्यकता है।
wal_level = hot_standby
पुनर्प्राप्ति के दौरान प्रश्नों को अनुमति दें। इस मान को बदलने के लिए एक सेवा पुनरारंभ की आवश्यकता है।
hot_standby = on
स्टैंडबाय नोड प्रारंभ करना
अब आपके पास सभी आवश्यक कॉन्फ़िगरेशन हो गए हैं, आपको बस स्टैंडबाय नोड पर डेटाबेस सेवा प्रारंभ करने की आवश्यकता है।
$ systemctl start postgresql-11
और /var/lib/pgsql/11/data/log/ में डेटाबेस लॉग्स की जांच करें। आपके पास कुछ इस तरह होना चाहिए:
2019-11-18 20:23:57.440 UTC [1131] LOG: entering standby mode
2019-11-18 20:23:57.447 UTC [1131] LOG: redo starts at 0/3000028
2019-11-18 20:23:57.449 UTC [1131] LOG: consistent recovery state reached at 0/30000F8
2019-11-18 20:23:57.449 UTC [1129] LOG: database system is ready to accept read only connections
2019-11-18 20:23:57.457 UTC [1135] LOG: started streaming WAL from primary at 0/4000000 on timeline 1
आप निम्न क्वेरी चलाकर प्राथमिक नोड में प्रतिकृति स्थिति भी देख सकते हैं:
postgres=# SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
pid | usename | application_name | state | sync_state
------+------------------+------------------+-----------+------------
1467 | replication_user | walreceiver | streaming | async
(1 row)
जैसा कि आप देख सकते हैं, हम एक एसिंक्स प्रतिकृति का उपयोग कर रहे हैं।
एसिंक्रोनस पोस्टग्रेएसक्यूएल प्रतिकृति को सिंक्रोनस प्रतिकृति में परिवर्तित करना
अब, इस async प्रतिकृति को एक सिंक में बदलने का समय आ गया है, और इसके लिए, आपको प्राथमिक और स्टैंडबाय नोड दोनों को कॉन्फ़िगर करने की आवश्यकता होगी।
प्राथमिक नोड
PostgreSQL प्राथमिक नोड में, आपको पिछले async कॉन्फ़िगरेशन के अतिरिक्त इस मूल कॉन्फ़िगरेशन का उपयोग करना चाहिए।
Postgresql.conf
ऐसे स्टैंडबाय सर्वरों की सूची निर्दिष्ट करें जो सिंक्रोनस प्रतिकृति का समर्थन कर सकते हैं। यह स्टैंडबाय सर्वर नाम स्टैंडबाय की रिकवरी.कॉन्फ फाइल में application_name सेटिंग है।
synchronous_standby_names = 'pgsql_0_node_0'synchronous_standby_names = 'pgsql_0_node_0'
निर्दिष्ट करता है कि क्लाइंट को "सफलता" का संकेत देने से पहले लेनदेन प्रतिबद्ध डिस्क पर WAL रिकॉर्ड लिखे जाने की प्रतीक्षा करेगा या नहीं। मान्य मान चालू हैं, Remote_apply, Remote_write, स्थानीय, और बंद। डिफ़ॉल्ट मान चालू है।
synchronous_commit = on
स्टैंडबाय नोड सेटअप
PostgreSQL स्टैंडबाय नोड में, आपको 'application_name मान को Primary_conninfo पैरामीटर में जोड़कर पुनर्प्राप्ति.conf फ़ाइल को बदलने की आवश्यकता है।
Recovery.conf
standby_mode = 'on'
primary_conninfo = 'application_name=pgsql_0_node_0 host=IP_PRIMARY_NODE port=5432 user=replication_user password=PASSWORD'
recovery_target_timeline = 'latest'
trigger_file = '/tmp/failover_5432.trigger'
प्राथमिक और स्टैंडबाय दोनों नोड्स में डेटाबेस सेवा को पुनरारंभ करें:
$ service postgresql-11 restart
अब, आपके पास अपनी सिंक स्ट्रीमिंग प्रतिकृति तैयार और चालू होनी चाहिए:
postgres=# SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
pid | usename | application_name | state | sync_state
------+------------------+------------------+-----------+------------
1561 | replication_user | pgsql_0_node_0 | streaming | sync
(1 row)
सिंक्रोनस से एसिंक्रोनस पोस्टग्रेएसक्यूएल प्रतिकृति में रोलबैक
यदि आपको एसिंक्रोनस PostgreSQL प्रतिकृति पर वापस जाने की आवश्यकता है, तो आपको प्राथमिक नोड पर postgresql.conf फ़ाइल में किए गए परिवर्तनों को रोलबैक करने की आवश्यकता है:
Postgresql.conf
#synchronous_standby_names = 'pgsql_0_node_0'
#synchronous_commit = on
और डेटाबेस सेवा को पुनरारंभ करें।
$ service postgresql-11 restart
तो अब, आपके पास फिर से एसिंक्रोनस प्रतिकृति होनी चाहिए।
postgres=# SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
pid | usename | application_name | state | sync_state
------+------------------+------------------+-----------+------------
1625 | replication_user | pgsql_0_node_0 | streaming | async
(1 row)
ClusterControl का उपयोग करके PostgreSQL सिंक्रोनस प्रतिकृति को कैसे परिनियोजित करें
ClusterControl के साथ आप एक ही कार्य से परिनियोजन, कॉन्फ़िगरेशन और निगरानी कार्यों को एक साथ कर सकते हैं और आप इसे एक ही UI से प्रबंधित करने में सक्षम होंगे।
हम मान लेंगे कि आपके पास ClusterControl स्थापित है और यह SSH के माध्यम से डेटाबेस नोड्स तक पहुंच सकता है। ClusterControl एक्सेस को कॉन्फ़िगर करने के तरीके के बारे में अधिक जानकारी के लिए कृपया हमारे आधिकारिक दस्तावेज़ देखें।
ClusterControl पर जाएं और एक नया PostgreSQL क्लस्टर बनाने के लिए "तैनाती" विकल्प का उपयोग करें।
PostgreSQL का चयन करते समय, आपको उपयोगकर्ता, कुंजी, या पासवर्ड और एक निर्दिष्ट करना होगा SSH द्वारा हमारे सर्वर से कनेक्ट करने के लिए पोर्ट। आपको अपने नए क्लस्टर के लिए एक नाम की भी आवश्यकता है और यदि आप चाहते हैं कि ClusterControl आपके लिए संबंधित सॉफ़्टवेयर और कॉन्फ़िगरेशन स्थापित करे।
SSH एक्सेस जानकारी सेट करने के बाद, आपको एक्सेस करने के लिए डेटा दर्ज करना होगा आपका डेटाबेस। आप यह भी निर्दिष्ट कर सकते हैं कि किस भंडार का उपयोग करना है।
अगले चरण में, आपको अपने सर्वर को उस क्लस्टर में जोड़ना होगा जो आप बनाने जा रहे हैं। अपने सर्वर जोड़ते समय, आप IP या होस्टनाम दर्ज कर सकते हैं।
और अंत में, अंतिम चरण में, आप प्रतिकृति विधि चुन सकते हैं, जो अतुल्यकालिक या तुल्यकालिक प्रतिकृति हो सकती है।
बस। आप ClusterControl गतिविधि अनुभाग में कार्य की स्थिति की निगरानी कर सकते हैं।
और जब यह काम पूरा हो जाएगा, तो आपके पास अपना PostgreSQL सिंक्रोनस क्लस्टर स्थापित होगा, ClusterControl द्वारा कॉन्फ़िगर और मॉनिटर किया गया।
निष्कर्ष
जैसा कि हमने इस ब्लॉग की शुरुआत में उल्लेख किया है, उच्च उपलब्धता सभी कंपनियों के लिए एक आवश्यकता है, इसलिए आपको उपयोग में आने वाली प्रत्येक तकनीक के लिए इसे प्राप्त करने के लिए उपलब्ध विकल्पों को जानना चाहिए। PostgreSQL के लिए, आप इसे लागू करने के सबसे सुरक्षित तरीके के रूप में सिंक्रोनस स्ट्रीमिंग प्रतिकृति का उपयोग कर सकते हैं, लेकिन यह विधि सभी वातावरण और कार्यभार के लिए काम नहीं करती है।
प्रत्येक लेन-देन की पुष्टि की प्रतीक्षा करके उत्पन्न विलंबता से सावधान रहें जो एक उच्च उपलब्धता समाधान के बजाय एक समस्या हो सकती है।