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

PostgreSQL स्ट्रीमिंग प्रतिकृति के साथ शुरुआत करना

इस ब्लॉग पोस्ट में, हम PostgreSQL में स्ट्रीमिंग प्रतिकृति (SR) को सेट करने के बारे में विस्तार से जानते हैं। स्ट्रीमिंग प्रतिकृति आपके पोस्टग्रेएसक्यूएल होस्टिंग में उच्च उपलब्धता प्राप्त करने के लिए मौलिक बिल्डिंग ब्लॉक है, और मास्टर-स्लेव कॉन्फ़िगरेशन चलाकर तैयार की जाती है।

मास्टर-स्लेव शब्दावली

मास्टर/प्राथमिक सर्वर

  • वह सर्वर जो लिख सकता है।
  • इसे रीड/राइट सर्वर भी कहा जाता है।

गुलाम/स्टैंडबाय सर्वर

  • एक सर्वर जहां डेटा को लगातार मास्टर के साथ सिंक में रखा जाता है।
  • बैकअप सर्वर या रेप्लिका भी कहा जाता है।
  • एक गर्म स्टैंडबाय सर्वर वह है जिसे तब तक कनेक्ट नहीं किया जा सकता जब तक कि इसे मास्टर सर्वर बनने के लिए प्रचारित नहीं किया जाता।
  • इसके विपरीत, एक हॉट स्टैंडबाय सर्वर कनेक्शन स्वीकार कर सकता है और केवल-पढ़ने के लिए क्वेरी प्रदान करता है। इस शेष चर्चा के लिए, हम केवल हॉट स्टैंडबाय सर्वर पर ध्यान केंद्रित करेंगे।

डेटा मास्टर सर्वर को लिखा जाता है और स्लेव सर्वरों को प्रचारित किया जाता है। यदि मौजूदा मास्टर सर्वर में कोई समस्या है, तो स्लेव सर्वरों में से एक सिस्टम की उपलब्धता सुनिश्चित करने के लिए कार्यभार संभालेगा और लिखना जारी रखेगा।

WAL शिपिंग-आधारित प्रतिकृति

वाल क्या है?

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

WAL का उपयोग प्रतिकृति के लिए कैसे किया जाता है?

राइट-आगे लॉग रिकॉर्ड का उपयोग डेटाबेस सर्वर के बीच डेटा को सिंक में रखने के लिए किया जाता है। यह दो तरह से हासिल किया जाता है:

फ़ाइल-आधारित लॉग शिपिंग

  • डेटा को सिंक में रखने के लिए WAL लॉग फ़ाइलें मास्टर से स्टैंडबाय सर्वर पर भेज दी जाती हैं।
  • मास्टर सीधे लॉग को स्टैंडबाय सर्वर स्टोरेज में कॉपी कर सकता है या स्टोरेज को स्टैंडबाय सर्वर के साथ साझा कर सकता है।
  • एक WAL लॉग फ़ाइल में 16MB तक डेटा हो सकता है।
  • WAL फ़ाइल उस सीमा तक पहुंचने के बाद ही भेजी जाती है।
  • इससे प्रतिकृति में देरी होगी और यदि मास्टर क्रैश हो जाता है और लॉग संग्रहीत नहीं होते हैं तो डेटा खोने की संभावना भी बढ़ जाती है

स्ट्रीमिंग वाल रिकॉर्ड्स

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

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

उच्च उपलब्धता के लिए PostgreSQL में स्ट्रीमिंग प्रतिकृति कैसे सेट करें ट्वीट करने के लिए क्लिक करें

स्ट्रीमिंग प्रतिकृति कैसे सेट करें?

PostgreSQL में स्ट्रीमिंग प्रतिकृति सेट करना बहुत आसान है। यह मानते हुए कि PostgreSQL पहले से ही सभी सर्वरों पर स्थापित है, आप आरंभ करने के लिए इन चरणों का पालन कर सकते हैं:

