उत्पादन RDS उदाहरण को अपग्रेड करने का इष्टतम तरीका क्या है?


33

मेरे पास मेरे उत्पादन प्रणाली के हिस्से के रूप में MySQL छोटा RDS उदाहरण है और मैं इसे IOPS के साथ मध्यम उदाहरण में अपग्रेड करना चाहता हूं।

पुराने स्कूल डीबीए के रूप में मैं "गुलाम को जोड़ने; मास्टर को बढ़ावा देने; स्विच क्लाइंट्स" विधि के बारे में अवगत हूं, लेकिन AWS ने जादू वन-क्लिक अपग्रेड पथ प्रदान करने का वादा किया है, अर्थात "उन्नयन उदाहरण", "प्रदान किए गए IOPS"।

यह परीक्षण आरडीएस उदाहरण पर किया गया है, डाउनटाइम बहुत लंबा है, IMHO: छोटे-> मध्यम उन्नयन के लिए लगभग 5 मिनट, और प्रदान किए गए IOPS पर स्विच करने के लिए 30 मिनट (!!!)।

  • क्या यह सामान्य व्यवहार है?
  • उत्पादन RDS w / o डाउनटाइम पर अपग्रेड चलाने का कोई तरीका है?
  • क्या आप "रोकना; स्नैपशॉट बनाना; स्नैपशॉट से बड़ी आवृत्ति तक" बहाल करने की सलाह देते हैं?

जवाबों:


37

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

इस व्यवधान से बचने का एक तरीका प्रतीत होता है: एक मल्टी-एज तैनाती, जो क्षेत्र के भीतर एक अन्य उपलब्धता क्षेत्र में एक अदृश्य और दुर्गम (आप के लिए) प्रतिकृति बनाता है।

ओएस पैचिंग या डीबी इंस्टेंस स्केलिंग जैसे सिस्टम अपग्रेड के मामले में, ये ऑपरेशन ऑटोमैटिक फेलओवर से पहले स्टैंडबाय पर लागू होते हैं। नतीजतन, आपकी उपलब्धता प्रभाव केवल स्वचालित विफलता के पूरा होने के लिए आवश्यक समय तक सीमित है।

- http://aws.amazon.com/rds/multi-az/

मुझे एक त्वरित और निर्बाध प्रवासन मार्ग प्रदान करना चाहिए , हालांकि मुझे इस क्षमता का परीक्षण करने का अवसर नहीं मिला है। कंसोल में "संशोधित करें" आपको मल्टी-एज़ में एक उदाहरण बदलने की अनुमति देता है। संभवतः, इसका परिणाम संक्षेप में I / O फ्रीज होगा क्योंकि उदाहरण क्लोन किया गया है, इसलिए मैं निश्चित रूप से कोशिश करने से पहले इस कार्यक्षमता के सभी परीक्षण करने की सलाह दूंगा।

वैकल्पिक रूप से, आरडीएस एक आंतरिक तंत्र का समर्थन करता है जो आपको "गुलाम जोड़ें; मास्टर को बढ़ावा; स्विच क्लाइंट" ऑपरेशन का अनुकरण करने की अनुमति देनी चाहिए, और यह भी आपको लगभग शून्य-डाउनटाइम रूपांतरण प्राप्त करने की अनुमति देनी चाहिए:

  • वांछित उदाहरण वर्ग के साथ अपने डेटाबेस की एक वास्तविक RDS पढ़ें प्रतिकृति बनाएँ
  • ऑनलाइन आने के लिए प्रतीक्षा करें और मास्टर के साथ सिंक किया जाए
  • प्रोविजन किए गए IOPS को जोड़ने के लिए प्रतिकृति के कॉन्फ़िगरेशन को संशोधित करें
  • ऑनलाइन आने के लिए प्रतीक्षा करें और मास्टर के साथ सिंक किया जाए
  • सत्यापित करें कि दोनों प्रणालियों में 3 पार्टी टूल का उपयोग करके समान डेटा है
  • पुराने मास्टर से अपने आवेदन को डिस्कनेक्ट करें
  • मास्टर और प्रतिकृति पर मेल खाने वाले बिनलॉग निर्देशांक की पुष्टि करें कि यह सुनिश्चित करने के लिए कि सभी एप्लिकेशन लिखते हैं
  • आरडीएस में नई प्रतिकृति पर "प्रोमोट रीड रेप्लिका" के साथ सिस्टम को विभाजित करें
  • अपने एप्लिकेशन को नए मास्टर से कनेक्ट करें

