2008-11-07 7 views
6

मुझे ईमानदारी से triedthisleftandright और अभी भी पता चलता है कि एक प्रतिलिपि दास के रूप में स्थापित मेरा दर्पण सर्वर अभी भी पीछे है। मेरा ऐप का उपयोगकर्ता आधार बढ़ता रहता है और अब मैं उस बिंदु तक पहुंचा जहां मैं "resync" डेटाबेस ("सप्ताहांत पर भी नहीं)" बंद करना "नहीं रख सकता।बिनलॉग माईएसQL प्रतिकृति एक "बाघ का थैला" है। क्या कोई अच्छा विकल्प है?

वैसे भी, मेरा प्रश्न: क्या कोई व्यावहारिक है, सस्ती, बिनलॉग प्रतिकृति के विकल्प? मेरे पास दो सर्वर हैं इसलिए लोड संतुलन के लिए अभी तक एक तिहाई खरीदने पर विचार नहीं करेंगे, जब तक कि यह एकमात्र विकल्प न हो।

चीयर्स,

/mp

+0

mysql प्रतिकृति विकल्पों की तुलना में एक स्थिर, तेज़ और पतला समाधान है। booking.com अविश्वसनीय रूप से कई mysql उदाहरणों और कैस्केड प्रतिकृति सेटअप का उपयोग करता है जो मैंने सुना है। यदि आपकी वेबसाइट वास्तव में बहुत बड़ी है, तो आपको समस्या निवारण के साथ आपकी मदद करने के लिए एक पेशेवर की आवश्यकता हो सकती है, यदि आपका दास बहुत छोटा हार्डवेयर-वार नहीं है। मैं व्यक्तिगत रूप से प्रति सेकंड 10k + प्रश्नों के साथ सेटअप करता हूं जिसमें गुलाम अंतराल के साथ कोई समस्या नहीं है। संभवतः आपकी प्रतिकृति सेटिंग्स भी सही नहीं हैं। – sjas

उत्तर

10

आपका मास्टर समानांतर में निष्पादित करता है और अपने दास धारावाहिक में निष्पादित करता है। यदि आपका मास्टर 1 वास्तविक घंटे में 1.5 घंटे के आवेषण/अपडेट/निष्पादन को संसाधित कर सकता है, तो आपका दास पीछे गिर जाएगा।

यदि आप अपने दास पर लिखने के प्रदर्शन में सुधार करने के तरीकों को नहीं ढूंढ पा रहे हैं (अधिक मेमोरी, तेज डिस्क, अनावश्यक अनुक्रमणिका हटा दें), तो आपने अपने अनुप्रयोग आर्किटेक्चर में एक सीमा को मारा है। आखिरकार आप एक बिंदु पर हिट करेंगे कि आप यथासंभव वास्तविक समय में परिवर्तन निष्पादित नहीं कर सकते क्योंकि आपका मास्टर समानांतर में निष्पादित कर सकता है।

बहुत सी बड़ी साइटें अपने डेटाबेस को खराब करती हैं: अपने मास्टर + गुलाम को एकाधिक मास्टर + गुलाम क्लस्टर में विभाजित करने पर विचार करें। फिर इन क्लस्टर में अपने ग्राहक आधार को विभाजित करें। जब एक गुलाम पीछे गिरना शुरू करता है, तो यह एक और क्लस्टर जोड़ने का समय है।

यह सस्ता नहीं है, लेकिन जब तक आप समानांतर में बिनलॉग प्रतिकृति निष्पादित बयानों को बनाने का कोई तरीका नहीं ढूंढ पाते हैं, तो शायद आपको इसे करने का बेहतर तरीका नहीं मिलेगा।

अपडेट (2017): MySQL अब parallel slave worker threads का समर्थन करता है। अभी भी कई चर हैं जो गुलाम को पीछे गिरने का कारण बनेंगे, लेकिन गुलामों को धारावाहिक क्रम में लिखने की आवश्यकता नहीं है। समानांतर दास धागे के प्रतिबद्ध आदेश को संरक्षित करना चुनना एक महत्वपूर्ण विकल्प है कि किसी भी समय दास की सटीक स्थिति महत्वपूर्ण है या नहीं।

+0

कभी-कभी आपको कठोर सच्चाई सुनने की आवश्यकता होती है – mauriciopastrana

+0

सभी एप्लिकेशन स्केलिंग सीमा के किसी प्रकार को हिट करते हैं। अधिकांश डेटाबेस डिस्क IO मारा। ऐसा लगता है जैसे तुम्हारा प्रतिकृति है। नकारात्मक पक्ष पर, आप काम पूरा करने के लिए बड़े डेटाबेस सर्वर नहीं खरीद सकते हैं।प्लस तरफ, आप छोटे डेटाबेस सर्वर खरीद सकते हैं :) –

0

दास को स्मृति जोड़ना शायद मदद करेगा। हम 32 से 128 मेगापिक्सल तक चले गए और कम से कम चले गए। लेकिन यह न तो सस्ता है और न ही यह सभी परिस्थितियों में पर्याप्त होगा।

एक तीसरा सर्वर ख़रीदना शायद उसमें बहुत मदद नहीं करेगा, आप शायद एक और लापरवाही दास प्राप्त करेंगे।

1

आप की कोशिश की है: 1) सेट innodb_flush_log_at_trx_commit = 0 2) सेट sync_binlog = 0

दोनों अगर आप एक सर्वर विफलता है अतिरिक्त जोखिम का एक छोटा सा स्तर के साथ अपने दास तेजी लाने के लिए मदद मिलेगी।

+0

ये दो कमांड चमत्कार, प्रदर्शन-वार करेंगे। बस ध्यान रखें, अगर आपका मास्टर सर्वर दुर्घटनाग्रस्त हो जाता है, तो आप उन लेन-देन को खो सकते हैं जिन्हें अभी तक रैम से डिस्क पर बिनलॉग में नहीं मिला है। अगर यह ठीक है, तो आपको खुश होना चाहिए। – sjas

संबंधित मुद्दे