Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL या MariaDB Galera क्लस्टर को कैसे बूटस्ट्रैप करें - अपडेट किया गया

मानक MySQL सर्वर और MySQL क्लस्टर के विपरीत, MySQL/MariaDB गैलेरा क्लस्टर शुरू करने का तरीका थोड़ा अलग है। गैलेरा के लिए आवश्यक है कि आप एक क्लस्टर में एक संदर्भ बिंदु के रूप में एक नोड शुरू करें, इससे पहले कि शेष नोड्स क्लस्टर में शामिल होने और बनाने में सक्षम हों। इस प्रक्रिया को क्लस्टर बूटस्ट्रैप के रूप में जाना जाता है। बूटस्ट्रैपिंग डेटाबेस नोड को प्राथमिक घटक के रूप में पेश करने का एक प्रारंभिक चरण है, इससे पहले कि अन्य इसे डेटा सिंक करने के लिए संदर्भ बिंदु के रूप में देखें।

यह कैसे काम करता है?

जब गैलेरा एक नोड पर बूटस्ट्रैप कमांड से शुरू होता है, तो वह विशेष नोड प्राथमिक स्थिति तक पहुंच जाएगा (wsrep_cluster_status के मान की जांच करें)। शेष नोड्स को केवल एक सामान्य स्टार्ट कमांड की आवश्यकता होगी और वे स्वचालित रूप से क्लस्टर में मौजूदा प्राथमिक घटक (पीसी) की तलाश करेंगे और क्लस्टर बनाने के लिए जुड़ेंगे। डेटा सिंक्रोनाइज़ेशन तब या तो इंक्रीमेंटल स्टेट ट्रांसफर (IST) या स्नैपशॉट स्टेट ट्रांसफर (SST) के माध्यम से जॉइनर और डोनर के बीच होता है।

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

निम्नलिखित उदाहरण परिदृश्य बताते हैं कि नोड स्थिति (wsrep_local_state_comment) और क्लस्टर स्थिति (wsrep_cluster_status) के आधार पर तीन-नोड क्लस्टर को कब बूटस्ट्रैप करना है:

<टीडी>
  1. प्रारंभिक नोड को पुनरारंभ करें।
<टीडी>
  1. प्रारंभिक नोड को पुनरारंभ करें।
  2. एक बार हो जाने के बाद, नया नोड शुरू करें।
<टीडी>
  1. “pc.bootstrap=1” का उपयोग करके सबसे उन्नत नोड को बूटस्ट्रैप करें।
  2. शेष नोड्स को पुनरारंभ करें, एक बार में एक नोड।
<टीडी>
  1. नया नोड प्रारंभ करें।
<टीडी>
  1. नया नोड शुरू करें, एक बार में एक नोड।
<टीडी>
  1. किसी भी नोड को बूटस्ट्रैप करें।
  2. शेष नोड्स, एक बार में एक नोड प्रारंभ करें।
गैलेरा राज्य बूटस्ट्रैप फ़्लो

गैलेरा क्लस्टर कैसे शुरू करें?

3 गैलेरा विक्रेता विभिन्न बूटस्ट्रैपिंग कमांड का उपयोग करते हैं (सॉफ्टवेयर के नवीनतम संस्करण के आधार पर)। पहले नोड पर, रन करें:

  • MySQL गैलेरा क्लस्टर (कोडरशिप):

    $ service mysql bootstrap # sysvinit
    $ galera_new_cluster # systemd
    $ mysqld_safe --wsrep-new-cluster # command line
  • Percona XtraDB क्लस्टर (Percona):

    $ service mysql bootstrap-pxc # sysvinit
    $ systemctl start [email protected] # systemd
  • मारियाडीबी गैलेरा क्लस्टर (मारियाडीबी):

    $ service mysql bootstrap # sysvinit
    $ service mysql start --wsrep-new-cluster # sysvinit
    $ galera_new_cluster # systemd
    $ mysqld_safe --wsrep-new-cluster # command line

उपरोक्त आदेश सिर्फ एक आवरण है और यह वास्तव में क्या करता है उस नोड पर MySQL उदाहरण को gcomm:// के साथ wsrep_cluster_address चर के रूप में शुरू करना है। आप मैन्युअल रूप से my.cnf के अंदर चर को परिभाषित कर सकते हैं और मानक प्रारंभ/पुनरारंभ कमांड चला सकते हैं। हालांकि, शुरुआत के बाद सभी नोड्स के पते शामिल करने के लिए wsrep_cluster_address को फिर से बदलना न भूलें।

जब पहला नोड लाइव हो, तो बाद के नोड्स पर निम्न कमांड चलाएँ:

$ service mysql start
$ systemctl start mysql

नया नोड wsrep_cluster_address पैरामीटर द्वारा परिभाषित क्लस्टर सदस्यों से जुड़ता है। यह अब स्वचालित रूप से क्लस्टर मैप को पुनः प्राप्त करेगा और बाकी नोड्स से कनेक्ट होगा और एक क्लस्टर बनाएगा।