मास्टर नोड पर कॉन्फ़िगरेशन

  • इनिटडीबी यूटिलिटी का उपयोग करके मास्टर नोड पर डेटाबेस को इनिशियलाइज़ करें।
  • नीचे दिए गए आदेश को चलाकर प्रतिकृति विशेषाधिकारों के साथ एक भूमिका/उपयोगकर्ता बनाएं। कमांड चलाने के बाद, आप उन्हें psql पर सूचीबद्ध करने के लिए \du चलाकर इसे सत्यापित कर सकते हैं।
    •   उपयोगकर्ता बनाएं प्रतिकृति लॉगिन एन्क्रिप्टेड पासवर्ड '<पासवर्ड>';
  • मास्टर PostgreSQL कॉन्फ़िगरेशन (postgresql.conf) फ़ाइल में स्ट्रीमिंग प्रतिकृति से संबंधित गुण कॉन्फ़िगर करें:
    # संभावित मान हैं प्रतिकृति|न्यूनतम|तार्किक
    wal_level =जब मास्टर के साथ स्टैंडबाय सिंक से बाहर हो जाता है तो pg_rewind क्षमता के लिए प्रतिकृति# आवश्यक है
    wal_log_hints =on# स्टैंडबाय सर्वर से समवर्ती कनेक्शन की अधिकतम संख्या सेट करता है।
    max_wal_senders =3
    # नीचे दिए गए पैरामीटर का उपयोग मास्टर को WAL लॉग्स के # सेगमेंट की न्यूनतम संख्या रखने के लिए कहने के लिए किया जाता है ताकि स्टैंडबाय द्वारा उपभोग किए जाने से पहले उन्हें हटाया न जाए।
    # प्रत्येक सेगमेंट है 16MB
    wal_keep_segments =8
    # नीचे दिया गया पैरामीटर नोड पर केवल पढ़ने के लिए कनेक्शन को सक्षम करता है जब यह
    # स्टैंडबाय भूमिका में होता है। जब सर्वर मास्टर के रूप में चल रहा हो तो इसे अनदेखा कर दिया जाता है।
    hot_standby =पर
  • सर्वर के बीच प्रतिकृति कनेक्शन की अनुमति देने के लिए pg_hba.conf फ़ाइल में प्रतिकृति प्रविष्टि जोड़ें:
    # स्थानीय होस्ट से प्रतिकृति कनेक्शन की अनुमति दें,
    # एक उपयोगकर्ता द्वारा प्रतिकृति विशेषाधिकार के साथ।
  • परिवर्तन प्रभावी होने के लिए मास्टर नोड पर PostgreSQL सेवा को पुनरारंभ करें।

स्टैंडबाय नोड पर कॉन्फ़िगरेशन

  • pg_basebackup उपयोगिता का उपयोग करके मास्टर नोड का आधार बैकअप बनाएं और इसे स्टैंडबाय के लिए एक प्रारंभिक बिंदु के रूप में उपयोग करें।
    # pg_basebackup उपयोगिता के लिए उपयोग किए जाने वाले कुछ विकल्पों की व्याख्या करना
    # -X विकल्प का उपयोग
    # बैकअप में आवश्यक लेन-देन लॉग फ़ाइलें (WAL फ़ाइलें) शामिल करने के लिए किया जाता है। जब आप स्ट्रीम निर्दिष्ट करते हैं, तो यह सर्वर से दूसरा कनेक्शन खोलेगा
    # और बैकअप चलाने के साथ ही लेन-देन लॉग को स्ट्रीम करना शुरू कर देगा।
    # -c चेकपॉइंट विकल्प है। इसे तेज़ पर सेट करने से चेकपॉइंट
    # जल्द ही बन जाएगा।
    # -W डेटाबेस से कनेक्ट करने से पहले
    # एक पासवर्ड के लिए संकेत देने के लिए pg_basebackup को बाध्य करता है।
    pg_baseबैकअप -D  -h -X स्ट्रीम -c तेज़ -U repl_user -W
  • प्रतिकृति कॉन्फ़िगरेशन फ़ाइल बनाएं यदि मौजूद नहीं है (यह स्वचालित रूप से बनाई जाती है यदि -R विकल्प pg_basebackup में प्रदान किया गया है):
    # निर्दिष्ट करता है कि सर्वर को इस रूप में प्रारंभ करना है या नहीं एक स्टैंडबाय। स्ट्रीमिंग प्रतिकृति में,
    # यह पैरामीटर चालू होना चाहिए।
    standby_mode ='चालू'# एक कनेक्शन स्ट्रिंग निर्दिष्ट करता है जिसका उपयोग स्टैंडबाय सर्वर के लिए
    # को प्राथमिक/मास्टर से जोड़ने के लिए किया जाता है।
    primary_conninfo ='होस्ट =<मास्टर_होस्ट> पोर्ट =<पोस्टग्रेस_पोर्ट> उपयोगकर्ता =<प्रतिकृति_उपयोगकर्ता> पासवर्ड =<पासवर्ड> एप्लिकेशन_नाम ="होस्ट_नाम"'# एक विशेष समयरेखा को पुनर्प्राप्त करने के लिए निर्दिष्ट करता है। डिफ़ॉल्ट
    # उसी टाइमलाइन के साथ रिकवर करना है, जो बेस बैकअप लेने के समय वर्तमान थी। स्टैंडबाय सर्वर में उपयोगी है।
    recovery_target_timeline ='नवीनतम'
  • स्टैंडबाय प्रारंभ करें।

स्टैंडबाय कॉन्फ़िगरेशन सभी स्टैंडबाय सर्वरों पर किया जाना चाहिए। एक बार कॉन्फ़िगरेशन हो जाने और स्टैंडबाय शुरू हो जाने के बाद, यह मास्टर से कनेक्ट हो जाएगा और लॉग स्ट्रीमिंग शुरू कर देगा। यह प्रतिकृति को सेटअप करेगा और SQL कथन "चुनें * pg_stat_replication से; चलाकर सत्यापित किया जा सकता है। “.

डिफ़ॉल्ट रूप से, स्ट्रीमिंग प्रतिकृति एसिंक्रोनस होती है। यदि आप इसे तुल्यकालिक बनाना चाहते हैं, तो आप इसे निम्नलिखित मापदंडों का उपयोग करके कॉन्फ़िगर कर सकते हैं:

