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

PostgreSQL में दोष सहिष्णुता का विकास:तुल्यकालिक प्रतिबद्धता

PostgreSQL एक अद्भुत परियोजना है और यह एक अद्भुत दर से विकसित होती है। हम ब्लॉग पोस्ट की एक श्रृंखला के साथ PostgreSQL में इसके सभी संस्करणों में दोष सहिष्णुता क्षमताओं के विकास पर ध्यान केंद्रित करेंगे। यह श्रृंखला की चौथी पोस्ट है और हम सिंक्रोनस कमिट और पोस्टग्रेएसक्यूएल की गलती सहनशीलता और निर्भरता पर इसके प्रभावों के बारे में बात करेंगे।

यदि आप शुरुआत से ही विकास की प्रगति देखना चाहते हैं, तो कृपया नीचे दी गई श्रृंखला के पहले तीन ब्लॉग पोस्ट देखें। प्रत्येक पोस्ट स्वतंत्र है, इसलिए आपको वास्तव में दूसरे को समझने के लिए एक को पढ़ने की आवश्यकता नहीं है।

  1. PostgreSQL में दोष सहनशीलता का विकास 
  2. PostgreSQL में दोष सहनशीलता का विकास:प्रतिकृति चरण 
  3. पोस्टग्रेएसक्यूएल में दोष सहिष्णुता का विकास:समय यात्रा

सिंक्रोनस कमिट

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

तुल्यकालिक प्रतिकृति के साथ, प्रतिकृति देरी सीधे मास्टर पर लेनदेन के बीता हुआ समय को प्रभावित करता है। अतुल्यकालिक प्रतिकृति के साथ, मास्टर पूरी गति से जारी रख सकता है।

सिंक्रोनस प्रतिकृति गारंटी देता है कि डेटा कम से कम . को लिखा गया है उपयोगकर्ता या एप्लिकेशन से पहले दो नोड्स को बताया जाता है कि एक लेन-देन किया गया है।

उपयोगकर्ता प्रत्येक लेन-देन . के प्रतिबद्ध मोड का चयन कर सकता है , ताकि समकालिक और अतुल्यकालिक दोनों प्रतिबद्ध लेनदेन एक साथ चलाना संभव हो।

यह प्रदर्शन और लेनदेन स्थायित्व की निश्चितता के बीच लचीले व्यापार-बंद की अनुमति देता है।

सिंक्रोनस कमिट को कॉन्फ़िगर करना

Postgres में तुल्यकालिक प्रतिकृति स्थापित करने के लिए हमें synchronous_commit . को कॉन्फ़िगर करने की आवश्यकता है postgresql.conf में पैरामीटर।

पैरामीटर निर्दिष्ट करता है कि क्या आदेश के सफल लौटाने से पहले लेन-देन प्रतिबद्ध डिस्क पर WAL रिकॉर्ड लिखे जाने की प्रतीक्षा करेगा या नहीं ग्राहक को संकेत। मान्य मान हैं चालूremote_applyremote_write , स्थानीय , और बंद . जब हम सेट अप करते हैं तो हम चर्चा करेंगे कि सिंक्रोनस प्रतिकृति के संदर्भ में चीजें कैसे काम करती हैं synchronous_commit प्रत्येक परिभाषित मान के साथ पैरामीटर।

आइए पोस्टग्रेज़ दस्तावेज़ीकरण (9.6) के साथ शुरू करें:

यहां हम सिंक्रोनस कमिटमेंट की अवधारणा को समझते हैं, जैसा कि हमने पोस्ट के परिचय भाग में वर्णित किया है, आप सिंक्रोनस प्रतिकृति सेट करने के लिए स्वतंत्र हैं, लेकिन यदि आप ऐसा नहीं करते हैं, तो डेटा खोने का जोखिम हमेशा बना रहता है। लेकिन डेटाबेस असंगति पैदा करने के जोखिम के बिना, fsync off को बंद करने के विपरीत - हालांकि यह एक अन्य पोस्ट के लिए एक विषय है -। अंत में, हम यह निष्कर्ष निकालते हैं कि यदि हमें प्रतिकृति विलंब के बीच कोई डेटा खोना नहीं है और यह सुनिश्चित करना चाहते हैं कि डेटा उपयोगकर्ता/एप्लिकेशन को सूचित किए जाने से पहले कम से कम दो नोड्स को लिखा गया है कि लेनदेन किया गया है , हमें कुछ प्रदर्शन खोने को स्वीकार करने की आवश्यकता है।

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

Fig.1 प्रतिकृति कैसे काम करती है

तुल्यकालिक_प्रतिबद्ध =बंद

जब हम sychronous_commit = off, . सेट करते हैं COMMIT लेन-देन रिकॉर्ड को डिस्क पर फ़्लश करने की प्रतीक्षा नहीं करता है। इसे नीचे चित्र 2 में हाइलाइट किया गया है।

