एडब्ल्यूएस आरडीएस MySQL प्रतिकृति लैग के मुद्दे पढ़ें



amazon-web-services amazon-rds (1)

Mysql प्रतिकृति एक एकल डेटाबेस पर सभी लेनदेन को क्रम में कार्यान्वित करता है, और मास्टर - समान लेनदेन में उन लेनदेन को निष्पादित कर सकता है।

संभवतः आपके पास एक ही डीए पर निष्पादित अधिकांश अद्यतन हैं, और यही वह है जो आपको बहु-थ्रेड प्रतिकृति का लाभ प्राप्त करने की अनुमति नहीं देता है।

अपने प्रतिकृति सर्वर पर iostat जांचें मशीन पर उच्च आईओ की वजह से यह समस्या ज्यादातर समय होती है।

मशीन पर आईओ कम करने के लिए - कई अतिरिक्त परिवर्तन हैं जो आप कर सकते हैं:

  • innodb_buffer_pool_size बढ़ाएं - यह पहली बात है जिसे आप डिफ़ॉल्ट से बदलना चाहिए। यदि यह उदाहरण केवल mysql चलाता है - आप अपनी उपलब्ध स्मृति के लगभग 80% आवंटित कर सकते हैं।

  • निम्नलिखित पैरामीटर भी सत्यापित करें:

     log_slave_updates = false
     binlog_format = STATEMENT

    (यदि आपके पास मिक्स या ROW binlog_format कॉन्फ़िगर किया गया है - सत्यापित करें कि आप समझते हैं कि इसका अर्थ यहां से क्या है http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html

  • यदि आपके पास बहुत सारे डेटा हैं जो कई बार बदल रहा है - बढ़ रही है

    innodb_max_dirty_pages_pct को 90 या 95% की जांच करना उचित हो सकता है

मैं एक सेवा चलाता हूं जिसे 4000+ आईओपीएस के बारे में समर्थन करने में सक्षम होना चाहिए और प्रतिकृति लैग <= 1 सेकंड को ठीक से काम करने के लिए रखना चाहिए।

मैं AWS RDS MySQL उदाहरणों का उपयोग कर रहा हूं और मेरे पास दो रीडली की पढ़ें। मेरी सेवा को पढ़ने वाले प्रतिकृति के विशाल प्रतिकृति के अंतराल पर spikes का सामना करना पड़ रहा था इसलिए मैं एक सप्ताह के लिए एडब्ल्यूएस समर्थन के साथ संपर्क में था, यह समझने की कोशिश की कि मैं अंतराल का सामना क्यों कर रहा था - मेरे पास 6000 IOPS प्रावधान थे और मेरे मामले बहुत शक्तिशाली थे। उन्होंने मुझे सभी तरह के कारण दिए

उदाहरण के प्रकार बदलने के बाद, MySQL 5.6 में 5.5 से उन्नयन करने के लिए बहु-थ्रेडिंग का लाभ उठाने के लिए, और उन्हें अंतर्निहित हार्डवेयर की जगह ले जाने के बाद मैं अभी भी महत्वपूर्ण प्रतिकृति लैग बेतरतीब ढंग से देख रहा था।

आखिरकार मैंने पैरामीटर समूहों के साथ टिंकरिंग शुरू करने का फैसला किया है, जो मेरी कॉन्फ़िग्स को सिर्फ पढ़ने वाली प्रतिकृति के लिए बदल रही है, जो मुझे मिल सकता है जो प्रतिकृति प्रक्रिया में शामिल था और अब अंत में प्रतिकृति लैग का <= 1 सेकंड अनुभव कर रहा है।

यहां जिन सेटिंग्स मैं बदल चुका हूं और उनके मूल्यों के सफल होने लगते हैं (मैं डिफ़ॉल्ट mysql 5.6 param समूह की प्रतिलिपि बना चुका हूं और इन मूल्यों को अद्यतन किए गए पैरामीटर समूह को केवल पढ़ने वाले प्रतिकृतियों में लागू कर सकते हैं):

innodb_flush_log_at_trx_commit=0
sync_binlog=0
sync_master_info=0
sync_relay_log=0
sync_relay_log_info=0

कृपया संशोधनों के प्रभाव को समझने के लिए इनमें से प्रत्येक के बारे में पढ़ें: http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

सुनिश्चित करने के लिए अन्य चीजों की देखभाल करें:

Convert any MyISAM tables to InnoDB
Upgrade from MySQL < 5.6 to MySQL >= 5.6
Ensure that your provisioned IOPS are > the combined read/write IOPS you require
Ensure that your read replica instances are >= master instance

यदि किसी और के पास कोई भी अतिरिक्त पैरामीटर है जो बेहतर प्रतिकृति प्रदर्शन प्राप्त करने के लिए रीड प्रतिकृति या मास्टर डीबी पर संशोधित किया जा सकता है, तो मुझे और अधिक सुनना अच्छा लगेगा।

7-8-2014 को अद्यतन करें

Mysql 5.6 बहु-धागा प्रतिकृति का लाभ उठाने के लिए मैंने तय किया है:

slave_parallel_workers=5 (Set it to the number of read replica DBs you have running)

मैंने इसे यहां यह पाया:

https://blogs.oracle.com/MySQL/entry/benchmarking_mysql_replication_with_multi