अपने पिछले ब्लॉग में, हमने देखा कि MySQL के लिए RDS के साथ शुरुआत करना कितना आसान है। यह परिचालन ओवरहेड के बारे में चिंता किए बिना, MySQL को तैनात और उपयोग करने का एक सुविधाजनक तरीका है। ट्रेडऑफ हालांकि कम नियंत्रण है, क्योंकि खराब प्रदर्शन या परिचालन संबंधी विसंगतियों के मामले में उपयोगकर्ता पूरी तरह से अमेज़ॅन कर्मचारियों पर निर्भर हैं। डेटा निर्देशिका या भौतिक बैकअप तक कोई पहुँच नहीं होने से डेटा को RDS से बाहर ले जाना कठिन हो जाता है। यह एक बड़ी समस्या हो सकती है यदि आपका डेटाबेस RDS से आगे निकल जाता है, और आप किसी अन्य प्लेटफ़ॉर्म पर माइग्रेट करने का निर्णय लेते हैं। यह दो-भाग वाला ब्लॉग आपको दिखाता है कि RDS से अपने स्वयं के MySQL सर्वर पर ऑनलाइन माइग्रेशन कैसे करें।
हम अपना MySQL सर्वर चलाने के लिए EC2 का उपयोग करेंगे। यह आपके अपने निजी डेटा केंद्रों में अधिक जटिल माइग्रेशन के लिए पहला कदम हो सकता है। EC2 आपको अपने डेटा तक पहुंच प्रदान करता है ताकि एक्स्ट्राबैकअप का उपयोग किया जा सके। EC2 आपको SSH सुरंगों को स्थापित करने की भी अनुमति देता है और यह आपके ऑन-प्रिमाइसेस बुनियादी ढांचे और VPC के बीच हार्डवेयर VPN कनेक्शन स्थापित करने की आवश्यकता को हटा देता है।
मान्यताएं
शुरू करने से पहले, हमें कुछ धारणाएँ बनाने की ज़रूरत है - विशेष रूप से सुरक्षा के बारे में। सबसे पहले और सबसे महत्वपूर्ण, हम मानते हैं कि एडब्ल्यूएस के बाहर से आरडीएस इंस्टेंस पहुंच योग्य नहीं है। हम यह भी मानते हैं कि आपके पास EC2 में एक आवेदन है। इसका तात्पर्य यह है कि या तो आरडीएस इंस्टेंस और आपके बाकी बुनियादी ढांचे में एक वीपीसी है या उनके बीच एक्सेस कॉन्फ़िगर किया गया है, एक तरफ या दूसरे। संक्षेप में, हम मानते हैं कि आप एक नया EC2 इंस्टेंस बना सकते हैं और आपके MySQL RDS इंस्टेंस तक इसकी पहुंच होगी (या इसे एक्सेस करने के लिए कॉन्फ़िगर किया जा सकता है)।
हमने एप्लिकेशन होस्ट पर ClusterControl कॉन्फ़िगर किया है। हम इसका उपयोग अपने EC2 MySQL इंस्टेंस को प्रबंधित करने के लिए करेंगे।
प्रारंभिक सेटअप
हमारे मामले में, आरडीएस इंस्टेंस हमारे "एप्लिकेशन" (आईपी 172.30.4.228) के साथ ईसी 2 इंस्टेंस और होस्ट के साथ एक ही वीपीसी साझा करता है जो माइग्रेशन प्रक्रिया (आईपी 172.30.4.238 के साथ ईसी 2 इंस्टेंस) के लिए एक लक्ष्य होगा। एप्लिकेशन के रूप में हम निम्नलिखित तरीके से निष्पादित tpcc-MySQL बेंचमार्क का उपयोग करने जा रहे हैं:
./tpcc_start -h rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com -d tpcc1000 -u tpcc -p tpccpass -w 20 -r 60 -l 600 -i 10 -c 4
प्रारंभिक योजना
हम निम्न चरणों का उपयोग करके माइग्रेशन करने जा रहे हैं:
- ClusterControl का उपयोग करके अपना लक्षित परिवेश सेट करें - 172.30.4.238 पर MySQL स्थापित करें
- फिर, ProxySQL स्थापित करें, जिसका उपयोग हम विफलता के समय अपने ट्रैफ़िक को प्रबंधित करने के लिए करेंगे
- आरडीएस इंस्टेंस से डेटा डंप करें
- डेटा को हमारे लक्षित होस्ट में लोड करें
- आरडीएस उदाहरण और लक्ष्य होस्ट के बीच प्रतिकृति सेट करें
- आरडीएस से लक्ष्य होस्ट पर ट्रैफ़िक स्विच करें
ClusterControl का उपयोग करके पर्यावरण तैयार करें
यह मानते हुए कि हमारे पास ClusterControl स्थापित है (यदि आप नहीं करते हैं तो आप इसे यहां से प्राप्त कर सकते हैं:https://severalnines.com/download-clustercontrol-database-management-system), हमें अपना लक्ष्य होस्ट सेटअप करने की आवश्यकता है। हम उसके लिए ClusterControl से परिनियोजन विज़ार्ड का उपयोग करेंगे:
ClusterControl में डेटाबेस क्लस्टर परिनियोजित करना ClusterControl में डेटाबेस क्लस्टर परिनियोजित करना ClusterControl में डेटाबेस क्लस्टर परिनियोजित करनाएक बार ऐसा करने के बाद, आप क्लस्टर सूची में एक नया क्लस्टर (इस मामले में, केवल आपका एकल सर्वर) देखेंगे:
ClusterControl में डेटाबेस क्लस्टरअगला कदम ProxySQL को स्थापित करना होगा - ClusterControl 1.4 से शुरू करके आप इसे UI से आसानी से कर सकते हैं। हमने इस ब्लॉग पोस्ट में इस प्रक्रिया को विस्तार से कवर किया है। इसे स्थापित करते समय, हमने अपने एप्लिकेशन होस्ट (172.30.4.228) को प्रॉक्सीएसक्यूएल को स्थापित करने के लिए होस्ट के रूप में चुना। इंस्टॉल करते समय, आपको अपने ट्रैफ़िक को रूट करने के लिए एक होस्ट भी चुनना होगा। चूंकि हमारे पास क्लस्टर में केवल हमारा "गंतव्य" होस्ट है, आप इसे शामिल कर सकते हैं लेकिन फिर ट्रैफ़िक को RDS इंस्टेंस पर पुनर्निर्देशित करने के लिए कुछ बदलावों की आवश्यकता है।
यदि आपने ProxySQL सेटअप में गंतव्य होस्ट (हमारे मामले में यह 172.30.4.238) शामिल करना चुना है, तो आपको mysql_servers तालिका में निम्नलिखित प्रविष्टियां दिखाई देंगी:
mysql> select * from mysql_servers\G
*************************** 1. row ***************************
hostgroup_id: 20
hostname: 172.30.4.238
port: 3306
status: ONLINE
weight: 1
compression: 0
max_connections: 100
max_replication_lag: 10
use_ssl: 0
max_latency_ms: 0
comment: read server
*************************** 2. row ***************************
hostgroup_id: 10
hostname: 172.30.4.238
port: 3306
status: ONLINE
weight: 1
compression: 0
max_connections: 100
max_replication_lag: 10
use_ssl: 0
max_latency_ms: 0
comment: read and write server
2 rows in set (0.00 sec)
ClusterControl ने ProxySQL को बैकएंड सर्वर पर लिखने और पढ़ने के लिए होस्टग्रुप 10 और 20 का उपयोग करने के लिए कॉन्फ़िगर किया है। हमें वर्तमान में कॉन्फ़िगर किए गए होस्ट को उन होस्टग्रुप से हटाना होगा और वहां RDS इंस्टेंस जोड़ना होगा। सबसे पहले, हालांकि, हमें यह सुनिश्चित करना होगा कि प्रॉक्सीएसक्यूएल का मॉनिटर उपयोगकर्ता आरडीएस इंस्टेंस तक पहुंच सकता है।
mysql> SHOW VARIABLES LIKE 'mysql-monitor_username';
+------------------------+------------------+
| Variable_name | Value |
+------------------------+------------------+
| mysql-monitor_username | proxysql-monitor |
+------------------------+------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'mysql-monitor_password';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| mysql-monitor_password | monpass |
+------------------------+---------+
1 row in set (0.00 sec)
हमें इस उपयोगकर्ता को आरडीएस तक पहुंच प्रदान करने की आवश्यकता है। यदि हमें प्रतिकृति अंतराल को ट्रैक करने के लिए इसकी आवश्यकता है, तो उपयोगकर्ता को 'प्रतिकृति ग्राहक' विशेषाधिकार प्राप्त करना होगा। हमारे मामले में इसकी आवश्यकता नहीं है क्योंकि हमारे पास दास आरडीएस उदाहरण नहीं है - 'USAGE' पर्याप्त होगा।
[email protected]:~# mysql -ppassword -h rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 210
Server version: 5.7.16-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, 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> CREATE USER 'proxysql-monitor'@172.30.4.228 IDENTIFIED BY 'monpass';
Query OK, 0 rows affected (0.06 sec)
अब ProxySQL को फिर से कॉन्फ़िगर करने का समय आ गया है। हम लेखक (10) और पाठक (20) होस्टग्रुप दोनों में RDS उदाहरण जोड़ने जा रहे हैं। हम उन होस्टग्रुप से 172.30.4.238 को भी हटा देंगे - हम उन्हें केवल संपादित करेंगे और प्रत्येक होस्टग्रुप में 100 जोड़ देंगे।
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname, max_connections, max_replication_lag) VALUES (10, 'rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com', 100, 10);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname, max_connections, max_replication_lag) VALUES (20, 'rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com', 100, 10);
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE mysql_servers SET hostgroup_id=110 WHERE hostname='172.30.4.238' AND hostgroup_id=10;
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE mysql_servers SET hostgroup_id=120 WHERE hostname='172.30.4.238' AND hostgroup_id=20;
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
mysql> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.07 sec)
हमारे ट्रैफ़िक को पुनर्निर्देशित करने के लिए ProxySQL का उपयोग करने से पहले आवश्यक अंतिम चरण हमारे एप्लिकेशन उपयोगकर्ता को ProxySQL में जोड़ना है।
mysql> INSERT INTO mysql_users (username, password, active, default_hostgroup) VALUES ('tpcc', 'tpccpass', 1, 10);
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK; SAVE MYSQL USERS TO MEMORY;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT username, password FROM mysql_users WHERE username='tpcc';
+----------+-------------------------------------------+
| username | password |
+----------+-------------------------------------------+
| tpcc | *8C446904FFE784865DF49B29DABEF3B2A6D232FC |
+----------+-------------------------------------------+
1 row in set (0.00 sec)
त्वरित नोट - हमने "मेमोरी में MYSQL उपयोगकर्ताओं को सहेजें" क्रियान्वित किया; केवल RUNTIME में ही नहीं बल्कि वर्किंग मेमोरी बफर में भी पासवर्ड हैश किया गया है। आप ProxySQL के पासवर्ड हैशिंग तंत्र के बारे में उनके दस्तावेज़ीकरण में अधिक जानकारी प्राप्त कर सकते हैं।
अब हम अपने ट्रैफिक को ProxySQL पर रीडायरेक्ट कर सकते हैं। यह कैसे करना है यह आपके सेटअप पर निर्भर करता है, हमने अभी tpcc को पुनरारंभ किया है और इसे ProxySQL पर इंगित किया है।
ProxySQL के साथ ट्रैफ़िक को पुनर्निर्देशित करनाइस बिंदु पर, हमने एक लक्षित वातावरण बनाया है जिसमें हम माइग्रेट करेंगे। हमने ProxySQL भी तैयार किया और इसे अपने एप्लिकेशन के उपयोग के लिए कॉन्फ़िगर किया। अब हमारे पास अगले चरण के लिए एक अच्छा आधार है, जो वास्तविक डेटा माइग्रेशन है। अगली पोस्ट में, हम आपको दिखाएंगे कि RDS से डेटा को हमारे अपने MySQL इंस्टेंस (EC2 पर चलने वाले) में कैसे कॉपी किया जाए। हम आपको यह भी दिखाएंगे कि ट्रैफ़िक को अपने स्वयं के उदाहरण में कैसे स्विच किया जाए, जबकि एप्लिकेशन बिना डाउनटाइम के उपयोगकर्ताओं की सेवा करना जारी रखते हैं।