डेटाबेस माइग्रेशन अच्छी तरह से स्केल नहीं करता है। आमतौर पर आपको ट्रिगर खींचने और पुराने से नए में स्विच करने से पहले बहुत सारे परीक्षण करने की आवश्यकता होती है। प्रवासन आमतौर पर मैन्युअल रूप से किया जाता है, क्योंकि अधिकांश प्रक्रिया स्वयं को स्वचालन के लिए उधार नहीं देती है। लेकिन इसका मतलब यह नहीं है कि प्रवासन प्रक्रिया में स्वचालन के लिए कोई जगह नहीं है। कल्पना कीजिए कि नए सॉफ़्टवेयर के साथ कई नोड्स स्थापित करना, उन्हें डेटा के साथ प्रावधान करना और हाथ से पुराने और नए वातावरण के बीच प्रतिकृति को कॉन्फ़िगर करना। इसमें दिन लगते हैं। एक नया वातावरण स्थापित करते समय और डेटा के साथ प्रावधान करते समय स्वचालन बहुत उपयोगी हो सकता है। इस ब्लॉग पोस्ट में, हम एक बहुत ही सरल माइग्रेशन पर एक नज़र डालेंगे - स्टैंडअलोन Percona सर्वर 5.7 से 3-नोड Percona XtraDB क्लस्टर 5.7 में। हम इसे पूरा करने के लिए Ansible का उपयोग करेंगे।
पर्यावरण विवरण
सबसे पहले, एक महत्वपूर्ण अस्वीकरण - जो हम यहां दिखाने जा रहे हैं वह केवल एक मसौदा है जिसे आप उत्पादन में चलाना पसंद कर सकते हैं। यह हमारे परीक्षण वातावरण पर काम करता है लेकिन इसे आपके पर्यावरण के लिए उपयुक्त बनाने के लिए संशोधनों की आवश्यकता हो सकती है। हमारे परीक्षणों में हमने वैग्रांट का उपयोग करते हुए चार उबंटू 16.04 वीएम का इस्तेमाल किया। एक में स्टैंडअलोन Percona Server 5.7 है, शेष तीन का उपयोग Percona XtraDB क्लस्टर नोड्स के लिए किया जाएगा। हम उत्तरदायी प्लेबुक चलाने के लिए एक अलग नोड का भी उपयोग करते हैं, हालांकि यह एक आवश्यकता नहीं है और प्लेबुक को किसी एक नोड से भी निष्पादित किया जा सकता है। इसके अलावा, SSH कनेक्टिविटी सभी नोड्स के बीच उपलब्ध है। आपके पास उस होस्ट से कनेक्टिविटी होनी चाहिए जहां आप उत्तरदायी रूप से चलते हैं, लेकिन नोड्स के बीच ssh करने की क्षमता उपयोगी है (विशेषकर मास्टर और नए स्लेव के बीच - हम प्लेबुक में इस पर भरोसा करते हैं)।
प्लेबुक संरचना
उत्तरदायी प्लेबुक आम तौर पर सामान्य संरचना साझा करते हैं - आप भूमिकाएं बनाते हैं, जिन्हें विभिन्न मेजबानों को सौंपा जा सकता है। प्रत्येक भूमिका में उस पर निष्पादित किए जाने वाले कार्य, उपयोग किए जाने वाले टेम्प्लेट, अपलोड की जाने वाली फ़ाइलें, इस विशेष प्लेबुक के लिए परिभाषित चर शामिल होंगे। हमारे मामले में, प्लेबुक बहुत सरल है।
.
├── inventory
├── playbook.yml
├── roles
│ ├── first_node
│ │ ├── my.cnf.j2
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── my.cnf.j2
│ ├── galera
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── my.cnf.j2
│ ├── master
│ │ └── tasks
│ │ └── main.yml
│ └── slave
│ └── tasks
│ └── main.yml
└── vars
└── default.yml
हमने कुछ भूमिकाओं को परिभाषित किया है - हमारे पास एक मास्टर भूमिका है, जिसका उद्देश्य स्टैंडअलोन नोड पर कुछ विवेक जांच करना है। एक दास नोड है, जिसे प्रतिकृति के लिए कॉन्फ़िगर करने के लिए गैलेरा नोड्स में से एक पर निष्पादित किया जाएगा, और एसिंक्रोनस प्रतिकृति स्थापित की जाएगी। फिर हमारे पास सभी गैलेरा नोड्स के लिए एक भूमिका है और पहले गैलेरा नोड के लिए क्लस्टर को बूटस्ट्रैप करने के लिए एक भूमिका है। गैलेरा भूमिकाओं के लिए, हमारे पास कुछ टेम्पलेट हैं जिनका उपयोग हम my.cnf फ़ाइलें बनाने के लिए करेंगे। हम उपयोगकर्ता नाम और पासवर्ड को परिभाषित करने के लिए स्थानीय .my.cnf का भी उपयोग करेंगे। हमारे पास एक फ़ाइल है जिसमें कुछ चर हैं जिन्हें हम पासवर्ड की तरह ही अनुकूलित करना चाहते हैं। अंत में हमारे पास एक इन्वेंट्री फ़ाइल है, जो होस्ट को परिभाषित करती है जिस पर हम प्लेबुक चलाएंगे, हमारे पास प्लेबुक फ़ाइल भी है जिसमें जानकारी है कि वास्तव में चीजों को कैसे निष्पादित किया जाना चाहिए। आइए व्यक्तिगत बिट्स पर एक नज़र डालें।
इन्वेंट्री फ़ाइल
यह एक बहुत ही सरल फ़ाइल है।
[galera]
10.0.0.142
10.0.0.143
10.0.0.144
[first_node]
10.0.0.142
[master]
10.0.0.141
हमारे पास तीन समूह हैं, 'गैलेरा', जिसमें सभी गैलेरा नोड्स हैं, 'फर्स्ट_नोड', जिसका उपयोग हम बूटस्ट्रैप के लिए करेंगे और अंत में 'मास्टर', जिसमें हमारा स्टैंडअलोन पेरकोना सर्वर नोड शामिल है।
Playbook.yml
फ़ाइल playbook.yml में सामान्य दिशानिर्देश हैं कि कैसे प्लेबुक को निष्पादित किया जाना चाहिए।
- hosts: master
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: master }
जैसा कि आप देख सकते हैं, हम स्टैंडअलोन नोड से शुरू करते हैं और हम 'मास्टर' की भूमिका से संबंधित कार्यों को लागू करते हैं (हम इस पोस्ट में और अधिक विवरण में इस पर चर्चा करेंगे)।
- hosts: first_node
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: first_node }
- { role: slave }
दूसरा, हम 'फर्स्ट_नोड' समूह में परिभाषित नोड पर जाते हैं और हम दो भूमिकाएँ लागू करते हैं:'फर्स्ट_नोड' और 'स्लेव'। पूर्व का उद्देश्य एकल नोड PXC क्लस्टर को परिनियोजित करना है, बाद वाला इसे स्लेव के रूप में कार्य करने और प्रतिकृति सेट करने के लिए कॉन्फ़िगर करेगा।
- hosts: galera
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: galera }
अंत में, हम सभी गैलेरा नोड्स से गुजरते हैं और उन सभी पर 'गैलेरा' भूमिका लागू करते हैं।
डेटाबेस प्रबंधन के लिए डिवाइप्स मार्गदर्शिका जानें कि आपको अपने ओपन सोर्स डेटाबेस को स्वचालित और प्रबंधित करने के लिए क्या जानना आवश्यक है मुफ्त में डाउनलोड करेंचर
इससे पहले कि हम भूमिकाओं पर गौर करना शुरू करें, हम उन डिफ़ॉल्ट चरों का उल्लेख करना चाहते हैं जिन्हें हमने इस प्लेबुक के लिए परिभाषित किया है।
sst_user: "sstuser"
sst_password: "pa55w0rd"
root_password: "pass"
repl_user: "repl_user"
repl_password: "repl1cati0n"
जैसा कि हमने कहा, यह अनुकूलन के लिए अधिक विकल्पों के बिना एक बहुत ही सरल प्लेबुक है। आप उपयोगकर्ताओं और पासवर्ड को कॉन्फ़िगर कर सकते हैं और यह मूल रूप से यही है। एक गोचा - कृपया सुनिश्चित करें कि स्टैंडअलोन नोड का रूट पासवर्ड यहां 'root_password' से मेल खाता है, अन्यथा प्लेबुक वहां कनेक्ट नहीं हो पाएगी (इसे संभालने के लिए इसे बढ़ाया जा सकता है लेकिन हमने इसे कवर नहीं किया)।
यह फ़ाइल बहुत अधिक मूल्य के बिना है, लेकिन अंगूठे के एक नियम के रूप में, आप किसी भी फ़ाइल को एन्क्रिप्ट करना चाहते हैं जिसमें क्रेडेंशियल शामिल हैं। जाहिर है, यह सुरक्षा कारणों से है। Ansible ansible-Vault के साथ आता है, जिसका उपयोग फ़ाइलों को एन्क्रिप्ट और डिक्रिप्ट करने के लिए किया जा सकता है। हम यहां विवरण शामिल नहीं करेंगे, आपको केवल यह जानने की जरूरत है कि दस्तावेज़ीकरण में उपलब्ध है। संक्षेप में, आप पासवर्ड का उपयोग करके फ़ाइलों को आसानी से एन्क्रिप्ट कर सकते हैं और अपने वातावरण को कॉन्फ़िगर कर सकते हैं ताकि फ़ाइल से पासवर्ड का उपयोग करके या हाथ से पास करके प्लेबुक को स्वचालित रूप से डिक्रिप्ट किया जा सके।
भूमिकाएं
इस खंड में हम प्लेबुक में परिभाषित भूमिकाओं के बारे में जानेंगे, जिसमें संक्षेप में बताया जाएगा कि उनका प्रदर्शन करने का इरादा क्या है।
मास्टर भूमिका
जैसा कि हमने कहा, इस भूमिका का उद्देश्य स्टैंडअलोन MySQL के कॉन्फ़िगरेशन पर एक विवेक जांच चलाना है। यह आवश्यक पैकेज जैसे percona-xtrabackup-24 स्थापित करेगा। यह मास्टर नोड पर प्रतिकृति उपयोगकर्ता भी बनाता है। यह सुनिश्चित करने के लिए कॉन्फ़िगरेशन की समीक्षा की जाती है कि server_id और अन्य प्रतिकृति और बाइनरी लॉग-संबंधित सेटिंग्स सेट हैं। GTID भी सक्षम है क्योंकि हम प्रतिकृति के लिए इस पर भरोसा करेंगे।
पहली_नोड भूमिका
यहां, पहला गैलेरा नोड स्थापित है। Percona भंडार कॉन्फ़िगर किया जाएगा, my.cnf टेम्पलेट से बनाया जाएगा। पीएक्ससी स्थापित किया जाएगा। हम अनावश्यक उपयोगकर्ताओं को हटाने और उन्हें बनाने के लिए कुछ सफाई भी चलाते हैं, जिनकी आवश्यकता होगी (रूट उपयोगकर्ता हमारे चयन के पासवर्ड के साथ, एसएसटी के लिए आवश्यक उपयोगकर्ता)। अंत में, इस नोड का उपयोग करके क्लस्टर को बूटस्ट्रैप किया जाता है। हम क्लस्टर को इनिशियलाइज़ करने के तरीके के रूप में खाली 'wsrep_cluster_address' पर भरोसा करते हैं। यही कारण है कि बाद में हम अभी भी पहले नोड पर 'गैलेरा' भूमिका निष्पादित करते हैं - प्रारंभिक my.cnf को अंतिम एक के साथ स्वैप करने के लिए, जिसमें क्लस्टर के सभी सदस्यों के साथ 'wsrep_cluster_address' होता है। एक बात याद रखने योग्य है - जब आप पासवर्ड के साथ रूट उपयोगकर्ता बनाते हैं तो आपको सावधान रहना होगा कि MySQL को लॉक न करें ताकि Ansible प्लेबुक के अन्य चरणों को निष्पादित कर सके। ऐसा करने का एक तरीका है .my.cnf को सही उपयोगकर्ता और पासवर्ड प्रदान करना। दूसरा यह होगा कि 'mysql_user' मॉड्यूल में हमेशा सही login_user और login_password सेट करना याद रखें।
गुलाम की भूमिका
यह भूमिका स्टैंडअलोन नोड और एकल नोड पीएक्ससी क्लस्टर के बीच प्रतिकृति को कॉन्फ़िगर करने के बारे में है। हम डेटा प्राप्त करने के लिए xtrabackup का उपयोग करते हैं, हम xtrabackup_binlog_info में निष्पादित gtid की भी जांच करते हैं ताकि यह सुनिश्चित हो सके कि बैकअप ठीक से बहाल किया जाएगा और प्रतिकृति को कॉन्फ़िगर किया जा सकता है। हम कुछ कॉन्फ़िगरेशन भी करते हैं, यह सुनिश्चित करते हुए कि दास नोड GTID प्रतिकृति का उपयोग कर सकता है। यहाँ कुछ गोचर हैं - Ansible 2.7.10 के अनुसार 'mysql_replication' मॉड्यूल का उपयोग करके 'RESET MASTER' चलाना संभव नहीं है, यह 2.8 में करना संभव होना चाहिए, जब भी यह बाहर आएगा। हमें MySQL CLI कमांड चलाने के लिए 'शेल' मॉड्यूल का उपयोग करना पड़ा। बाहरी स्रोत से गैलेरा नोड का पुनर्निर्माण करते समय, आपको किसी भी आवश्यक उपयोगकर्ता (कम से कम एसएसटी के लिए उपयोग किया जाने वाला उपयोगकर्ता) को फिर से बनाना याद रखना होगा। अन्यथा शेष नोड क्लस्टर में शामिल नहीं हो पाएंगे।
गैलेरा भूमिका
अंत में, यह वह भूमिका है जिसमें हम शेष दो नोड्स पर पीएक्ससी स्थापित करते हैं। हम इसे सभी नोड्स पर चलाते हैं, प्रारंभिक को इसके "बूटस्ट्रैप" संस्करण के बजाय "उत्पादन" my.cnf मिलेगा। शेष दो नोड्स में पीएक्ससी स्थापित होगा और उन्हें क्लस्टर में पहले नोड से एसएसटी मिलेगा।
सारांश
जैसा कि आप देख सकते हैं, आप आसानी से एक सरल, पुन:प्रयोज्य Ansible प्लेबुक बना सकते हैं जिसका उपयोग Percona XtraDB क्लस्टर को परिनियोजित करने और इसे स्टैंडअलोन MySQL नोड के दास के रूप में कॉन्फ़िगर करने के लिए किया जा सकता है। ईमानदार होने के लिए, एक सर्वर को माइग्रेट करने के लिए, इसका शायद कोई मतलब नहीं होगा क्योंकि इसे मैन्युअल रूप से करना तेज़ होगा। फिर भी, यदि आप उम्मीद करते हैं कि आपको इस प्रक्रिया को एक-दो बार फिर से निष्पादित करना होगा, तो निश्चित रूप से इसे स्वचालित करने और इसे अधिक समय कुशल बनाने के लिए समझ में आएगा। जैसा कि हमने शुरुआत में कहा था, यह किसी भी तरह से प्रोडक्शन-रेडी प्लेबुक नहीं है। यह अवधारणा का प्रमाण है, कुछ ऐसा जिसे आप अपने पर्यावरण के लिए उपयुक्त बनाने के लिए बढ़ा सकते हैं। आप यहां प्लेबुक के साथ संग्रह पा सकते हैं:http://severalnines.com/sites/default/files/ansible.tar.gz
हमें उम्मीद है कि आपको यह ब्लॉग पोस्ट रोचक और मूल्यवान लगी होगी, अपने विचार साझा करने में संकोच न करें।