चेतावनी:जब आप किसी नोड को किसी मौजूदा क्लस्टर से फिर से कनेक्ट करना चाहते हैं तो कभी भी बूटस्ट्रैप न करें, और कभी भी एक से अधिक नोड पर बूटस्ट्रैप न चलाएं।

सुरक्षित से बूटस्ट्रैप फ़्लैग

संस्करण 3.19 से शुरू होने वाला गैलेरा grastate.dat के अंदर "safe_to_bootstrap" नामक एक नए ध्वज के साथ आता है। यह ध्वज निर्णय की सुविधा देता है और उस क्रम का ट्रैक रखते हुए असुरक्षित विकल्पों को रोकता है जिसमें नोड्स बंद किए जा रहे हैं। पिछले बंद किए गए नोड को "सुरक्षित-से-बूटस्ट्रैप" के रूप में चिह्नित किया जाएगा। अन्य सभी नोड्स को बूटस्ट्रैप से असुरक्षित के रूप में चिह्नित किया जाएगा।

Grastate.dat (डिफ़ॉल्ट MySQL डेटादिर के अंतर्गत है) सामग्री को देखते हुए और आपको अंतिम पंक्ति पर ध्वज को नोटिस करना चाहिए:

# GALERA saved state
version: 2.1
uuid:    8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno:   2575
safe_to_bootstrap: 0

नए क्लस्टर को बूटस्ट्रैप करते समय, गैलेरा पहले नोड को शुरू करने से इंकार कर देगा जिसे बूटस्ट्रैप से असुरक्षित के रूप में चिह्नित किया गया था। आप लॉग में निम्न संदेश देखेंगे:

“इस नोड से क्लस्टर को बूटस्ट्रैप करना सुरक्षित नहीं हो सकता है। यह क्लस्टर छोड़ने वाला अंतिम नहीं था और इसमें सभी अपडेट शामिल नहीं हो सकते थे।

इस नोड के साथ क्लस्टर बूटस्ट्रैप को बाध्य करने के लिए, grastate.dat फ़ाइल को मैन्युअल रूप से संपादित करें और safe_to_bootstrap को 1 पर सेट करें।"

अशुद्ध शटडाउन या हार्ड क्रैश के मामले में, सभी नोड्स में "safe_to_bootstrap:0" होगा, इसलिए हमें यह निर्धारित करने के लिए InnoDB स्टोरेज इंजन से परामर्श करना होगा कि किस नोड ने क्लस्टर में अंतिम लेनदेन किया है। यह प्रत्येक नोड पर "--wsrep-recover" चर के साथ mysqld शुरू करके प्राप्त किया जा सकता है, जो इस तरह एक आउटपुट उत्पन्न करता है:

$ mysqld --wsrep-recover
...
2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!
2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
...
2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428
...

"पुनर्प्राप्त स्थिति" लाइन पर यूयूआईडी स्ट्रिंग के बाद की संख्या देखने के लिए एक है। सबसे अधिक संख्या वाला नोड चुनें और "safe_to_bootstrap:1" सेट करने के लिए उसके grastate.dat को संपादित करें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

# GALERA saved state
version: 2.1
uuid:    8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno:   -1
safe_to_bootstrap: 1

फिर आप चुने हुए नोड पर मानक बूटस्ट्रैप कमांड निष्पादित कर सकते हैं।

क्या होगा यदि नोड्स अलग हो गए हैं?

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

यह निर्धारित करने के लिए कि किस नोड को बूटस्ट्रैप करने की आवश्यकता है, सभी डीबी नोड्स पर wsrep_last_committed मान की तुलना करें:

node1> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed | 10032       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+
node2> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed | 10348       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+
node3> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| wsrep_last_committed |   997       |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+

उपरोक्त आउटपुट से, नोड 2 में सबसे अद्यतित डेटा है। इस मामले में, सभी गैलेरा नोड्स पहले ही शुरू हो चुके हैं, इसलिए आपको क्लस्टर को फिर से बूटस्ट्रैप करने की आवश्यकता नहीं है। हमें केवल एक प्राथमिक घटक बनने के लिए नोड2 को बढ़ावा देने की आवश्यकता है:

node2> SET GLOBAL wsrep_provider_options="pc.bootstrap=1";

फिर शेष नोड प्राथमिक घटक (नोड2) से फिर से जुड़ जाएंगे और इस नोड के आधार पर अपने डेटा को फिर से सिंक करेंगे।

यदि आप ClusterControl का उपयोग कर रहे हैं (इसे मुफ़्त में आज़माएँ), तो आप सीधे ClusterControl> सिंहावलोकन से wsrep_last_committed और wsrep_cluster_status निर्धारित कर सकते हैं। पृष्ठ:

या ClusterControl> प्रदर्शन> DB स्थिति . से पेज:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL CAST - MySQL में कास्ट कैसे टाइप करें

  2. JSON_SET () बनाम JSON_INSERT () बनाम JSON_REPLACE () MySQL में:क्या अंतर है?

  3. MySQL में महीने और साल के हिसाब से ग्रुप करें

  4. लेफ्ट आउटर जॉइन मेरी लेफ्ट टेबल से सभी पंक्तियों को वापस नहीं करता है?

  5. PHPMyAdmin के साथ उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए प्रवेश निषेध