मास्टर-मास्टर प्रतिकृति उतनी अच्छी नहीं है जितना आप सोच सकते हैं, वही गोल-रॉबिन प्रॉक्सी और इसी तरह के 'आसान' समाधानों के लिए जाता है। यदि आप डेटा को बहुत तेजी से अलग करने के लिए टकराने का अपराध करते हैं (सर्वर के बीच देरी की तुलना में तेजी से, जो उत्पादन सर्वरों पर पूर्ण सेकंड तक हो सकता है *
), दोनों डेटा स्वीकार करेंगे। यदि आपके पास एक नीलामी सर्वर है, तो आपने एक ही कार को दो बार बेचा । इसे किसने खरीदा? यह निर्भर करता है कि आप किस डीबी से पूछेंगे!
आवेदन के बारे में पता होना चाहिए कि वहाँ वास्तव में 2 डेटाबेस हैं और यह उनके दोनों आईपी पते को जानना है। यदि आप "बेचना" चाहते हैं, तो आपको फ़े होना चाहिए
DB_number = `auction_number` % `number_of_databases`
( %
के लिए है modulo
)
... और इसे DB_number डेटाबेस में करें। यदि आपको एक कनेक्शन त्रुटि मिलती है, तो शायद इसे दूसरे के साथ करें (लेकिन नीलामी सर्वर के मामले में, मैं सिर्फ एक त्रुटि प्रदर्शित करूंगा)।
इसके अलावा, आईपी पते दोनों सर्वरों के बीच wamamole -d होना चाहिए । एक आपदा परिदृश्य पर, जहां एक डेटाबेस सर्वर पीक उपयोग समय में कुछ घंटों के लिए नीचे चला जाता है, आप पाएंगे कि एप्लिकेशन अनुपस्थित सर्वर से कनेक्ट करने और टाइमटाइम तक कहने के लिए, 3s लटकाए जाने का प्रयास करेगा। आपके प्रश्नों का लगभग आधा भाग 3s लंबे समय तक चलता है (और वे सभी अंततः एक ही डेटाबेस में जाते हैं - जो इसे आपदा से पहले तेजी से नहीं चलाता है)। यह आपके httpd को खुश नहीं करता है, क्योंकि इसमें संभवतः समवर्ती अनुरोध हैंडलर थ्रेड्स का एक सीमित कनेक्शन पूल है ...
*
उत्पादन सर्वर पर प्रतिकृति विलंब पूरे एक सेकंड तक हो सकता है - मैंने इसे एक दूरस्थ कॉलोकेशन में और हमारे डेटासेंटर में परीक्षण किया है और 99% समय के लिए यह 0 है, लेकिन कभी-कभी mysql 1s दिखाता है। बड़े पैमाने पर ट्रैफ़िक के कारण, क्लाइंट एप्लिकेशन के दो अनुरोध करने, दो प्रश्नों, डालने और चयन करने के कारण मेरे पास कई टकराव थे। कुछ मामलों के लिए, पंक्ति अभी तक वहाँ नहीं थी , इसलिए हमने यूज़रआईडी का हैश उपयोग किया और इसने समस्या को ठीक कर दिया
मुझे आशा है कि आप मेरी गलतियों से सीखेंगे ;-)