पोस्टग्रेज के लिए उपयोग योग्य मल्टी-मास्टर प्रतिकृति?


16
  1. मैंने Postgres-XC की कोशिश की और यह अभी तक पूर्ण SQL को लागू नहीं करता (जैसे SERIAL)

  2. डेवलपर्स के अनुसार पोस्टग्रेज-आर दिलचस्प लगता है लेकिन यह "प्रोडक्शन रेडी नहीं" है।

इसलिए मैंने pgpool-II 3.0.1 का उपयोग किया। हाँ, यह अच्छी तरह से काम करता है। लेकिन जहाँ तक मैं देख सकता हूँ यह केवल 2 पीजी नोड्स के लिए है।

वहाँ कुछ भी है कि वास्तव में उत्पादन तैयार है और कई पीजी नोड्स के साथ काम करने में सक्षम है?


कुछ साल पहले हम इसी समस्या से जुड़े थे। आखिरकार हमने अपना सारा सामान ओरेकल में स्थानांतरित कर दिया। उम्मीद है कि आप इन दिनों प्रयोग करने योग्य मल्टीमास्टर प्रतिकृति पा सकते हैं, मैंने नहीं देखा ... सौभाग्य, कोई भी कम नहीं है।
ग्रूफ़टेक

2
PostgreSQL के स्वयं के दस्तावेज़ एक मिडलवेयर एप्लिकेशन का उपयोग करने के लिए कहते हैं :) .. " सिंक्रोनस मल्टीमास्टर प्रतिकृति .. PostgreSQL इस प्रकार की प्रतिकृति की पेशकश नहीं करता है, हालांकि पोस्टग्रेसीक्यू दो चरण की प्रतिबद्ध (PREPARE परिवहन और COMMIT PREPARED) का उपयोग इसे लागू करने के लिए किया जा सकता है। एप्लिकेशन कोड या मिडलवेयर "
वॉरेन

आप दो नोड्स तक सीमित नहीं हैं।
फोक्सप्लस सरप्लस

जवाबों:


6

क्या आपने बुकुरो पर विचार किया है ? यह अतुल्यकालिक मल्टीमास्टर है। यह पूरी तरह से पकड़ा नहीं गया है और एक सामान्य समाधान नहीं है, लेकिन यह एक कोशिश के काबिल हो सकता है।


1
मैं स्पष्ट रूप से पर्याप्त विशिष्ट नहीं था: मुझे तुल्यकालिक प्रतिकृति की आवश्यकता है। इसके अलावा, FAQ में इसका क्या अर्थ है? "क्या बुकार्डो दो से अधिक आकाओं के बीच दोहरा सकता है? नहीं। वर्तमान में, बुकुरो केवल मास्टर को मास्टर का समर्थन करता है (साथ ही साथ कई दासों को भी मास्टर बनाता है)।" तो क्या यह मल्टी-मास्टर है या नहीं?
mrkafk

4
केवल अगर आपकी "मल्टी" की परिभाषा "2" है!
hmallett

कृपया ध्यान दें कि बुकार्डो 5 के साथ शुरू होने वाले सिर्फ 2 मास्टर्स की सीमा को हटा दिया गया है
जोरील जूल

3

मुझे पीटर के आकलन से सहमत होना होगा: अभी पोस्टग्रेज के लिए कोई बहुत अच्छा मल्टी-मास्टर प्रतिकृति नहीं है। (सच्चा मल्टी-मास्टर प्रतिकृति करना एक बहुत ही कठिन समस्या है, और मैं किसी भी उपलब्ध समाधान के साथ आसक्त नहीं हूं।)

विकिपीडिया की संभावित समाधानों की सूची की जाँच करना जिसे आप जांचना चाहते हैं:

PostgreSQL मल्टी-मास्टर प्रतिकृति के लिए कई समाधान प्रदान करता है, जिसमें दो चरण प्रतिबद्ध के आधार पर समाधान शामिल हैं। बुकार्डो, रूब्रीप, पीजीपूल और पीजीपूल -2, पीजीक्लस्टर और सेक्विया के साथ-साथ कुछ मालिकाना समाधान भी हैं। एक और आशाजनक दृष्टिकोण, उत्सुक (तुल्यकालिक) प्रतिकृति को लागू करना पोस्टग्रेज-आर है, हालांकि यह अभी भी विकास में है। अभी तक एक और परियोजना, तुल्यकालिक प्रतिकृति को लागू करना Postgres-XC है। Postgres-XC अभी भी विकास के अधीन है।


वाह, बस उस सूची को पढ़ने से मेरे लिए झटका और आतंक होता है। :)
पीटर आइसेनट्राट

मेरे लिए यह अवसाद और घृणा है :-)
voretaq7

