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

MySQL बिनलॉग सर्वर की खोज - रिपल

MySQL उन दासों की संख्या को सीमित नहीं करता है जिन्हें आप प्रतिकृति टोपोलॉजी में मास्टर सर्वर से कनेक्ट कर सकते हैं। हालाँकि, जैसे-जैसे दासों की संख्या बढ़ती है, उनके पास मास्टर संसाधनों पर एक टोल होगा क्योंकि बाइनरी लॉग को अलग-अलग गति से काम करने वाले विभिन्न दासों को परोसने की आवश्यकता होगी। यदि मास्टर पर डेटा मंथन अधिक है, तो केवल बाइनरी लॉग की सेवा मास्टर के नेटवर्क इंटरफ़ेस को संतृप्त कर सकती है।

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

Ripple, Pavel Ivanov द्वारा विकसित एक ओपन सोर्स बिनलॉग सर्वर है। पेरकोना की एक ब्लॉग पोस्ट, जिसका शीर्षक है MySQL रिपल:द फर्स्ट इम्प्रेशन ऑफ़ ए मायएसक्यूएल बिनलॉग सर्वर, रिपल को तैनात करने और उपयोग करने के लिए एक बहुत अच्छा परिचय देता है। मुझे रिपल को कुछ और विस्तार से जानने का अवसर मिला और मैं इस पोस्ट के माध्यम से अपनी टिप्पणियों को साझा करना चाहता था।

1. GTID आधारित प्रतिकृति के लिए समर्थन

Ripple केवल GTID मोड का समर्थन करता है, न कि फ़ाइल और स्थिति-आधारित प्रतिकृति का। यदि आपका मास्टर गैर-GTID मोड में चल रहा है, तो आपको यह त्रुटि Ripple से प्राप्त होगी:

पैकेट पढ़ने में विफल:सर्वर से पैकेट पढ़ने में त्रुटि मिली:प्रतिकृति प्रेषक थ्रेड AUTO_POSITION मोड में प्रारंभ नहीं हो सकता:इस सर्वर में ON के बजाय GTID_MODE =OFF है।

आप cmd लाइन विकल्पों का उपयोग करके रिपल सर्वर के लिए Server_id और UUID निर्दिष्ट कर सकते हैं:  -ripple_server_id और  -ripple_server_uuid

दोनों वैकल्पिक पैरामीटर हैं, और यदि निर्दिष्ट नहीं है, तो Ripple डिफ़ॉल्ट server_id=112211 का उपयोग करेगा और uuid स्वतः उत्पन्न हो जाएगा।

2. प्रतिकृति उपयोगकर्ता और पासवर्ड का उपयोग करके मास्टर से कनेक्ट करना

मास्टर से कनेक्ट करते समय, आप कमांड लाइन विकल्पों का उपयोग करके प्रतिकृति उपयोगकर्ता और पासवर्ड निर्दिष्ट कर सकते हैं:

 -ripple_master_user और  -ripple_master_password

3. रिपल सर्वर के लिए कनेक्शन समापन बिंदु

आप कमांड लाइन विकल्प -ripple_server_ports और -ripple_server_address का उपयोग Ripple सर्वर के लिए कनेक्शन समाप्ति बिंदु निर्दिष्ट करने के लिए कर सकते हैं। अपने रिपल सर्वर के नेटवर्क पहुंच योग्य होस्टनाम या आईपी पते को -rippple_server_address के रूप में निर्दिष्ट करना सुनिश्चित करें। अन्यथा, डिफ़ॉल्ट रूप से, रिपल लोकलहोस्ट से जुड़ जाएगा और इसलिए आप इसे दूर से कनेक्ट नहीं कर पाएंगे।

4. स्लेव्स को रिपल सर्वर पर सेट करना

आप अपने दासों को रिपल सर्वर से दोहराने के लिए कनेक्ट करने के लिए CHANGE MASTER TO कमांड का उपयोग कर सकते हैं।

यह सुनिश्चित करने के लिए कि Ripple उस पासवर्ड को प्रमाणित कर सकती है जिसे आप उससे कनेक्ट करने के लिए उपयोग करते हैं, आपको -ripple_server_password_hash

विकल्प निर्दिष्ट करके Ripple को प्रारंभ करना होगा।

उदाहरण के लिए, यदि आप कमांड के साथ रिपल सर्वर शुरू करते हैं:

रिपल्ड -ripple_datadir=./binlog_server -ripple_master_address=<मास्टर ip>   -ripple_master_port=3306 -ripple_master_user=repl -ripple_master_password='password' -ripple_server_ports=15000h -ripple_server_address='172.31. /कोड>

