हमें क्लस्टर में कुशल कार्यभार प्रबंधन के लिए क्लाइंट नोड्स पर प्रॉक्सीएसक्यूएल स्थापित करने पर विचार करना चाहिए, जो कि क्वेरी उत्पन्न करने वाले अनुप्रयोगों में किसी भी बदलाव के बिना है। यह Percona XtraDB क्लस्टर के लिए अनुशंसित उच्च-उपलब्धता समाधान है।
ProxySQL की कुछ लोकप्रिय विशेषताएं हैं:
- उच्च प्रदर्शन
- कुशल कार्यभार प्रबंधन
- क्वेरी कैशिंग
- क्वेरी रूटिंग
- विफलता का समर्थन करता है
- 0 डाउनटाइम के साथ उन्नत कॉन्फ़िगरेशन
- एप्लिकेशन परत प्रॉक्सी
- क्रॉस-प्लेटफ़ॉर्म
- उन्नत टोपोलॉजी समर्थन
- फ़ायरवॉल
पर्यावरण विशिष्टता:
192.168.56.115
सेंटोस
पूर्वापेक्षाएँ:
हमें सभी सर्वरों पर नीचे के पोर्ट खोलने होंगे
firewall-cmd --zone=public --add-service=mysql --permanent firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --add-port=4567/tcp --permanent firewall-cmd --zone=public --add-port=4568/tcp --permanent firewall-cmd --zone=public --add-port=4444/tcp --permanent firewall-cmd --zone=public --add-port=4567/udp --permanent
Linux फ़ायरवॉल में ProxySQL सर्विस पोर्ट 6033/tcp (यह MySQL डिफ़ॉल्ट पोर्ट 3306 के विपरीत है) की अनुमति दें।
firewall-cmd --permanent --add-port=6033/tcp firewall-cmd --reload
CentOS 7 पर Percona XtraDB क्लस्टर के लिए ProxySQL लोड बैलेंसर स्थापित करना
ProxySQL v2 मूल रूप से Percona XtraDB क्लस्टर का समर्थन करता है, ProxySql को स्थापित करने के लिए इसे percona रिपॉजिटरी से स्थापित करें
sudo yum install proxysql2
ProxySQL व्यवस्थापक इंटरफ़ेस से कनेक्ट करने के लिए, आपको एक MySQL क्लाइंट की आवश्यकता है।
yum install Percona-XtraDB-Cluster-client-57
अब प्रॉक्सीस्क्ल सेवा शुरू करें
[[email protected] ~]# systemctl start proxysql.service
क्लस्टर नोड पर पोर्ट की जांच करने के लिए नीचे दी गई क्वेरी का उपयोग करें।
mysql -uroot -p -e "SHOW GLOBAL VARIABLES LIKE 'PORT'";
अब ProxySQL व्यवस्थापक पैनल से कनेक्ट करें और लोड बैलेंसर को कॉन्फ़िगर करें।
mysql -u admin -p123 -h 127.0.0.1 -P6032 --prompt='ProxySQL> ' INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.110',3306); INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.113',3306); INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.114',3306); ProxySQL> SELECT * FROM mysql_servers; +--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | +--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | 0 | 192.168.56.110 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | | | 0 | 192.168.56.113 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | | | 0 | 192.168.56.114 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | | +--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 3 rows in set (0.00 sec)
ProxySQL नोड्स मॉनिटरिंग कॉन्फ़िगर करें:
उपयोग विशेषाधिकार के साथ निगरानी उपयोगकर्ता बनाने के लिए MySQL डेटाबेस इंस्टेंस में लॉग इन करें और निम्नलिखित कमांड निष्पादित करें
किसी भी पेरकोना नोड पर:
CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL'; GRANT USAGE ON *.* TO 'proxysql'@'%'; mysql> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL'; Query OK, 0 rows affected (0.01 sec) mysql> GRANT USAGE ON *.* TO 'proxysql'@'%'; Query OK, 0 rows affected (0.02 sec) UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username'; UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password'; LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK; ProxySQL> UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username'; Query OK, 1 row affected (0.01 sec) ProxySQL> UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password'; Query OK, 1 row affected (0.00 sec) ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME; Query OK, 0 rows affected (0.00 sec) ProxySQL> SAVE MYSQL VARIABLES TO DISK; Query OK, 136 rows affected (0.01 sec) ProxySQL> LOAD MYSQL SERVERS TO RUNTIME; Query OK, 0 rows affected (0.01 sec)
ProxySQL क्लाइंट उपयोगकर्ता बनाना
Provide read/write access to the cluster for ProxySQL, add this user on one of the Percona XtraDB Cluster nodes: CREATE USER 'lbuser'@'192.168.56.115' IDENTIFIED BY 'lbpass'; GRANT ALL ON *.* TO 'lbuser'@'192.168.56.115';
ProxySQL क्लाइंट उपयोगकर्ता बनाना:
ProxySQL> INSERT INTO mysql_users (username,password) VALUES ('lbuser','lbpass'); Query OK, 1 row affected (0.00 sec) ProxySQL> LOAD MYSQL USERS TO RUNTIME; Query OK, 0 rows affected (0.00 sec) ProxySQL> SAVE MYSQL USERS TO DISK; Query OK, 0 rows affected (0.02 sec)
पुष्टि करें कि उपयोगकर्ता को सही तरीके से सेट किया गया है, आप लॉग इन करने का प्रयास कर सकते हैं:
[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.30 (ProxySQL) Copyright (c) 2009-2019 Percona LLC and/or its affiliates Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
देखते हैं कि हमारा क्लाइंट किस नोड से क्लस्टर से जुड़ने वाला है।
[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;"; mysql: [Warning] Using a password on the command line interface can be insecure. +----------------------+ | @@hostname | +----------------------+ | percona3.localdomain | +----------------------+
आप देख सकते हैं कि प्रॉक्सी सर्वर percona3 से जुड़ा है
मैंने एक और पुट्टी सत्र से कोशिश की तो यह percona2 से जुड़ जाता है:
[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;"; mysql: [Warning] Using a password on the command line interface can be insecure. +----------------------+ | @@hostname | +----------------------+ | percona2.localdomain | +----------------------+
कुछ एकाधिक सत्रों के बाद यह percona1 से जुड़ जाता है:
[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;"; mysql: [Warning] Using a password on the command line interface can be insecure. +----------------------+ | @@hostname | +----------------------+ | percona1.localdomain | +----------------------+
MySQL वर्कबेंच से कनेक्ट करना:
MySQL कार्यक्षेत्र में मेरे सत्र का विन्यास नीचे दिया गया है:
मैंने यह देखने की कोशिश की कि कौन सा नोड MySQL Workbench से कनेक्ट होगा
विफलता:
अब हम जाँचेंगे कि यह विफलता कैसे करेगा
[[email protected] mysql]# service mysql stop Redirecting to /bin/systemctl stop mysql.service ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers; +--------------+----------------+------+---------+ | hostgroup_id | hostname | port | status | +--------------+----------------+------+---------+ | 0 | 192.168.56.110 | 3306 | ONLINE | | 0 | 192.168.56.114 | 3306 | SHUNNED | | 0 | 192.168.56.113 | 3306 | ONLINE | +--------------+----------------+------+---------+ 3 rows in set (0.01 sec)
अब नोड 3 पर फिर से mysql शुरू करें और प्रॉक्सी सर्वर से फिर से क्लस्टर स्थिति जांचें
[[email protected] mysql]#systemctl start mysql.service ProxySQL> SELECT hostgroup_id hg,count(status) cnt from main.runtime_mysql_servers WHERE status = "ONLINE" GROUP BY hg having cnt ; +----+-----+ | hg | cnt | +----+-----+ | 0 | 3 | +----+-----+ 1 row in set (0.00 sec) ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers; +--------------+----------------+------+--------+ | hostgroup_id | hostname | port | status | +--------------+----------------+------+--------+ | 0 | 192.168.56.110 | 3306 | ONLINE | | 0 | 192.168.56.114 | 3306 | ONLINE | | 0 | 192.168.56.113 | 3306 | ONLINE | +--------------+----------------+------+--------+ 3 rows in set (0.00 sec)
नोट: यदि आप नोड स्थिति को SHUNNED . के रूप में देखते हैं फिर एक से अधिक बार कनेक्ट करने का प्रयास करें ताकि क्लाइंट को क्लस्टर की नवीनतम स्थिति प्राप्त हो, क्योंकि पिछली बार जब इसे कनेक्ट करने का प्रयास किया गया था तब runtime_mysql_servers नोड की नवीनतम स्थिति को संग्रहीत करता है।
सिसबेंच के साथ परीक्षण क्लस्टर:
yum install sysbench
sysbench को ProxySQL क्लाइंट उपयोगकर्ता क्रेडेंशियल की आवश्यकता होती है जिसे आपने ProxySQL क्लाइंट उपयोगकर्ता बनाने में (lbuser/lbpass) बनाया था।
sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --mysql-host=127.0.0.1 --mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 --table-size=10000 prepare sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --events=0 --time=300 --mysql-host=27.0.0.1 --mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 --table-size=10000 --range_selects=off --db-ps-mode=disable --report-interval=1 run
क्लस्टर पर चलने वाले आदेशों की संख्या देखने के लिए:
proxysql> SELECT * FROM stats_mysql_commands_counters;