http://aws.amazon.com/about-aws/whats-new/2012/10/11/amazon-rds-mysql-rr-promotion/


माइकल, विस्तृत जवाब के लिए बहुत धन्यवाद! विटाली
विटाली

मास्टर के लिए एक रीड प्रतिकृति को बढ़ावा देने से डाउनटाइम का कारण होगा (उदाहरण के लिए रिपोर्ट करने की आवश्यकता होगी) देखो!
बजे महमूद खतीब

@ महमूद खत्री ने धन्यवाद ज्ञापित किया। वह सही है। भले ही ऐसा कोई तकनीकी कारण न हो कि यह आवश्यक क्यों है, RDS एक उदाहरण को रीबूट करता है जब आप इसे मास्टर को बढ़ावा देते हैं। वास्तव में, मैंने बहुत कुछ सीखा है कि आरडीएस लगभग 4 साल (?) में कैसे काम करता है क्योंकि मैंने इसे मूल रूप से लिखा था। मैं संपादन करूंगा।
माइकल - sqlbot 16

मैं सोमवार को प्रोडक्शन में ऐसा कर रहा हूं, इसलिए मेरे पास कुछ सामान जोड़ने के लिए हो सकता है। मैं मूल रूप से प्रतिकृति को पढ़ने / लिखने के लिए बदल दूंगा फिर मैं अपनी सभी सेवाओं को इंगित करने वाला हूं, फिर मैं मास्टर को अपग्रेड करूंगा।
महमूद खतीब

RDS के साथ @MahmoudKhateeb, जब आप एक प्रतिकृति को बढ़ावा देते हैं, तो मास्टर से कनेक्शन स्थायी रूप से अलग हो जाता है। आप पुराने मास्टर को फिर से मास्टर के रूप में उपयोग करने के लिए वापस नहीं जा सकते। पुरानी प्रतिकृति अब एक मास्टर है और उसे इसी तरह रहना चाहिए। मौजूदा प्रतिकृति की प्रतिकृति बनाएं, अब (RDS कास्केड्स का समर्थन करता है) ... फिर आवश्यकतानुसार नए प्रतिकृति और पुराने प्रतिकृति को अपग्रेड करें ... फिर उत्पादन प्रतिकृति के रूप में नई प्रतिकृति का उपयोग शुरू करें ... फिर अपनी मूल प्रतिकृति को बढ़ावा दें। और नए मास्टर के रूप में इसका उपयोग करना शुरू करें। पुराने गुरु को दूर फेंक दो।
माइकल - sqlbot

4

मल्टी-एज़ेड वातावरण के साथ भी, आपके पास 60-120 का आउटेज होगा। यह वह स्थिति थी जब मैंने PostgreSQL db.m3.medium से db.m3.large में अपग्रेड करते समय हमारे RDS उदाहरणों को बार-बार मारा।


2

नवीनीकरण के दौरान किसी भी डाउनटाइम से बचने के लिए यह भी पॉसिबल है। इसे करने का तरीका संक्षिप्त रूप से पढ़े गए प्रतिकृति स्नैपशॉट से एक नया RDS लॉन्च करके और इसे मास्टर प्रतिकृति में सक्रिय / सक्रिय मास्टर के रूप में कॉन्फ़िगर करना है। एक बार इसे कॉन्फ़िगर करने के बाद, आप बिना किसी डाउनटाइम के एप्लिकेशन ट्रैफ़िक को एक एपीपी सर्वर पर स्विच कर सकते हैं। हम हर बार एडब्ल्यूएस आरडीएस मेंटेनेंस की घोषणा करते हैं ताकि डाउनटाइम के साथ-साथ हमारे शेड्यूल किए गए मेनटेनेंस से भी बचा जा सके।

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2

