ProxySQL एक सिद्ध समाधान है जो डेटाबेस प्रशासकों को उनके डेटाबेस की उच्च उपलब्धता के लिए आवश्यकताओं से निपटने में मदद करता है। क्योंकि यह SQL-जागरूक है, इसका उपयोग डेटाबेस की ओर जाने वाले ट्रैफ़िक को आकार देने के लिए भी किया जा सकता है - आप क्वेरी को विशेष नोड्स पर रूट कर सकते हैं, आप क्वेरी को फिर से लिख सकते हैं, जिसकी आवश्यकता हो, आप ट्रैफ़िक को थ्रॉटल भी कर सकते हैं, SQL फ़ायरवॉल को लागू कर सकते हैं, बना सकते हैं अपने ट्रैफ़िक का दर्पण और उसे एक अलग होस्टग्रुप को भेजें।
ProxySQL 2.0.5 मूल रूप से गैलेरा क्लस्टर, MySQL प्रतिकृति और MySQL समूह प्रतिकृति का समर्थन करता है। दुर्भाग्य से, यह डिफ़ॉल्ट रूप से, AWS Aurora का समर्थन नहीं करता है; लेकिन अभी भी एक समाधान है जिसका आप उपयोग कर सकते हैं।
आप खुद से पूछ रहे होंगे, जब AWS मुझे एक एंडपॉइंट प्रदान करता है जो मेरे लिए रीड-राइट स्प्लिट करेगा, तो मुझे ProxySQL से परेशान क्यों होना चाहिए? वास्तव में ऐसा ही है लेकिन यह सिर्फ r/w विभाजन है। दूसरी ओर, ProxySQL आपको न केवल पढ़ने को लिखने से अलग करने का अवसर देता है, बल्कि आपके डेटाबेस ट्रैफ़िक को नियंत्रित करने का भी अवसर देता है। ProxySQL अक्सर केवल एक क्वेरी को फिर से लिखकर आपके डेटाबेस को ओवरलोड होने से बचा सकता है।
ProxySQL 2.0.5 और AWS Aurora
क्या आपको ProxySQL को आजमाने का निर्णय लेना चाहिए, आपको कुछ कदम उठाने होंगे। सबसे पहले, आपको ProxySQL को चालू करने के लिए EC2 इंस्टेंस की आवश्यकता होगी। एक बार जब आपके पास इंस्टेंस ऊपर और चल रहा हो, तो आप नवीनतम ProxySQL इंस्टॉल कर सकते हैं। हम उसके लिए रिपॉजिटरी का उपयोग करने की सलाह देंगे। आप दस्तावेज़ीकरण पृष्ठ में दिए गए चरणों का पालन करके इसे सेट कर सकते हैं:https://github.com/sysown/proxysql/wiki। Ubuntu 16.04 LTS के लिए, जिसका हमने उपयोग किया, आपको चलाना होगा:
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-2.0.x/$(lsb_release -sc)/ ./ \
| tee /etc/apt/sources.list.d/proxysql.list
फिर यह ProxySQL स्थापित करने का समय है:
apt-get update
apt-get install proxysql
फिर हमें यह सत्यापित करना होगा कि हमारे पास हमारे ProxySQL उदाहरण से AWS ऑरोरा नोड्स तक कनेक्टिविटी है। हम कनेक्टिविटी के लिए सीधे समापन बिंदुओं का उपयोग करेंगे।
हम टेलनेट का उपयोग करके पोर्ट 3306 पर सही एंडपॉइंट पर आसानी से कनेक्टिविटी का परीक्षण कर सकते हैं :
[email protected]:~# telnet dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306
Trying 10.0.0.53...
Connected to dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com.
Escape character is '^]'.
J
5.7.12_2>ZWP-&[Ov8NzJ:H#Mmysql_native_password^CConnection closed by foreign host.
पहला वाला अच्छा लगता है। हम दूसरे Aurora नोड के साथ आगे बढ़ेंगे:
[email protected]:~# telnet dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306
Trying 10.0.1.90...
Connected to dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com.
Escape character is '^]'.
J
tr3'3rynMmysql_native_password^CConnection closed by foreign host.
बहुत अच्छा काम करता है। यदि आप औरोरा नोड्स से कनेक्ट नहीं कर सकते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि सभी सुरक्षा बिट्स ठीक से संरेखित हैं:VPC कॉन्फ़िगरेशन की जाँच करें, देखें कि क्या ProxySQL नोड Aurora के VPC तक पहुँच सकता है, जाँच करें कि क्या सुरक्षा समूह ट्रैफ़िक को गुजरने देते हैं। यदि आपके पास अनुभव नहीं है तो AWS नेटवर्क सुरक्षा परत को कॉन्फ़िगर करना मुश्किल हो सकता है लेकिन अंत में आपको इसे काम करने में सक्षम होना चाहिए।
कनेक्टिविटी ठीक हो जाने के बाद हमें Aurora पर एक उपयोगकर्ता बनाना होगा। हम उस उपयोगकर्ता का उपयोग ProxySQL में औरोरा नोड्स की निगरानी के लिए करेंगे। सबसे पहले, हमें MySQL क्लाइंट को ProxySQL नोड पर स्थापित करना पड़ सकता है:
[email protected]:~# apt install mysql-client-core-5.7
फिर हम लेखक से जुड़ने और उस पर उपयोगकर्ता बनाने के लिए क्लस्टर के समापन बिंदु का उपयोग करेंगे:
[email protected]:~# mysql -h dbtest.cluster-cqb1vho43rod.eu-central-1.rds.amazonaws.com -u root -ppassword
mysql> CREATE USER 'monuser'@'10.0.0.191' IDENTIFIED BY 'mon1t0r';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT REPLICATION CLIENT ON *.* TO 'monuser'@'10.0.0.191';
Query OK, 0 rows affected (0.00 sec)
ऐसा करने के बाद हम मॉनिटर उपयोगकर्ता और उसके पासवर्ड को परिभाषित करने के लिए ProxySQL व्यवस्थापक इंटरफ़ेस (पोर्ट 6032 पर डिफ़ॉल्ट रूप से) में लॉग इन कर सकते हैं।
[email protected]:~# mysql -P6032 -u admin -padmin -h127.0.0.1
mysql> SET mysql-monitor_username='monuser';
Query OK, 1 row affected (0.00 sec)
mysql> SET mysql-monitor_password='mon1t0r';
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
mysql> SAVE MYSQL VARIABLES TO DISK;
Query OK, 116 rows affected (0.00 sec)
अब यह ProxySQL में ऑरोरा नोड्स को परिभाषित करने का समय है:
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (10, 'dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com'), (20, 'dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com');
Query OK, 2 rows affected (0.01 sec)
जैसा कि आप देख सकते हैं, हम होस्टनाम के रूप में उनके सीधे समापन बिंदुओं का उपयोग करते हैं। एक बार यह हो जाने के बाद, हम पाठक और लेखक होस्टग्रुप को परिभाषित करने के लिए mysql_replication_hostgroup तालिका का उपयोग करेंगे। हमें सही चेक प्रकार भी पास करना होगा - डिफ़ॉल्ट रूप से ProxySQL 'read_only' वेरिएबल की तलाश करता है जबकि ऑरोरा लेखक और पाठकों के बीच अंतर करने के लिए 'innodb_read_only' का उपयोग करता है।
mysql> SHOW CREATE TABLE mysql_replication_hostgroups\G
*************************** 1. row ***************************
table: mysql_replication_hostgroups
Create Table: CREATE TABLE mysql_replication_hostgroups (
writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),
check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only')) NOT NULL DEFAULT 'read_only',
comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))
1 row in set (0.00 sec)
mysql> INSERT INTO mysql_replication_hostgroups VALUES (10, 20, 'innodb_read_only', 'Aurora');
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
यही बात है, अब हम देख सकते हैं कि ProxySQL ने रनटाइम कॉन्फ़िगरेशन में नोड्स को कैसे कॉन्फ़िगर किया:
mysql> SELECT hostgroup_id, hostname, port FROM runtime_mysql_servers;
+--------------+-----------------------------------------------------------------------------+------+
| hostgroup_id | hostname | port |
+--------------+-----------------------------------------------------------------------------+------+
| 10 | | 3306 |
| 20 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
+--------------+-----------------------------------------------------------------------------+------+
3 rows in set (0.00 sec)
जैसा कि आप देख सकते हैं, dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com लेखक हैं। आइए अब विफलता का प्रयास करें:
mysql> SELECT hostgroup_id, hostname, port FROM runtime_mysql_servers;
+--------------+-----------------------------------------------------------------------------+------+
| hostgroup_id | hostname | port |
+--------------+-----------------------------------------------------------------------------+------+
| 10 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
| 20 | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |
+--------------+-----------------------------------------------------------------------------+------+
3 rows in set (0.00 sec)
जैसा कि आप देख सकते हैं, लेखक (होस्टग्रुप 10) दूसरे नोड में बदल गया है।
निष्कर्ष
यह मूल रूप से यही है - जैसा कि आप देख सकते हैं कि ProxySQL में AWS ऑरोरा नोड्स सेट करना काफी सरल प्रक्रिया है।