मुझे लगता है कि विन्यास और संचार के लिए etcd के समान प्रणाली का उपयोग करना संभव होगा, शायद दो चरण के भीतर कोई भी अपडेट स्टेटमेंट चल रहा है ... एक कठिन हिस्सा एक नोड को तब तक बनाए रखेगा जब तक कि वह पकड़ा न जाए और अन्य नोड्स से मेल न खाए। मैं वास्तव में इस के लिए एक पास के स्वचालित समाधान से प्यार करता हूँ
Tracker1

3

यह भारी जावा उन्मुख है, लेकिन मूल डेटाबेस क्लाइंट API को JDBC डेटा स्रोतों से जोड़ा जा सकता है। टंगस्टन मायोसोटिस, MySQL मूल के लिए JDBC ब्रिजिंग के लिए एक उदाहरण है।


  • टंगस्टन एंटरप्रिस मल्टी-मास्टर एसिंक्रोनस के लिए अच्छा है। मुझे लगता है कि यह MySQL, PostgreSQL और Oracle के लिए काम करता है। यह स्टैंडअलोन चला सकता है या जावा एप्लिकेशन में एम्बेडेड हो सकता है। मैंने इसे MySQL के लिए काम करते देखा है, लेकिन वे PostgreSQL का दावा करते हैं। उनका प्रतिकारक घटक खुला-स्रोत है, लेकिन पूर्ण समाधान में अधिक भाग होते हैं और लाइसेंसिंग लागत की आवश्यकता होती है। कॉन्टिन्युट मूल रूप से मल्टी-मास्टर सिंक्रोनस के लिए सेकोइया था, लेकिन उन्होंने इसे छोड़ दिया, और मल्टी-मास्टर एसिंक्रोनस के बजाय टंगस्टन बनाया - वे तुल्यकालिक एसीआईडी ​​स्थिरता की तुलना में अधिक रणनीतिक व्यवसाय को स्केल मानते हैं। टंगस्टन जावा में लिखा गया है, इसीलिए वे मूल डेटाबेस क्लाइंट को पाटने के लिए मायोसोटिस की पेशकश करते हैं।

  • सममितीय बहु-मास्टर एसिंक्रोनस के लिए अच्छा है। यह ओपन-सोर्स है। यह बिन लॉगिंग के बजाय अपडेट कैप्चर करने के लिए ट्रिगर / अनइंस्टॉल स्थापित करता है। यह स्टैंडअलोन चला सकता है या जावा एप्लिकेशन में एम्बेडेड हो सकता है।

  • HA-JDBC मल्टी-मास्टर सिंक्रोनस के लिए अच्छा है। यह C-JDBC और Sequoia जैसे पुराने डिफंक्शन सॉफ्टवेयर को सुपरस्टार करता है। यह ओपन-सोर्स है। यह बोलियों के माध्यम से PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase और कई अन्य लोगों के लिए दो-चरण प्रतिबद्ध और काम करता है। यह मुख्य रूप से एम्बेडेड है, इसलिए इसे PostgreSQL को पुल करने के लिए जावा एप्लिकेशन में एम्बेड करें। वितरित ताले, क्रम, समय, रैंड, और इतने पर Redhat / JBoss से jGroups द्वारा नियंत्रित किया जाता है। एक अच्छा फीचर लेन-देन मोड "सीरियल" के बजाय "समानांतर" है, अगर आपका ऐप डेडलॉक का अनुभव करता है और रोलबैक का समर्थन नहीं करता है। मैंने इस "धारावाहिक" मोड का उपयोग एक विरासत ऐप को फिर से अपडेट करने के लिए किया था जो डीबी-क्लस्टर के बारे में पता नहीं था, इसलिए यह लेनदेन रिट्री कोड गायब था। सीरियल मोड ने दिन बचाया और एक बुरा फिर से लिखने से बचा।

  • H2 मल्टी-मास्टर सिंक्रोनस के लिए अच्छा है। यह ओपन-सोर्स है। यह HA-JDBC आर्किटेक्चर के समान दो-चरण प्रतिबद्ध का उपयोग करके स्टैंडअलोन डेटाबेस या क्लस्टर का समर्थन करता है, लेकिन यह दो-चरण प्रतिबद्ध के लिए एक अतिरिक्त घटक की आवश्यकता के बजाय सभी में है। यह सुनिश्चित नहीं है कि यह स्वयं ताले वितरित करता है, या jGroups या हेज़ेलकास्ट जैसे तीसरे पक्ष पर निर्भर करता है।

PostgreSQL और अन्य डेटाबेस के लिए किसी भी JDBC आधारित प्रतिकृति को JDBC पुल के लिए एक मूल निवासी की आवश्यकता होती है, जब तक कि आपका आवेदन जावा में पहले से ही न लिखा हो। MySQL के लिए, टंगस्टन एंटरप्राइज Myosotis नामक एक वैकल्पिक घटक प्रदान करता है। मैंने JDBC के लिए PHP / Perl / C / mysqlclient को पाटने के लिए सफलतापूर्वक उपयोग किया, जहाँ JDBC डेटा स्रोत 4-नोड MySQL / InnsDB क्लस्टर की ओर इशारा करते हुए HA-JDBC डेटा स्रोत हुआ।