यहाँ विवरण हैं:

एम 1 - ओरिजिनल मास्टर

आर 1 - एम 1 की प्रतिकृति पढ़ें

SNAP1 - R1 का स्नैपशॉट

एम 2 - नए मास्टर

एम 2 निर्माण अनुक्रम: M1 → R1 → SNAP1 → M2

  • चूंकि हम RDS पर सुपर विशेषाधिकार का उपयोग नहीं कर सकते हैं, हम — master_data2M1 पर विकल्प के साथ mysqldump का उपयोग नहीं करते हैं । इसके बजाय, हम आर 1 को एम 1 के बिनलॉग स्थिति से प्राप्त करने के लिए लॉन्च करते हैं। फिर R1 से एक स्नैपशॉट (SNAP1) बनाएं और फिर SNAP1 से M2 लॉन्च करें।

  • पीके टकराव से बचने के लिए निम्नलिखित ऑफसेट के साथ दो अलग RDS पैरामीटर समूह बनाएं:

    M1: auto_increment_ increment = 4 and auto_increment_offset = 1

    M2: auto_increment_ increment = 4 and auto_increment_offset = 2

  • M1 पर प्रतिकृति उपयोगकर्ता बनाएँ

    GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;

1. M1 से R1 बनाएं

-- Connect to the R1 and stop replication
   CALL mysql.rds_stop_replication;
-- Obtain M1’s (!!) current binlog file and position 
        `mysql> show slave status\G
             Master_Log_File: mysql-bin.000622
             Exec_Master_Log_Pos: 9135555

2. R1 से SNAP1 बनाएं

  • M1 से प्राप्त विशेषताओं के साथ SNAP1 से M2 बनाएं

  • M / M प्रतिकृति कुंजी विरोध से बचने के लिए M1 से एक भिन्न auto_increment_ ऑफसेट के साथ M2 के लिए एक पैरामीटर समूह असाइन करें

4. सेटअप एम / एम प्रतिकृति

-- Configure M2 as a slave of M1
CALL mysql.rds_set_external_master (‘m1.xyxy24.us-east-1.rds.amazonaws.com’, 3306, repl’, mypassword’, mysql-bin.000622, 9135555, 0);
CALL mysql.rds_start_replication;
-- Connect to M2 and obtain its current binlog file and position
         mysql> show master status\G
            File: mysql-bin.004444
            Position: 6666622
-- Connect to M1 and configure it to be a slave of the M2
CALL mysql.rds_set_external_master (‘m2.xyxy24.us-east-1.rds.amazonaws.com’, 3306 , repl’, mypassword’, mysql-bin.004444, 6666622, 0);
CALL mysql.rds_start_replication;

5. R1 और SNAP1 को हटा दें क्योंकि उन्हें अब आवश्यकता नहीं है

6. एडब्ल्यूएस कंसोल के माध्यम से एम 2 को अपग्रेड करें

अपनी आवश्यकताओं के अनुसार इंस्टेंस को संशोधित करने के लिए मानक प्रक्रिया का उपयोग करें।

7. M2 को ग्रेसफुल स्विचओवर निष्पादित करें

जैसा कि एम / एम प्रतिकृति सफलतापूर्वक स्थापित किया गया है, हम समय पर ऐप सर्वरों को एक बार स्विच करके बिना डाउनटाइम डीबी रखरखाव के साथ आगे बढ़ने के लिए तैयार हैं।

यह कैसे काम करता है, इसके बारे में अधिक विवरण यहां दिए गए हैं।

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2


1

यह काम करेगा, हालाँकि आपको यह सुनिश्चित करना चाहिए कि RDS उदाहरण के समापन बिंदु आपके पास एक स्थिर प्रविष्टि के रूप में कॉन्फ़िगर नहीं किए गए हैं। RDS स्वैप करने से समापन बिंदु बदल जाएंगे।


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