# num_sync सिंक्रोनस स्टैंडबाय की वह संख्या है जिससे लेन-देन
# उत्तरों के लिए प्रतीक्षा करने की आवश्यकता है।
# स्टैंडबाय_नाम पुनर्प्राप्ति में application_name मान के समान है।conf
# अगर सिंक्रोनस के लिए सभी स्टैंडबाय सर्वरों पर विचार किया जाना है तो '*' सेट करें .
# इस उद्देश्य के लिए एक स्टैंडबाय सर्वर का नाम
# स्टैंडबाय की application_name सेटिंग है, जैसा कि
# स्टैंडबाय के WAL रिसीवर के Primary_conninfo में सेट किया गया है।
सिंक्रोनस_स्टैंडबाय_नाम ='num_sync (स्टैंडबाय_नाम [, ...])'

Synchronous_commit सिंक्रोनस प्रतिकृति के लिए चालू होना चाहिए और यह डिफ़ॉल्ट है। PostgreSQL सिंक्रोनस कमिट के लिए बहुत लचीला विकल्प प्रदान करता है और इसे उपयोगकर्ता/डेटाबेस स्तरों पर कॉन्फ़िगर किया जा सकता है। मान्य मान इस प्रकार हैं:

  • बंद - लेन-देन के रिकॉर्ड को वास्तव में उस नोड पर WAL लॉग फ़ाइल में फ़्लश करने से पहले ही ग्राहक को लेन-देन की प्रतिबद्धता स्वीकार कर ली जाती है।
  • स्थानीय -  ग्राहक को लेन-देन की प्रतिबद्धता तभी स्वीकार की जाती है, जब उस नोड पर उस लेनदेन रिकॉर्ड को WAL लॉग फ़ाइल में फ़्लश किया जाता है।
  • Remote_write - सिंक्रोनस_स्टैंडबाय_नाम द्वारा निर्दिष्ट सर्वर (सर्वर) द्वारा पुष्टि किए जाने के बाद ही लेन-देन की प्रतिबद्धता क्लाइंट को स्वीकार की जाती है, यह पुष्टि करता है कि लेनदेन रिकॉर्ड डिस्क कैश में लिखा गया था, लेकिन जरूरी नहीं कि वाल लॉग फ़ाइल में फ्लश होने के बाद।
  • चालू - सिंक्रोनस_स्टैंडबाय_नाम द्वारा निर्दिष्ट सर्वर (सर्वर) द्वारा पुष्टि किए जाने के बाद ही लेन-देन की प्रतिबद्धता क्लाइंट को स्वीकार की जाती है कि लेनदेन रिकॉर्ड WAL लॉग फ़ाइल में फ़्लश हो गया है।
  • Remote_apply - सिंक्रोनस_स्टैंडबाय_नाम द्वारा निर्दिष्ट सर्वर (सर्वर) द्वारा पुष्टि किए जाने के बाद ही लेन-देन की प्रतिबद्धता क्लाइंट को स्वीकार की जाती है, यह पुष्टि करता है कि लेनदेन रिकॉर्ड WAL लॉग फ़ाइल में फ़्लश किया गया है और इसे डेटाबेस पर लागू किया गया है।

सिंक्रोनस_कमिट को सिंक्रोनस प्रतिकृति मोड में बंद या स्थानीय पर सेट करने से यह एसिंक्रोनस की तरह काम करेगा, और आपको बेहतर लेखन प्रदर्शन प्राप्त करने में मदद कर सकता है। हालांकि, इससे स्टैंडबाय सर्वर पर डेटा हानि और पढ़ने में देरी का जोखिम अधिक होगा। यदि रिमोट_एप्ली पर सेट किया जाता है, तो यह स्टैंडबाय सर्वर पर तत्काल डेटा उपलब्धता सुनिश्चित करेगा, लेकिन लेखन प्रदर्शन खराब हो सकता है क्योंकि इसे सभी/उल्लेखित स्टैंडबाय सर्वर पर लागू किया जाना चाहिए।

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

PostgreSQL में उच्च उपलब्धता के अधिक विवरण में जाने के लिए इस उत्कृष्ट प्रस्तुति को देखें। अपने अगले ब्लॉग पोस्ट में, हम आपको स्ट्रीमिंग प्रतिकृति का उपयोग करके PostgreSQL के लिए उच्च उपलब्धता को प्रबंधित करने के लिए उपयोग किए जाने वाले टूल की दुनिया से परिचित कराएंगे।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्प्रिंग डॉकर कंटेनर पोस्टग्रेज डॉकर कंटेनर तक नहीं पहुंच सकता है

  2. Slony-I 2.0.x को नवीनतम संस्करण 2.1.x में अपग्रेड करना

  3. PostgreSQL:बहुमुखी INSERT

  4. संबंध के लिए अनुमति अस्वीकृत

  5. दूरस्थ होस्ट से पोस्टग्रेज़ से कनेक्ट नहीं हो सकता