पिछले ब्लॉग (भाग 1 और भाग 2) में, हमने चर्चा की थी कि कैसे अपने RDS डेटा को EC2 उदाहरण में माइग्रेट किया जाए। इस प्रक्रिया में, हम अपने डेटा को RDS से बाहर ले जाने में कामयाब रहे, लेकिन हम अभी भी AWS पर चल रहे हैं। यदि आप अपने डेटा को पूरी तरह से अमेज़ॅन वेब सेवाओं से बाहर ले जाना चाहते हैं, तो कुछ और काम करना है। आज के ब्लॉग पोस्ट में, हम आपको दिखाएंगे कि यह कैसे किया जा सकता है।
पर्यावरण परिचय
जिस वातावरण के साथ हम काम कर रहे हैं, वह काफी हद तक वैसा ही है जैसा हमने श्रृंखला में अपनी पिछली पोस्ट पर समाप्त किया था। फर्क सिर्फ इतना है कि कोई कटओवर नहीं हुआ, क्योंकि हम AWS से बाहर निकलने की प्रक्रिया में एक मध्यवर्ती चरण के रूप में EC2 इंस्टेंस का उपयोग करेंगे।
प्रारंभिक अवसंरचना सेटअपकार्य योजना
संबंधित संसाधन क्लाउड में MySQL - Amazon RDS से EC2 इंस्टेंस में ऑनलाइन माइग्रेशन (भाग 1) क्लाउड में MySQL - Amazon RDS से आपके अपने सर्वर पर ऑनलाइन माइग्रेशन (भाग 2) क्लाउड में MySQL - Amazon RDS के पेशेवरों और विपक्षपिछले ब्लॉग में, हमने सबसे पहले अपने डेटा को RDS से EC2 इंस्टेंस में माइग्रेट किया था, जिस पर हमारी पूरी पहुँच है। चूंकि हमारे पास पहले से ही हमारे ईसी 2 इंस्टेंस पर MySQL चल रहा है, हमारे पास हमारे डेटा को दूसरे क्लाउड पर कॉपी करने के तरीके के बारे में चुनने के लिए और विकल्प हैं। DigitalOcean का उपयोग केवल यहाँ डेमो उद्देश्यों के लिए किया जाता है, जिस प्रक्रिया का हम नीचे वर्णन करते हैं उसका उपयोग किसी अन्य होस्टिंग या क्लाउड प्रदाता को माइग्रेट करने के लिए किया जा सकता है। आपको वीपीएस इंस्टेंस तक सीधी पहुंच की आवश्यकता होगी। इस प्रक्रिया में, हम डेटा को कॉपी करने के लिए xtrabackup का उपयोग करेंगे (हालाँकि बाइनरी ट्रांसफर के किसी अन्य तरीके का उपयोग करना बिल्कुल ठीक है)। हमें AWS और DigitalOcean के बीच एक सुरक्षित कनेक्शन तैयार करना होगा। एक बार जब हम ऐसा कर लेते हैं, तो हम EC2 उदाहरण से एक DigitalOcean छोटी बूंद में प्रतिकृति स्थापित करेंगे। अगला कदम एक कटओवर करना और एप्लिकेशन को स्थानांतरित करना होगा, लेकिन हम इसे यहां कवर नहीं करेंगे।
कनेक्टिविटी विधि पर निर्णय लेना
Amazon Web Services आपको बाहरी नेटवर्क से कनेक्शन बनाने के लिए कई अलग-अलग तरीकों से चुनने की अनुमति देती है। यदि आपके पास एक हार्डवेयर उपकरण है जो वीपीएन कनेक्शन का समर्थन करता है, तो आप इसका उपयोग एडब्ल्यूएस में अपने वीपीसी और अपने स्थानीय बुनियादी ढांचे के बीच वीपीएन कनेक्शन बनाने के लिए कर सकते हैं। यदि आपका नेटवर्क प्रदाता आपको एडब्ल्यूएस नेटवर्क के साथ एक पीयरिंग कनेक्शन प्रदान करता है और आपके पास बीजीपी राउटर है, तो आप एडब्ल्यूएस डायरेक्ट कनेक्ट के माध्यम से अपने नेटवर्क और एडब्ल्यूएस के बीच सीधा वीएलएएन कनेक्शन प्राप्त कर सकते हैं। यदि आपके पास एकाधिक, अलग-थलग नेटवर्क हैं, तो आप उन्हें AWS VPN CloudHub का उपयोग करके Amazon के साथ जोड़ सकते हैं। अंत में, चूंकि EC2 इंस्टेंस आपके प्रबंधन के लिए हैं, आप OpenVPN जैसे सॉफ़्टवेयर समाधानों का उपयोग करके उस EC2 इंस्टेंस और अपने स्थानीय नेटवर्क के बीच एक VPN भी सेट कर सकते हैं।
जैसा कि हम डेटाबेस की बात कर रहे हैं, आप EC2 (मास्टर) पर MySQL और DigitalOcean पर चलने वाले स्लेव के बीच SSL प्रतिकृति सेटअप करने का निर्णय भी ले सकते हैं। - हमें अभी भी यह पता लगाना है कि दास को प्रारंभिक डेटा स्थानांतरण कैसे करना है - एक समाधान xtrabackup के आउटपुट को टैर करना, उस फ़ाइल को एन्क्रिप्ट करना और इसे WAN (rsync) के माध्यम से भेजना या S3 बाल्टी पर अपलोड करना और फिर इसे डाउनलोड करना हो सकता है। वहां से। आप SSH एन्क्रिप्शन पर भी भरोसा कर सकते हैं और बस scp (या यहां तक कि rsync, SSH का उपयोग करके) डेटा को नए स्थान पर ले जा सकते हैं।
चुनने के लिए कई विकल्प हैं। हालांकि हम एक और समाधान का उपयोग करेंगे - हम एक सुरक्षित चैनल बनाने के लिए EC2 उदाहरण और हमारे DigitalOcean छोटी बूंद के बीच एक SSH सुरंग स्थापित करने जा रहे हैं जिसका उपयोग हम डेटा को दोहराने के लिए करेंगे। SSH कनेक्शन पर rsync का उपयोग करके प्रारंभिक स्थानांतरण किया जाएगा।
डेटाबेस प्रबंधन के लिए डिवाइप्स मार्गदर्शिका जानें कि आपको अपने ओपन सोर्स डेटाबेस को स्वचालित और प्रबंधित करने के लिए क्या जानना आवश्यक है मुफ्त में डाउनलोड करेंDigitalOcean में डेटा कॉपी करना
एक बार जब हमारे पास MySQL 5.7 है और DigitalOcean इंस्टेंस पर चल रहा है, तो हमें EC2 इंस्टेंस का बैकअप लेना होगा और फिर इसे DO में ट्रांसफर करना होगा। तकनीकी रूप से, नोड्स के बीच एक्स्ट्राबैकअप डेटा की सीधी स्ट्रीमिंग करना संभव होना चाहिए, लेकिन हम वास्तव में इसकी अनुशंसा नहीं कर सकते। WAN लिंक अविश्वसनीय हो सकते हैं, और बेहतर होगा कि स्थानीय रूप से बैकअप लें और फिर जब भी कुछ सही न हो तो स्थानांतरण को पुनः प्रयास करने की क्षमता के साथ rsync का उपयोग करें।
सबसे पहले, आइए हमारे EC2 इंस्टेंस का बैकअप लें:
[email protected]:~# innobackupex --user=tpcc --password=tpccpass /tmp/backup
एक बार यह तैयार हो जाने के बाद हमें इसे DigitalOcean नेटवर्क में स्थानांतरित करने की आवश्यकता है। इसे सुरक्षित तरीके से करने के लिए, हम डीओ ड्रॉपलेट पर एक नया उपयोगकर्ता बनाएंगे, एक एसएसएच कुंजी उत्पन्न करेंगे और डेटा की प्रतिलिपि बनाने के लिए इस उपयोगकर्ता का उपयोग करेंगे। बेशक, आप किसी भी मौजूदा उपयोगकर्ता का भी उपयोग कर सकते हैं, नया बनाने की आवश्यकता नहीं है। तो, चलिए एक नया उपयोगकर्ता जोड़ते हैं। ऐसा करने के कई तरीके हैं, हम 'adduser' कमांड का उपयोग करेंगे।
[email protected]:~# adduser rdscopy
Adding user `rdscopy' ...
Adding new group `rdscopy' (1001) ...
Adding new user `rdscopy' (1001) with group `rdscopy' ...
Creating home directory `/home/rdscopy' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for rdscopy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
अब, कनेक्टिविटी के लिए उपयोग करने के लिए ssh कुंजियों की एक जोड़ी उत्पन्न करने का समय आ गया है:
[email protected]:~# ssh-keygen -C 'rdscopy' -f id_rsa_rdscopy -t rsa -b 4096
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_rdscopy.
Your public key has been saved in id_rsa_rdscopy.pub.
The key fingerprint is:
3a:b0:d2:80:5b:b8:60:1b:17:58:bd:8e:74:c9:56:b3 rdscopy
The key's randomart image is:
+--[ RSA 4096]----+
| .. |
| o . o |
| . .. + o |
| o ..* E |
|+o+.* S |
|o+++ + . |
|o.. o o |
| . . |
| |
+-----------------+
SSH कुंजी होने के कारण, हमें इसे अपने डिजिटल महासागर की छोटी बूंद पर स्थापित करने की आवश्यकता है। हमें .ssh निर्देशिका बनाने और उचित एक्सेस अनुमतियों के साथ अधिकृत_की फ़ाइल बनाने की आवश्यकता है।
[email protected]:~# mkdir /home/rdscopy/.ssh
[email protected]:~# cat id_rsa_rdscopy.pub > /home/rdscopy/.ssh/authorized_keys
[email protected]:~# chown rdscopy.rdscopy /home/rdscopy/.ssh/authorized_keys
[email protected]:~# chmod 600 /home/rdscopy/.ssh/authorized_keys
फिर, हमें अपनी निजी कुंजी को EC2 उदाहरण में कॉपी करने की आवश्यकता है। जब हम इसके साथ तैयार हो जाते हैं, तो हम अपने डेटा को कॉपी कर सकते हैं। जैसा कि हमने पहले उल्लेख किया है, हम इसके लिए rsync का उपयोग करेंगे - यह हमें हस्तांतरण को फिर से शुरू करने देगा, अगर किसी भी कारण से, प्रक्रिया बाधित हो जाती है। SSH के साथ, हमने WAN पर डेटा कॉपी करने का एक सुरक्षित और मजबूत तरीका बनाया है। आइए EC2 होस्ट पर rsync शुरू करें:
[email protected]:~# rsync -avz -e "ssh -i id_rsa_rdscopy -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /tmp/backup/2017-02-20_16-34-18/ [email protected]:/home/rdscopy
थोड़ी देर के बाद, जो डेटा की मात्रा और स्थानांतरण गति पर निर्भर करेगा, हमारा बैकअप डेटा DigitalOcean छोटी बूंद पर उपलब्ध हो जाना चाहिए। इसका मतलब यह है कि यह InnoDB redo logs को लागू करके इसे तैयार करने का समय है, और फिर इसे वापस MySQL डेटा निर्देशिका में कॉपी कर रहा है। उसके लिए हमें MySQL को रोकना होगा, वर्तमान डेटा निर्देशिका को हटाना होगा, फ़ाइलों को या तो innobackupex या मैन्युअल रूप से कॉपी करना होगा, और अंत में, सत्यापित करना होगा कि नई फ़ाइलों के लिए स्वामी और समूह mysql पर सेट है:
[email protected]:~# innobackupex --apply-log /home/rdscopy/
[email protected]:~# service mysql stop
[email protected]:~# rm -rf /var/lib/mysql/*
[email protected]:~# innobackupex --copy-back /home/rdscopy/
[email protected]:~# chown -R mysql.mysql /var/lib/mysql
MySQL शुरू करने से पहले, हमें यह भी सुनिश्चित करना होगा कि server_id और UUID दोनों अलग-अलग हैं। पूर्व को my.cnf में संपादित किया जा सकता है, बाद वाले को निम्न द्वारा आश्वस्त किया जा सकता है:
[email protected]:~# rm /var/lib/mysql/auto.cnf
अब, हम MySQL शुरू कर सकते हैं:
[email protected]:~# service mysql start
प्रतिकृति सेट करना
हम EC2 और DO के बीच प्रतिकृति स्थापित करने के लिए तैयार हैं, लेकिन पहले हमें एक ssh सुरंग स्थापित करने की आवश्यकता है - हम EC2 उदाहरण पर ubuntu उपयोगकर्ता के लिए एक अतिरिक्त ssh कुंजी बनाएंगे और इसे DO उदाहरण में कॉपी करेंगे। फिर हम एक सुरंग बनाने के लिए ubuntu उपयोगकर्ता का उपयोग करेंगे जिसका उपयोग हम प्रतिकृति के लिए करेंगे।
आइए नई ssh कुंजी बनाकर शुरू करें:
[email protected]:~# ssh-keygen -C 'tunnel' -f id_rsa_tunnel -t rsa -b 4096
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_tunnel.
Your public key has been saved in id_rsa_tunnel.pub.
The key fingerprint is:
c4:44:79:39:9c:c6:ce:45:bb:13:e5:6f:c5:d9:8c:14 tunnel
The key's randomart image is:
+--[ RSA 4096]----+
| .o+ +. E. |
| o. O .= +o|
| o= oo o.=|
| . o o ..|
| S o o|
| . . |
| |
| |
| |
+-----------------+
अगला चरण - हमें अपनी सार्वजनिक कुंजी को EC2 उदाहरण पर अधिकृत_की फ़ाइल में जोड़ना होगा, जिससे हम सुरंग बनाने के लिए DigitalOcean से कनेक्ट होंगे।
[email protected]:~# cat id_rsa_tunnel.pub >> /home/ubuntu/.ssh/authorized_keys
डीओ ड्रॉपलेट में स्थानांतरित होने के लिए हमें एक निजी कुंजी की भी आवश्यकता होती है। यह कई तरीकों से किया जा सकता है, लेकिन हम पहले बनाए गए rdscopy उपयोगकर्ता और कुंजी का उपयोग करके सुरक्षित scp का उपयोग करेंगे:
[email protected]:~# scp -i id_rsa_rdscopy id_rsa_tunnel [email protected]:/home/rdscopy
id_rsa_tunnel 100% 3247 3.2KB/s 00:00
हमें बस इतना ही चाहिए - अब हम SSH टनल बना सकते हैं। हम चाहते हैं कि यह हर समय उपलब्ध रहे, इसलिए हम इसके लिए स्क्रीन सत्र का उपयोग करेंगे।
[email protected]:~# screen -S tunnel
[email protected]:~# ssh -L 3307:localhost:3306 [email protected] -i /home/rdscopy/id_rsa_tunnel
हमने यहां जो किया वह लोकलहोस्ट, पोर्ट 3307 और रिमोट होस्ट, 54.224.107.6, पोर्ट 3306 के बीच "उबंटू" उपयोगकर्ता और /home/rdscopy/id_rsa_tunnel में स्थित एक कुंजी का उपयोग करके एक एसएसएच सुरंग खोलना था। स्क्रीन सत्र को अलग करें और दूरस्थ होस्ट 127.0.0.1:3307 के माध्यम से उपलब्ध होना चाहिए।
प्रतिकृति सेटअप करने के लिए, हमें अभी भी n उपयोगकर्ता जोड़ने की आवश्यकता है जिसका उपयोग हम EC2 पर MySQL से कनेक्ट करने के लिए करेंगे। हम इसे EC2 होस्ट पर बनाएंगे और हम होस्ट के रूप में '127.0.0.1' का उपयोग करेंगे - SSH सुरंग के माध्यम से कनेक्शन ऐसे दिखेंगे जैसे वे लोकलहोस्ट से आए हों:
mysql> CREATE USER [email protected] IDENTIFIED BY 'rds_rpl_pass';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected];
Query OK, 0 rows affected (0.00 sec)
सभी प्रतिकृति सेटअप करने के लिए तैयार हैं, अब समय आ गया है कि एक्स्ट्राबैकअप डेटा के आधार पर स्लेव बनाने की पारंपरिक प्रक्रिया का पालन किया जाए। बैकअप के समय मास्टर स्थिति की पहचान करने के लिए हमें xtrabackup_binlog_info से डेटा का उपयोग करने की आवश्यकता है। यह स्थिति वह है जिसे हम अपने चेंज मास्टर टू ... कमांड में उपयोग करना चाहते हैं। आइए xtrabackup_binlog_info फ़ाइल की सामग्री पर एक नज़र डालें:
[email protected]:~# cat /home/rdscopy/xtrabackup_binlog_info
binlog.000052 896957365
यह बाइनरी लॉग फ़ाइल और स्थिति है जिसका उपयोग हम अपने चेंज मास्टर टू में करेंगे:
[email protected]:~# mysql -u root -ppass
mysql> CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3307, MASTER_USER='rds_rpl', MASTER_PASSWORD='rds_rpl_pass', MASTER_LOG_FILE='binlog.000052', MASTER_LOG_POS=896957365; START SLAVE;
यह वह है - प्रतिकृति अब ऊपर और चलनी चाहिए और हमारे DigitalOcean दास को प्रतिकृति पर पकड़ बनानी चाहिए। एक बार जब यह पकड़ में आ गया, तो हमारा डेटाबेस टियर स्विचओवर के लिए तैयार है। बेशक, आमतौर पर यह केवल एक नोड से अधिक होता है - उत्पादन ट्रैफ़िक को संभालने के लिए बुनियादी ढाँचा तैयार होने से पहले आपको DO पर कई दासों को स्थापित करने की सबसे अधिक संभावना होगी।
स्विचओवर अपने आप में एक अलग विषय है - आपको डाउनटाइम को कम करने के लिए एक योजना तैयार करनी होगी। सामान्य तौर पर, ट्रैफ़िक को पुराने से नए स्थान पर ले जाया जाना चाहिए, लेकिन इसे कैसे किया जाना चाहिए, यह ज्यादातर आपके पर्यावरण पर निर्भर करता है। यह डीएनएस प्रविष्टि में एक साधारण परिवर्तन से लेकर जटिल स्क्रिप्ट तक कुछ भी हो सकता है जो ट्रैफ़िक को पुनर्निर्देशित करने के लिए सभी ट्रिगर्स को एक सही क्रम में खींच लेगा। कोई बात नहीं, आपका डेटाबेस अब पहले से ही नए स्थान पर है, अनुरोधों को पूरा करने के लिए तैयार है।