टंगस्टन अपने रेप्लिकेटर और राउटर घटकों में PostgreSQL का समर्थन करता है, लेकिन मायोसोटिस घटक के बारे में निश्चित नहीं है। शायद। टंगस्टन रेप्लिकेटर / राउटर घटक मल्टी-मास्टर एसिंक्रोनस के लिए हैं, लेकिन मायोसोटिस आपको वैकल्पिक JDBC बैक-एंड जैसे HA-JDBC या H2 को सिंक्रोनस के लिए पुल कर सकते हैं।

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


2

उस का जवाब एक शानदार नहीं है।


इसके कुछ साल हो गए जब मैंने शोध किया, लेकिन मेरी कंपनी इस नतीजे पर पहुंची जब हमने कोशिश की।
grufftech

1

मैं postgresql में मल्टी-मास्टर प्रतिकृति के लिए पिछले 2 वर्षों से londiste का उपयोग कर रहा हूं।

आपने अपनी तालिकाएँ pg_queue के उपयोग से कतार में रख दीं और आप प्रत्येक कतार में जितने अन्य डेटाबेस चाहते हैं, उतने सदस्यता ले सकते हैं, प्रतिकृति कतार द्वारा परमाणु है और यह बहुत ही उपयोगी है।

आप यहाँ londiste के बारे में पढ़ सकते हैं ( http://pgfoundry.org/projects/skytools/ ), यह वही है जो Skype लोग अपने क्लस्टर के लिए उपयोग करते हैं, उन्होंने इसे बनाया भी है, इसलिए यह बहुत अच्छा है :)


हम्म वह दिलचस्प है, लेकिन जो मैंने यहाँ देखा है , उसके अनुसार: wiki.postgresql.org/wiki/… , लॉन्डिस्ट मास्टर-स्लेव और एसिंक्रोनस है? तो यह मल्टी-मास्टर कैसे हो सकता है? इसके अतिरिक्त, मुझे वास्तव में तुल्यकालिक प्रतिकृति की आवश्यकता है: यदि कोई भी (सक्रिय) क्लस्टर नोड विफल रहता है तो लेनदेन विफल होना चाहिए।
मर्कफक

यह प्रतिकृति पोस्ट-ट्रांज़ैक्शनल है अन्यथा यह काफी धीमी होगी
14x14 पर lynxman

मुझे गधे में दर्द (नाइटपैकिंग) की तरह आवाज करने का मतलब नहीं है, लेकिन ... 1. मैंने पैगप्ल -2 का इस्तेमाल किया है और लेनदेन काफी जल्दी (हालांकि मैंने बेंचमार्क नहीं किया है), और 2. हालांकि व्यक्तिगत लेनदेन धीमा हो सकता है, मुझे लेनदेन के समग्र प्रवाह के कम होने का एक अच्छा कारण नहीं दिखता है। वैसे भी, शायद अधिक महत्वपूर्ण बिंदु यह है कि लॉन्डिस्ट मल्टी-मास्टर कैसे है? क्या मैं पीजी सर्वर 1 को लिख सकता हूं और क्या उसने 2 को दोहराया है, और पीजी सर्वर 2 को लिखें और क्या उसने सर्वर 1 को दोहराया है?
mrkafk


-2

मुझे उपयोगी "मल्टी-मास्टर" प्रतिकृति प्रणाली मिली:

  1. RabbitMQ http://www.rabbitmq.com/ प्राप्त करें - यह एक संदेश मिडलवेयर है।

  2. Rabbit में Rabbit MQ क्लस्टर कॉन्फ़िगर करें।

  3. क्लस्टर में प्रत्येक नोड के लिए कतार बनाएँ और उन्हें 'फैनआउट' प्रकार के आदान-प्रदान के लिए बाध्य करें।

इस तरह किसी भी नोड और किसी भी कतार को भेजे गए संदेश को अन्य सभी नोड्स में दोहराया जाता है। मेरे पास इसके लिए एक कार्य कोड है!


2
@mrafk - क्या आपके पास "वर्किंग कोड" पोस्ट / लिंक होगा?
वॉरेन

2
पोस्टग्रेज के साथ प्रतिकृति के साथ इसका क्या करना है? यह संदेश वितरित करेगा, लेकिन आपको DB से डेटा संदेश / अपडेट कहां मिल रहे हैं और यह संदेश कतार पर संदेश प्राप्त करने वाले नोड्स को कैसे अपडेट कर रहा है?
भिक्षु

3
यह उस मूलभूत समस्या का समाधान हो सकता है जिसका आप सामना कर रहे थे, लेकिन यह इस सवाल का जवाब नहीं है
टॉम एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.