Fig.2 तुल्यकालिक_कमिट =ऑफ

तुल्यकालिक_प्रतिबद्ध =स्थानीय

जब हम synchronous_commit = local, . सेट करते हैं COMMIT लेन-देन रिकॉर्ड स्थानीय डिस्क पर फ़्लश होने तक प्रतीक्षा करता है। इसे नीचे चित्र 3 में हाइलाइट किया गया है।

Fig.3 तुल्यकालिक_कमिट =स्थानीय

तुल्यकालिक_प्रतिबद्ध =चालू (डिफ़ॉल्ट)

जब हम synchronous_commit = on, . सेट करते हैं COMMIT synchronous_standby_names . द्वारा निर्दिष्ट सर्वर (सर्वर) तक प्रतीक्षा करेगा पुष्टि करें कि लेनदेन रिकॉर्ड डिस्क पर सुरक्षित रूप से लिखा गया था। इसे नीचे चित्र 4 में हाइलाइट किया गया है।

नोट: जब synchronous_standby_names खाली है, यह सेटिंग synchronous_commit = local . के समान व्यवहार करती है ।

Fig.4 तुल्यकालिक_कमिट =चालू

सिंक्रोनस_कमिट =रिमोट_राइट

जब हम synchronous_commit = remote_write, . सेट करते हैं COMMIT synchronous_standby_names . द्वारा निर्दिष्ट सर्वर (सर्वर) तक प्रतीक्षा करेगा ऑपरेटिंग सिस्टम को लेन-देन रिकॉर्ड लिखने की पुष्टि करें लेकिन जरूरी नहीं कि वह डिस्क तक पहुंचे। इसे नीचे चित्र 5 में हाइलाइट किया गया है।

Fig.5 तुल्यकालिक_कमिट =रिमोट_राइट

सिंक्रोनस_कमिट =रिमोट_लागू

जब हम synchronous_commit = remote_apply, . सेट करते हैं COMMIT synchronous_standby_names . द्वारा निर्दिष्ट सर्वर (सर्वर) तक प्रतीक्षा करेगा पुष्टि करें कि लेनदेन रिकॉर्ड डेटाबेस पर लागू किया गया था। इसे नीचे चित्र 6 में हाइलाइट किया गया है।

Fig.6 तुल्यकालिक_कमिट =Remote_apply

अब, आइए sychronous_standby_names को देखें विवरण में पैरामीटर, जिसे synchronous_commit setting सेट करते समय ऊपर संदर्भित किया गया है on . के रूप में , remote_apply या remote_write

सिंक्रोनस_स्टैंडबाय_नाम ='स्टैंडबाय_नाम [,…]'

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

तुल्यकालिक_स्टैंडबाय_नाम ='संख्या (स्टैंडबाय_नाम [, ...])'

सिंक्रोनस कमिट कम से कम num . के जवाब की प्रतीक्षा करेगा प्राथमिकता के क्रम में सूचीबद्ध स्टैंडबाय की संख्या। ऊपर के समान नियम लागू होते हैं। इसलिए, उदाहरण के लिए synchronous_standby_names = '2 (*)' सेट करना किसी भी 2 स्टैंडबाय सर्वर से जवाब के लिए सिंक्रोनस प्रतिबद्ध प्रतीक्षा करेगा।

सिंक्रोनस_स्टैंडबाय_नाम खाली है

यदि यह पैरामीटर खाली है जैसा कि दिखाया गया है तो यह सेटिंग के व्यवहार को बदल देता है synchronous_commit करने के लिए on , remote_write या remote_apply local . के समान व्यवहार करने के लिए (यानी, COMMIT केवल स्थानीय डिस्क पर फ्लश करने की प्रतीक्षा करेगा)।

निष्कर्ष

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

संदर्भ

मुझे दृष्टांतों के लिए विचार देने के लिए मेरे सहयोगी पेट्र जेलिनेक का विशेष धन्यवाद।

PostgreSQL दस्तावेज़ीकरण
PostgreSQL 9 व्यवस्थापन कुकबुक - दूसरा संस्करण


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django विकास डेटाबेस को डिफ़ॉल्ट SQLite से PostgreSQL में बदलना

  2. PostgreSQL में एक तिथि से दिन प्राप्त करें

  3. मैं PostgreSQL में किसी विशेष स्कीमा के डेटाबेस में संग्रहीत सभी कार्यों की सूची कैसे प्राप्त कर सकता हूं?

  4. PostGIS धीमेपन पर शोध करना (2019 संस्करण)

  5. मैं मैक ओएस एक्स पर पोस्टग्रेएसक्यूएल सर्वर कैसे शुरू कर सकता हूं?