आप गुलाम से कनेक्ट करने के लिए निम्नलिखित चेंज मास्टर टू कमांड का उपयोग कर सकते हैं:

मास्टर को मास्टर_होस्ट में बदलें='172.31.23.201', मास्टर_पोर्ट=15000, मास्टर_पासवर्ड='XpKWeZRNH5#satCI', Master_user='rep'

ध्यान दें कि Ripple सर्वर के लिए निर्दिष्ट पासवर्ड हैश, CHANGE MASTER TO कमांड में उपयोग किए गए टेक्स्ट पासवर्ड से मेल खाता है। वर्तमान में, रिपल उपयोगकर्ता नामों के आधार पर प्रमाणित नहीं करता है और जब तक पासवर्ड मेल खाता है तब तक किसी भी गैर-खाली उपयोगकर्ता नाम को स्वीकार करता है।

MySQL बिनलॉग सर्वर को एक्सप्लोर करना - ट्वीट करने के लिए रिपलक्लिक करें

5. रिपल सर्वर प्रबंधन

किसी भी मानक MySQL क्लाइंट से MySQL प्रोटोकॉल का उपयोग करके Ripple सर्वर की निगरानी और प्रबंधन करना संभव है। कमांड के सीमित सेट हैं जो समर्थित हैं जिन्हें आप सीधे mysql-ripple GitHub पेज पर सोर्स कोड में देख सकते हैं।

कुछ उपयोगी कमांड हैं:

  • चुनें @@global.gtid_executed; - डाउनलोड किए गए बाइनरी लॉग के आधार पर रिपल सर्वर का जीटीआईडी ​​सेट देखने के लिए।
  • गुलाम बंद करो; - रिपल सर्वर को मास्टर से डिस्कनेक्ट करने के लिए।
  • स्टार्ट स्लेव; - रिपल सर्वर को मास्टर से जोड़ने के लिए।

ज्ञात मुद्दे और सुधार के लिए सुझाव

1. मुझे Ripple सर्वर से मास्टर तक SSL प्रतिकृति चैनल सेट करने का विकल्प नहीं दिखाई दिया

इसके परिणामस्वरूप, Ripple सर्वर उस मास्टर से कनेक्ट करने में सक्षम नहीं होगा जो एन्क्रिप्टेड कनेक्शन को अनिवार्य करता है। कनेक्ट करने का प्रयास करने पर त्रुटि होगी:

0322 09:01:36.555124 14942 mysql_master_session.cc:164] होस्ट से कनेक्ट होने में विफल:, पोर्ट:3306, त्रुटि:कनेक्ट करने में विफल:--require_secure_transport=ON के दौरान असुरक्षित ट्रांसपोर्ट का उपयोग करने वाले कनेक्शन निषिद्ध हैं।

2. मैं Ripple सर्वर को सेमी-सिंक विकल्प के साथ काम करने में सक्षम नहीं बना पाया

मैंने -ripple_semi_sync_slave_enabled=true

विकल्प का उपयोग करके रिपल सर्वर प्रारंभ किया

इसे कनेक्ट करने पर, मास्टर Ripple सर्वर को सेमी-सिंक सक्षम स्लेव के रूप में पहचानने में सक्षम था।

mysql> 'rpl%' जैसी स्थिति दिखाएं;
------------------------------------- ---------------------
| चर_नाम                            | मान |
------------------------------------------ ----------
| Rpl_semi_sync_master_clients                 | 1     |
| Rpl_semi_sync_master_status                  | चालू    |
| Rpl_semi_sync_slave_status                   | बंद   |
------------------------------------------ ----------

हालाँकि, सेमी-सिंक मोड में लेन-देन को निष्पादित करने का प्रयास करते हुए rpl_semi_sync_master_timeout की प्रतीक्षा की गई जो कि 180000 था

mysql> डेटाबेस बनाएं d12;
क्वेरी ठीक, 1 पंक्ति प्रभावित (3 मिनट 0.01 सेकंड)

मैं देख सकता था कि मास्टर पर सेमी-सिंक बंद हो गया था:

mysql> 'rpl%' जैसी स्थिति दिखाएं;
+-------------------------------- ------------+----------+
| चर_नाम                            | मूल्य |
+------------------------------------------ -+----------+
| Rpl_semi_sync_master_clients                 | 1     |
| Rpl_semi_sync_master_status                  | बंद   |
| Rpl_semi_sync_slave_status                   | बंद   |
+------------------------------------------ -+----------+

mysql त्रुटि लॉग से संबंधित स्निपेट:

