MySQL दुनिया में HAProxy और ProxySQL दोनों बहुत लोकप्रिय लोड बैलेंसर हैं, लेकिन उन दोनों प्रॉक्सी के बीच एक महत्वपूर्ण अंतर है। हम यहां विवरण में नहीं जाएंगे, आप HAProxy के बारे में HAProxy Tutorial में और ProxySQL के बारे में ProxySQL Tutorial में पढ़ सकते हैं। सबसे महत्वपूर्ण अंतर यह है कि ProxySQL SQL- जागरूक प्रॉक्सी है, यह ट्रैफ़िक को पार्स करता है और MySQL प्रोटोकॉल को समझता है और, जैसे, इसका उपयोग उन्नत ट्रैफ़िक को आकार देने के लिए किया जा सकता है - आप प्रश्नों को ब्लॉक कर सकते हैं, उन्हें फिर से लिख सकते हैं, उन्हें विशेष होस्ट पर निर्देशित कर सकते हैं, कैश उन्हें और बहुत कुछ। दूसरी ओर, HAProxy एक बहुत ही सरल लेकिन कुशल परत 4 प्रॉक्सी है और यह केवल पैकेट को बैकएंड पर भेजने के लिए करता है। ProxySQL का उपयोग रीड-राइट स्प्लिट करने के लिए किया जा सकता है - यह SQL को समझता है और इसे यह पता लगाने के लिए कॉन्फ़िगर किया जा सकता है कि कोई क्वेरी SELECT है या नहीं और तदनुसार उन्हें रूट करें:सभी नोड्स के लिए चयन, अन्य क्वेरी केवल मास्टर करने के लिए। यह सुविधा HAProxy में उपलब्ध नहीं है, जिसमें मास्टर और स्लेव के लिए दो अलग-अलग पोर्ट और दो अलग-अलग बैकएंड का उपयोग करना पड़ता है - एप्लिकेशन साइड पर रीड-राइट स्प्लिट निष्पादित किया जाना है।
ProxySQL में माइग्रेट क्यों करें?
ऊपर बताए गए अंतरों के आधार पर, हम कहेंगे कि HAProxy से ProxySQL पर स्विच करने का मुख्य कारण HAProxy में रीड-राइट स्प्लिट की कमी है। यदि आप MySQL डेटाबेस के क्लस्टर का उपयोग करते हैं, और यह वास्तव में कोई फर्क नहीं पड़ता कि यह एसिंक्रोनस प्रतिकृति या गैलेरा क्लस्टर है, तो शायद आप लिखने से पढ़ने को विभाजित करने में सक्षम होना चाहते हैं। MySQL प्रतिकृति के लिए, जाहिर है, यह आपके डेटाबेस क्लस्टर का उपयोग करने का एकमात्र तरीका होगा क्योंकि लिखने को हमेशा मास्टर को भेजना होता है। इसलिए यदि आप पठन-लेखन विभाजन नहीं कर सकते हैं, तो आप केवल मास्टर को ही प्रश्न भेज सकते हैं। गैलेरा के लिए पढ़ना-लिखना विभाजन जरूरी नहीं है, लेकिन निश्चित रूप से एक अच्छा है। निश्चित रूप से, आप सभी गैलेरा नोड्स को HAProxy में एक बैकएंड के रूप में कॉन्फ़िगर कर सकते हैं और उन सभी को राउंड-रॉबिन फैशन में ट्रैफ़िक भेज सकते हैं, लेकिन इसके परिणामस्वरूप कई नोड्स एक-दूसरे के साथ परस्पर विरोधी हो सकते हैं, जिससे गतिरोध और प्रदर्शन में गिरावट आ सकती है। हमने गैलेरा क्लस्टर के भीतर मुद्दों और बग्स को भी देखा है, जिसके लिए, जब तक उन्हें ठीक नहीं किया जाता है, तब तक वर्कअराउंड सभी राइट्स को एक नोड पर निर्देशित करना था। इस प्रकार, सभी लेखन को एक गैलेरा नोड में भेजना सबसे अच्छा अभ्यास है क्योंकि इससे अधिक स्थिर व्यवहार और बेहतर प्रदर्शन होता है।
प्रॉक्सीएसक्यूएल में प्रवास का एक और बहुत अच्छा कारण यातायात पर बेहतर नियंत्रण की आवश्यकता है। HAProxy के साथ आप कुछ नहीं कर सकते - यह सिर्फ ट्रैफिक को अपने बैकएंड पर भेजता है। ProxySQL के साथ आप क्वेरी नियमों का उपयोग करके अपने ट्रैफ़िक को आकार दे सकते हैं (नियमित अभिव्यक्तियों, उपयोगकर्ता, स्कीमा, स्रोत होस्ट और कई अन्य का उपयोग करके ट्रैफ़िक का मिलान)। आप OLAP SELECTs को एनालिटिक्स स्लेव पर रीडायरेक्ट कर सकते हैं (यह प्रतिकृति और गैलेरा दोनों के लिए सही है)। आप अपने मास्टर को उसमें से कुछ सेलेक्ट्स को रीडायरेक्ट करके ऑफलोड कर सकते हैं। आप SQL फ़ायरवॉल लागू कर सकते हैं। आप कुछ प्रश्नों में देरी जोड़ सकते हैं, यदि आप पूर्वनिर्धारित समय से अधिक समय लेते हैं तो आप प्रश्नों को मार सकते हैं। आप अनुकूलक संकेत जोड़ने के लिए प्रश्नों को फिर से लिख सकते हैं। वे सभी HAProxy के साथ संभव नहीं हैं।
HAProxy से ProxySQL में माइग्रेट कैसे करें?
सबसे पहले, निम्नलिखित टोपोलॉजी पर विचार करें...
ClusterControl MySQL टोपोलॉजी ClusterControl में MySQL प्रतिकृति क्लस्टरहमारे यहां एक प्रतिकृति क्लस्टर है जिसमें एक मास्टर और दो दास शामिल हैं। हमारे पास दो HAProxy नोड्स तैनात हैं, प्रत्येक दो बैकएंड का उपयोग करते हैं - मास्टर (लिखने) के लिए पोर्ट 3307 और सभी नोड्स (रीड्स) के लिए 3308 पर। Keepalived का उपयोग उन दो HAProxy उदाहरणों में एक वर्चुअल IP प्रदान करने के लिए किया जाता है - यदि उनमें से एक विफल हो जाता है, तो दूसरे का उपयोग किया जाएगा। हमारा एप्लिकेशन सीधे वीआईपी से जुड़ता है, इसके माध्यम से HAProxy उदाहरणों में से एक से। आइए मान लें कि हमारा एप्लिकेशन (हम Sysbench का उपयोग करेंगे) रीड-राइट स्प्लिट नहीं कर सकते हैं इसलिए हमें "राइटर" बैकएंड से जुड़ना होगा। परिणामस्वरूप, अधिकांश भार हमारे मास्टर (10.0.0.101) पर है।
ProxySQL में माइग्रेट करने के लिए क्या चरण होंगे? आइए एक पल के लिए इसके बारे में सोचें। सबसे पहले, हमें ProxySQL को परिनियोजित और कॉन्फ़िगर करना होगा। हमें ProxySQL में सर्वर जोड़ने होंगे, आवश्यक मॉनिटरिंग उपयोगकर्ता बनाने होंगे और उचित क्वेरी नियम बनाने होंगे। अंत में, हमें ProxySQL के शीर्ष पर Keepalived को तैनात करना होगा, एक और वर्चुअल IP बनाना होगा और फिर हमारे एप्लिकेशन के लिए HAProxy से ProxySQL में यथासंभव निर्बाध स्विच सुनिश्चित करना होगा।
आइए देखें कि हम इसे कैसे पूरा कर सकते हैं...
ProxySQL कैसे स्थापित करें
ProxySQL को कई तरह से स्थापित किया जा सकता है। आप या तो ProxySQL से रिपॉजिटरी का उपयोग कर सकते हैं (https://repo.proxysql.com) या यदि आप Percona XtraDB क्लस्टर का उपयोग करते हैं, तो आप Percona रिपॉजिटरी से ProxySQL भी इंस्टॉल कर सकते हैं, हालांकि इसके लिए कुछ अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता हो सकती है क्योंकि यह CLI पर निर्भर करता है। PXC के लिए बनाए गए व्यवस्थापक उपकरण। यह देखते हुए कि हम प्रतिकृति के बारे में बात कर रहे हैं, उनका उपयोग करना चीजों को और अधिक जटिल बना सकता है। अंत में, आप ProxySQL बायनेरिज़ को ProxySQL GitHub से डाउनलोड करने के बाद भी स्थापित कर सकते हैं। वर्तमान में दो स्थिर संस्करण हैं, 1.4.x और 2.0.x। सुविधाओं के संदर्भ में ProxySQL 1.4 और ProxySQL 2.0 के बीच अंतर हैं, इस ब्लॉग के लिए हम 1.4.x शाखा से चिपके रहेंगे, क्योंकि यह बेहतर परीक्षण किया गया है और सुविधा सेट हमारे लिए पर्याप्त है।
हम ProxySQL रिपॉजिटरी का उपयोग करेंगे और हम ProxySQL को दो अतिरिक्त नोड्स:10.0.0.103 और 10.0.0.104 पर तैनात करेंगे।
सबसे पहले, हम आधिकारिक रिपॉजिटरी का उपयोग करके ProxySQL स्थापित करेंगे। हम यह भी सुनिश्चित करेंगे कि MySQL क्लाइंट स्थापित है (हम इसका उपयोग ProxySQL को कॉन्फ़िगर करने के लिए करेंगे)। कृपया ध्यान रखें कि हम जिस प्रक्रिया से गुजरते हैं वह उत्पादन-ग्रेड नहीं है। उत्पादन के लिए आप कम से कम व्यवस्थापकीय उपयोगकर्ता के लिए डिफ़ॉल्ट क्रेडेंशियल बदलना चाहेंगे। आप कॉन्फ़िगरेशन की समीक्षा भी करना चाहेंगे और सुनिश्चित करेंगे कि यह आपकी अपेक्षाओं और आवश्यकताओं के अनुरूप है।
apt-get install -y lsb-release
wget -O - 'https://repo.proxysql.com/ProxySQL/repo_pub_key' | apt-key add -
echo deb https://repo.proxysql.com/ProxySQL/proxysql-1.4.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list
apt-get -y update
apt-get -y install proxysql
service proxysql start
अब, जैसा कि ProxySQL शुरू किया गया है, हम ProxySQL को कॉन्फ़िगर करने के लिए CLI का उपयोग करेंगे।
mysql -uadmin -padmin -P6032 -h127.0.0.1
सबसे पहले, हम बैकएंड सर्वर और प्रतिकृति होस्टग्रुप को परिभाषित करेंगे:
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (10, '10.0.0.101'), (20, '10.0.0.102'), (20, '10.0.0.103');
Query OK, 3 rows affected (0.91 sec)
mysql> INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 20);
Query OK, 1 row affected (0.00 sec)
हमारे पास तीन सर्वर हैं, हमने यह भी परिभाषित किया है कि प्रॉक्सीएसक्यूएल को मास्टर के लिए होस्टग्रुप 10 का उपयोग करना चाहिए (नोड के साथ रीड_ओनली =0) और होस्टग्रुप 20 दासों के लिए (read_only =1)।
अगले चरण के रूप में, हमें MySQL नोड्स पर एक निगरानी उपयोगकर्ता जोड़ने की आवश्यकता है ताकि ProxySQL उनकी निगरानी कर सके। हम डिफ़ॉल्ट के साथ जाएंगे, आदर्श रूप से आप ProxySQL में क्रेडेंशियल बदल देंगे।
mysql> SHOW VARIABLES LIKE 'mysql-monitor_username';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| mysql-monitor_username | monitor |
+------------------------+---------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'mysql-monitor_password';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| mysql-monitor_password | monitor |
+------------------------+---------+
1 row in set (0.00 sec)
इसलिए, हमें पासवर्ड 'मॉनिटर' के साथ उपयोगकर्ता 'मॉनिटर' बनाने की आवश्यकता है। ऐसा करने के लिए हमें मास्टर MySQL सर्वर पर निम्नलिखित अनुदान निष्पादित करने की आवश्यकता होगी:
mysql> create user [email protected]'%' identified by 'monitor';
Query OK, 0 rows affected (0.56 sec)
ProxySQL पर वापस - हमें उन उपयोगकर्ताओं को कॉन्फ़िगर करना होगा जिनका उपयोग हमारा एप्लिकेशन MySQL और क्वेरी नियमों तक पहुंचने के लिए करेगा, जिनका उद्देश्य हमें एक पठन-लेखन विभाजन देना है।
mysql> INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('sbtest', 'sbtest', 10);
Query OK, 1 row affected (0.34 sec)
mysql> INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (100, 1, '^SELECT.*FOR UPDATE$',10,1), (200,1,'^SELECT',20,1), (300,1,'.*',10,1);
Query OK, 3 rows affected (0.01 sec)
कृपया ध्यान दें कि हमने सादे पाठ में पासवर्ड का उपयोग किया है और हम इसे हैश करने के लिए प्रॉक्सीएसक्यूएल पर भरोसा करेंगे। सुरक्षा के लिए आपको स्पष्ट रूप से यहाँ MySQL पासवर्ड हैश पास करना चाहिए।
अंत में, हमें सभी परिवर्तन लागू करने होंगे।
mysql> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.02 sec)
mysql> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
mysql> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
mysql> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.07 sec)
mysql> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.02 sec)
हम रनटाइम से हैश किए गए पासवर्ड भी लोड करना चाहते हैं:रनटाइम कॉन्फ़िगरेशन में लोड होने पर सादे टेक्स्ट पासवर्ड हैश किए जाते हैं, इसे डिस्क पर हैश रखने के लिए हमें इसे रनटाइम से लोड करने और फिर डिस्क पर स्टोर करने की आवश्यकता होती है:
mysql> SAVE MYSQL USERS FROM RUNTIME;
Query OK, 0 rows affected (0.00 sec)
mysql> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.02 sec)
यह तब है जब ProxySQL की बात आती है। आगे के कदम उठाने से पहले आपको यह जांचना चाहिए कि क्या आप अपने एप्लिकेशन सर्वर से प्रॉक्सी से जुड़ सकते हैं।
[email protected]:~# mysql -h 10.0.0.103 -usbtest -psbtest -P6033 -e "SELECT * FROM sbtest.sbtest4 LIMIT 1\G"
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
id: 1
k: 50147
c: 68487932199-96439406143-93774651418-41631865787-96406072701-20604855487-25459966574-28203206787-41238978918-19503783441
pad: 22195207048-70116052123-74140395089-76317954521-98694025897
हमारे मामले में, सब कुछ अच्छा दिखता है। अब Keepalived को स्थापित करने का समय आ गया है।
इंस्टॉलेशन रखा गया
स्थापना काफी सरल है (कम से कम Ubuntu 16.04 पर, जिसका हमने उपयोग किया है):
apt install keepalived
फिर आपको दोनों सर्वरों के लिए कॉन्फ़िगरेशन फ़ाइलें बनानी होंगी:
मास्टर रखवाले नोड:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # verify the pid existance
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_HAPROXY {
interface eth1 # interface to monitor
state MASTER
virtual_router_id 52 # Assign one ID for this route
priority 101
unicast_src_ip 10.0.0.103
unicast_peer {
10.0.0.104
}
virtual_ipaddress {
10.0.0.112 # the virtual IP
}
track_script {
chk_haproxy
}
# notify /usr/local/bin/notify_keepalived.sh
}
बैकअप बनाए रखा नोड:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # verify the pid existance
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_HAPROXY {
interface eth1 # interface to monitor
state MASTER
virtual_router_id 52 # Assign one ID for this route
priority 100
unicast_src_ip 10.0.0.103
unicast_peer {
10.0.0.104
}
virtual_ipaddress {
10.0.0.112 # the virtual IP
}
track_script {
chk_haproxy
}
# notify /usr/local/bin/notify_keepalived.sh
बस इतना ही, आप दोनों नोड्स पर रख-रखाव शुरू कर सकते हैं:
service keepalived start
आपको लॉग में जानकारी देखनी चाहिए कि नोड्स में से एक ने मास्टर स्थिति में प्रवेश किया है और उस नोड पर वीआईपी लाया गया है।
May 7 09:52:11 vagrant systemd[1]: Starting Keepalive Daemon (LVS and VRRP)...
May 7 09:52:11 vagrant Keepalived[26686]: Starting Keepalived v1.2.24 (08/06,2018)
May 7 09:52:11 vagrant Keepalived[26686]: Opening file '/etc/keepalived/keepalived.conf'.
May 7 09:52:11 vagrant Keepalived[26696]: Starting Healthcheck child process, pid=26697
May 7 09:52:11 vagrant Keepalived[26696]: Starting VRRP child process, pid=26698
May 7 09:52:11 vagrant Keepalived_healthcheckers[26697]: Initializing ipvs
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Registering Kernel netlink reflector
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Registering Kernel netlink command channel
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Registering gratuitous ARP shared channel
May 7 09:52:11 vagrant systemd[1]: Started Keepalive Daemon (LVS and VRRP).
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Unable to load ipset library
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Unable to initialise ipsets
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Opening file '/etc/keepalived/keepalived.conf'.
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: Using LinkWatch kernel netlink reflector...
May 7 09:52:11 vagrant Keepalived_healthcheckers[26697]: Registering Kernel netlink reflector
May 7 09:52:11 vagrant Keepalived_healthcheckers[26697]: Registering Kernel netlink command channel
May 7 09:52:11 vagrant Keepalived_healthcheckers[26697]: Opening file '/etc/keepalived/keepalived.conf'.
May 7 09:52:11 vagrant Keepalived_healthcheckers[26697]: Using LinkWatch kernel netlink reflector...
May 7 09:52:11 vagrant Keepalived_vrrp[26698]: pid 26701 exited with status 256
May 7 09:52:12 vagrant Keepalived_vrrp[26698]: VRRP_Instance(VI_HAPROXY) Transition to MASTER STATE
May 7 09:52:13 vagrant Keepalived_vrrp[26698]: pid 26763 exited with status 256
May 7 09:52:13 vagrant Keepalived_vrrp[26698]: VRRP_Instance(VI_HAPROXY) Entering MASTER STATE
May 7 09:52:15 vagrant Keepalived_vrrp[26698]: pid 26806 exited with status 256
[email protected]:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ee:87:c4 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feee:87c4/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:fc:ac:21 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.103/24 brd 10.0.0.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.0.0.112/32 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefc:ac21/64 scope link
valid_lft forever preferred_lft forever
जैसा कि आप देख सकते हैं, नोड 10.0.0.103 पर एक वीआईपी (10.0.0.112) उठाया गया है। अब हम ट्रैफ़िक को पुराने सेटअप से नए सेटअप में ले जाकर समाप्त कर सकते हैं।
ट्रैफ़िक को ProxySQL सेटअप पर स्विच करना
इसे कैसे करना है इसके कई तरीके हैं, यह ज्यादातर आपके विशेष वातावरण पर निर्भर करता है। यदि आप अपने HAProxy VIP को इंगित करने वाले डोमेन को बनाए रखने के लिए DNS का उपयोग करते हैं, तो आप बस वहां एक बदलाव कर सकते हैं और, धीरे-धीरे, समय के साथ सभी कनेक्शन नए VIP को फिर से इंगित करेंगे। आप अपने आवेदन में बदलाव भी कर सकते हैं, खासकर यदि कनेक्शन विवरण हार्डकोड किया गया है - एक बार जब आप परिवर्तन को रोल आउट कर देंगे, तो नोड्स नए सेटअप से कनेक्ट होना शुरू हो जाएंगे। कोई फर्क नहीं पड़ता कि आप इसे कैसे करते हैं, वैश्विक स्विच करने से पहले नए सेटअप का परीक्षण करना बहुत अच्छा होगा। आपने निश्चित रूप से अपने मंचन वातावरण पर इसका परीक्षण किया है, लेकिन मुट्ठी भर ऐप सर्वरों को चुनना और उन्हें नए प्रॉक्सी पर पुनर्निर्देशित करना एक बुरा विचार नहीं है, यह निगरानी करते हुए कि वे प्रदर्शन-वार कैसे दिखते हैं। नीचे iptables का उपयोग करने वाला एक सरल उदाहरण दिया गया है, जो परीक्षण के लिए उपयोगी हो सकता है।
ProxySQL होस्ट पर, होस्ट 10.0.0.11 और पोर्ट 3307 से होस्ट 10.0.0.112 और पोर्ट 6033 पर ट्रैफ़िक रीडायरेक्ट करें:
iptables -t nat -A OUTPUT -p tcp -d 10.0.0.111 --dport 3307 -j DNAT --to-destination 10.0.0.112:6033
आपके एप्लिकेशन के आधार पर आपको वेब सर्वर या अन्य सेवाओं को पुनरारंभ करने की आवश्यकता हो सकती है (यदि आपका ऐप डेटाबेस से कनेक्शन का निरंतर पूल बनाता है) या बस प्रतीक्षा करें क्योंकि प्रॉक्सीएसक्यूएल के खिलाफ नए कनेक्शन खोले जाएंगे। आप सत्यापित कर सकते हैं कि ProxySQL ट्रैफ़िक प्राप्त कर रहा है:
mysql> show processlist;
+-----------+--------+--------+-----------+---------+---------+-----------------------------------------------------------------------------+
| SessionID | user | db | hostgroup | command | time_ms | info |
+-----------+--------+--------+-----------+---------+---------+-----------------------------------------------------------------------------+
| 12 | sbtest | sbtest | 20 | Sleep | 0 | |
| 13 | sbtest | sbtest | 10 | Query | 0 | DELETE FROM sbtest23 WHERE id=49957 |
| 14 | sbtest | sbtest | 10 | Query | 59 | DELETE FROM sbtest11 WHERE id=50185 |
| 15 | sbtest | sbtest | 20 | Query | 59 | SELECT c FROM sbtest8 WHERE id=46054 |
| 16 | sbtest | sbtest | 20 | Query | 0 | SELECT DISTINCT c FROM sbtest27 WHERE id BETWEEN 50115 AND 50214 ORDER BY c |
| 17 | sbtest | sbtest | 10 | Query | 0 | DELETE FROM sbtest32 WHERE id=50084 |
| 18 | sbtest | sbtest | 10 | Query | 26 | DELETE FROM sbtest28 WHERE id=34611 |
| 19 | sbtest | sbtest | 10 | Query | 16 | DELETE FROM sbtest4 WHERE id=50151 |
+-----------+--------+--------+-----------+---------+---------+-----------------------------------------------------------------------------+
बस यही था, हमने ट्रैफिक को HAProxy से ProxySQL सेटअप में स्थानांतरित कर दिया है। इसने कुछ कदम उठाए लेकिन सेवा में बहुत कम व्यवधान के साथ यह निश्चित रूप से संभव है।
ClusterControl का उपयोग करके HAProxy से ProxySQL में माइग्रेट कैसे करें?
पिछले भाग में हमने बताया कि कैसे ProxySQL सेटअप को मैन्युअल रूप से परिनियोजित करें और फिर उसमें माइग्रेट करें। इस खंड में हम यह बताना चाहेंगे कि ClusterControl का उपयोग करके समान उद्देश्य को कैसे पूरा किया जाए। प्रारंभिक सेटअप बिल्कुल वैसा ही है इसलिए हमें ProxySQL के परिनियोजन के साथ आगे बढ़ने की आवश्यकता है।
ClusterControl का उपयोग करके ProxySQL परिनियोजित करना
ClusterControl में ProxySQL का परिनियोजन केवल कुछ ही क्लिकों की बात है।
ProxySQL को ClusterControl में परिनियोजित करेंहमें एक नोड का आईपी या होस्टनाम चुनना था, सीएलआई प्रशासनिक उपयोगकर्ता और MySQL निगरानी उपयोगकर्ता के लिए क्रेडेंशियल पास करना था। हमने मौजूदा MySQL का उपयोग करने का निर्णय लिया और हमने 'sbtest'@'%' उपयोगकर्ता के लिए एक्सेस विवरण पारित किया जिसे हम एप्लिकेशन में उपयोग करते हैं। हमने लोड बैलेंसर में उपयोग किए जाने वाले नोड्स को चुना, हमने अधिकतम प्रतिकृति अंतराल को भी बढ़ाया (यदि वह सीमा पार हो गई है, तो प्रॉक्सीएसक्यूएल उस दास को यातायात नहीं भेजेगा) डिफ़ॉल्ट 10 सेकंड से 100 तक क्योंकि हम पहले से ही प्रतिकृति से पीड़ित हैं अंतराल थोड़ी देर के बाद ProxySQL नोड्स क्लस्टर में जुड़ जाएंगे।
ClusterControl का उपयोग करके ProxySQL के लिए Keepalived परिनियोजित करना
जब ProxySQL नोड्स जोड़े गए हैं, तो Keepalived को परिनियोजित करने का समय आ गया है।
ClusterControl में ProxySQL के साथ रखा गयाहमें बस इतना करना है कि हम कौन से प्रॉक्सीएसक्यूएल नोड्स को चुनना चाहते हैं, जिन्हें हम वर्चुअल आईपी और इंटरफेस पर तैनात करना चाहते हैं, जिससे वीआईपी बाध्य होगा। जब परिनियोजन पूरा हो जाएगा, तो हम ऊपर "प्रॉक्सीएसक्यूएल सेटअप पर ट्रैफ़िक स्विच करना" अनुभाग में उल्लिखित विधियों में से एक का उपयोग करके ट्रैफ़िक को नए सेटअप में बदल देंगे।
ClusterControl में ProxySQL ट्रैफ़िक की निगरानी करनाहम यह सत्यापित कर सकते हैं कि लोड ग्राफ़ को देखकर ट्रैफ़िक ProxySQL पर स्विच हो गया है - जैसा कि आप देख सकते हैं, क्लस्टर में नोड्स में लोड बहुत अधिक वितरित किया जाता है। आप इसे नीचे दिए गए ग्राफ़ पर भी देख सकते हैं, जो क्लस्टर में प्रश्नों के वितरण को दर्शाता है।
ClusterControl में ProxySQL डैशबोर्डअंत में, ProxySQL डैशबोर्ड यह भी दर्शाता है कि क्लस्टर में सभी नोड्स में ट्रैफ़िक वितरित किया गया है:
ClusterControl में ProxySQL डैशबोर्डहम आशा करते हैं कि आप इस ब्लॉग पोस्ट से लाभान्वित होंगे, जैसा कि आप देख सकते हैं, ClusterControl के नए आर्किटेक्चर को परिनियोजित करने में बस एक पल लगता है और चीजों को चलाने के लिए बस कुछ ही क्लिक की आवश्यकता होती है। हमें ऐसे माइग्रेशन के अपने अनुभव के बारे में बताएं।