2020-03-21टी10:05:56.000612जेड 52 [नोट] binlog_dump को मास्टर_थ्रेड_आईडी(52) स्लेव_सर्वर(112211), पॉज़(, 4)
2020-03-21टी10:05:56.000627जेड 52 पर शुरू करें [ नोट] सेमी-सिंक binlog_dump को स्लेव (server_id:112211), pos(, 4)
20020-03-21T10:08:55.873990Z 2 [चेतावनी] बिनलॉग के उत्तर की प्रतीक्षा में प्रारंभ करें (फ़ाइल:mysql-bin .000010, स्थिति:350), फ़ाइल तक सेमी-सिंक, स्थिति 4.
2020-03-21T10:08:55.874044Z 2 [नोट] सेमी-सिंक प्रतिकृति बंद है।

MySQL Ripple Github पेज पर इसी तरह की पंक्तियों के साथ एक समस्या की सूचना दी गई है।

3. रिपल सर्वर के दासों के लिए समानांतर प्रतिकृति का उपयोग करते समय समस्या

मैंने देखा कि दास पर SQL थ्रेड अक्सर त्रुटि के साथ बंद हो जाता है:

Last_SQL_Error:समांतर मोड में वर्तमान ईवेंट समूह को निष्पादित नहीं कर सकता। मुठभेड़ हुई घटना Gtid, रिले-लॉग नाम /mysql_data/relaylogs/relay-log.000005, स्थिति 27023962 जो समानांतर मोड में इस घटना समूह के निष्पादन को रोकता है। कारण:मास्टर इवेंट तार्किक रूप से गलत तरीके से टाइमस्टैम्प किया गया है।

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

इस अवलोकन को समस्या के रूप में रिपोर्ट किया गया है:बिनलॉग सर्वर #26 से सिंक करते समय गुलाम समानांतर थ्रेड विफलता

4. mysqlbinlog उपयोगिता Ripple सर्वर द्वारा निर्मित बाइनरी लॉग पर काम नहीं करती है

द्विआधारी लॉग पर mysqlbinlog उपयोगिता को चलाने के प्रयास के परिणामस्वरूप त्रुटि हुई:

त्रुटि:Log_event में त्रुटि ::read_log_event ():'बाइनरी लॉग में अमान्य घटना मिली', data_len:43, event_type:-106

यह मुद्दा यहां उठाया गया है:mysqlbinlog उपयोगिता का उपयोग करके बाइनरी लॉग फ़ाइलों को खोलने में सक्षम नहीं है। #25

लेखक ने इसे एक ज्ञात समस्या के रूप में स्वीकार किया है। मुझे लगता है कि डिबगिंग उद्देश्यों के लिए इस उपयोगिता का समर्थन करना उपयोगी होगा।

मेरे त्वरित परीक्षण से अभी के लिए यही रिपोर्ट है। जब भी मुझे रिपल पर और निष्कर्ष मिलते हैं, मैं इस ब्लॉग पोस्ट को अपडेट करने की योजना बना रहा हूं। कुल मिलाकर, मैंने इसे उपयोग करने के लिए सरल और सीधा पाया और इसमें MySQL वातावरण में बिनलॉग सर्वर के लिए एक मानक बनने की क्षमता है।

आपके लिए और टिप्स

MySQL सर्वर स्वास्थ्य जांच

MySQL मास्टर-स्लेव उच्च उपलब्धता (HA) सेटअप में, मास्टर और स्लेव सर्वर के स्वास्थ्य की लगातार निगरानी करना महत्वपूर्ण है ताकि आप संभावित मुद्दों का पता लगा सकें और सुधारात्मक कार्रवाई कर सकें। . अधिक जानें

MySQL रोलिंग इंडेक्स बनाता है

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

MySQL उच्च उपलब्धता

एक सिस्टम की उपलब्धता उस समय का प्रतिशत है जब उसकी सेवाएं किसी समयावधि के दौरान चालू होती हैं। इसे आम तौर पर 9′s की एक श्रृंखला के रूप में व्यक्त किया जाता है। एक वर्ष में मापी गई उपलब्धता और संबंधित डाउनटाइम देखें। अधिक जानें


  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 प्रतिकृति का उपयोग करके लाइव माइग्रेशन

  2. सर्वोत्तम अभ्यास बहु भाषा वेबसाइट

  3. PDO के साथ WHERE IN क्लॉज के लिए बाइंडिंग पैरामीटर्स

  4. MySQL स्थापना

  5. MySQL में BLOB और CLOB फाइलें कैसे डालें?