Ansible दोहराए जाने वाले, जटिल और थकाऊ संचालन को स्वचालित और सरल करता है। यह एक आईटी ऑटोमेशन इंजन है जो क्लाउड प्रोविजनिंग, कॉन्फ़िगरेशन प्रबंधन, एप्लिकेशन परिनियोजन, इंट्रा-सर्विस ऑर्केस्ट्रेशन और कई अन्य आईटी जरूरतों को स्वचालित करता है। इसके लिए किसी एजेंट की आवश्यकता नहीं है, बिना किसी अतिरिक्त कस्टम सुरक्षा अवसंरचना कॉन्फ़िगरेशन के एकल स्रोत से कई दूरस्थ संसाधनों में परिवर्तन को पुश करने के लिए केवल SSH का उपयोग करना और स्वचालन कार्यों का वर्णन करने के लिए एक सरल भाषा प्रारूप (YAML) का उपयोग करना।
एक स्टैंडअलोन MySQL सर्वर स्थापित करना एक सरल सीधा कार्य है, लेकिन यह समस्याग्रस्त हो सकता है यदि आपके पास समर्थन के लिए एकाधिक डेटाबेस सर्वर, संस्करण, प्लेटफ़ॉर्म और वातावरण हैं। इस प्रकार, कॉन्फ़िगरेशन प्रबंधन उपकरण का होना दक्षता में सुधार, दोहराव को दूर करने और मानवीय त्रुटियों को कम करने का तरीका है।
इस ब्लॉग पोस्ट में, हम आपको MySQL के लिए Ansible's Automation की मूल बातें, साथ ही उदाहरणों और स्पष्टीकरणों के साथ कॉन्फ़िगरेशन प्रबंधन के बारे में बताएंगे। हम एक साधारण स्टैंडअलोन MySQL परिनियोजन के साथ शुरू करेंगे, जैसा कि निम्न उच्च-स्तरीय आरेख में दिखाया गया है:
उत्तरदायी इंस्टॉल करना
इस वॉकथ्रू के लिए, हमारे पास कम से कम दो होस्ट होने चाहिए - एक होस्ट Ansible के लिए है (आप सर्वर के बजाय वर्कस्टेशन का उपयोग कर सकते हैं) और दूसरा एक टारगेट होस्ट है जिसे हम तैनात करना चाहते हैं। MySQL सर्वर।
CentOS 7 पर Ansible स्थापित करने के लिए, बस निम्नलिखित कमांड चलाएँ:
(ansible-host)$ yum install -y epel-release
(ansible-host)$ yum install -y ansible
अन्य OS वितरण के लिए, Ansible स्थापना मार्गदर्शिका देखें।
पासवर्ड रहित SSH सेट करना
SSH के दौरान पासवर्ड का उपयोग करना समर्थित है, लेकिन ssh-agent के साथ पासवर्ड रहित SSH कुंजियाँ Ansible का उपयोग करने के सर्वोत्तम तरीकों में से एक हैं। प्रारंभिक चरण पासवर्ड रहित SSH को कॉन्फ़िगर करना है क्योंकि Ansible केवल इस चैनल द्वारा परिनियोजन करेगा। सबसे पहले, Ansible होस्ट पर SSH कुंजी जेनरेट करें:
(ansible-host)$ whoami
root
(ansible-host)$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
आपको कम से कम निम्न फ़ाइलें जेनरेट होनी चाहिए:
(ansible-host)$ ls -al ~/.ssh/
-rw-------. 1 root root 1679 Jan 14 03:40 id_rsa
-rw-r--r--. 1 root root 392 Jan 14 03:40 id_rsa.pub
पासवर्ड रहित SSH की अनुमति देने के लिए, हमें SSH सार्वजनिक कुंजी (id_rsa.pub) को उस दूरस्थ होस्ट पर कॉपी करना होगा जिसे हम एक्सेस करना चाहते हैं। हम अपने लिए यह कार्य करने के लिए ssh-copy-id नामक टूल का उपयोग कर सकते हैं। हालाँकि, आपको लक्ष्य होस्ट के उपयोगकर्ता का पासवर्ड पता होना चाहिए और लक्ष्य होस्ट पर पासवर्ड प्रमाणीकरण की अनुमति है:
(ansible-host)$ whoami
root
(ansible-host)$ ssh-copy-id [email protected]
उपरोक्त आदेश 192.168.0.221 के रूट पासवर्ड के लिए संकेत देगा, बस पासवर्ड दर्ज करें और Ansible होस्ट के वर्तमान उपयोगकर्ता के लिए SSH कुंजी को लक्ष्य होस्ट पर कॉपी किया जाएगा, 192.168.0.221 ~/.ssh/authorized_keys में, जिसका अर्थ है कि हम उस विशेष कुंजी को इस सर्वर को दूरस्थ रूप से एक्सेस करने के लिए अधिकृत करते हैं। परीक्षण करने के लिए, आपको निम्नलिखित रिमोट कमांड को बिना किसी पासवर्ड के Ansible होस्ट से चलाने में सक्षम होना चाहिए:
(ansible-host)$ ssh [email protected] "hostname -I"
192.168.0.221
यदि आपको SSH के लिए रूट उपयोगकर्ता का उपयोग करने की अनुमति नहीं है (उदाहरण के लिए, SSH कॉन्फ़िगरेशन में "PermitRootLogin no"), तो आप इसके बजाय एक sudo उपयोगकर्ता का उपयोग कर सकते हैं। निम्नलिखित उदाहरण में, हमने "योनि" नामक एक sudo उपयोगकर्ता के लिए पासवर्ड रहित SSH की स्थापना की:
(ansible-host)$ whoami
vagrant
(ansible-host)$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
(ansible-host)$ ls -al ~/.ssh/
-rw-------. 1 vagrant vagrant 1679 Jan 14 03:45 id_rsa
-rw-r--r--. 1 vagrant vagrant 392 Jan 14 03:45 id_rsa.pub
(ansible-host)$ ssh-copy-id [email protected]
यदि लक्ष्य सर्वर SSH के माध्यम से पासवर्ड प्रमाणीकरण की अनुमति नहीं देता है, तो बस ~/.ssh/id_rsa.pub पर SSH सार्वजनिक कुंजी की सामग्री को लक्ष्य होस्ट्स में मैन्युअल रूप से कॉपी करें ~/.ssh/authorized_keys फ़ाइल। उदाहरण के लिए, Ansible होस्ट पर, सार्वजनिक कुंजी सामग्री पुनर्प्राप्त करें:
(ansible-host)$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5MZjufN0OiKyKa2OG0EPBEF/w23FnOG2x8qpAaYYuqHlVc+ZyRugtGm+TdTJDfLA1Sr/rtZpXmPDuLUdlAvPmmwqIhgiatKiDw5t2adNUwME0sVgAlBv/KvbusTTdtpFQ1o+Z9CltGiENDCFytr2nVeBFxImoZu2H0ilZed/1OY2SZejUviXTQ0Dh0QYdIeiQHkMf1CiV2sNYs8j8+ULV26OOKCd8c1h1O9M5Dr4P6kt8E1lVSl9hbd4EOHQmeZ3R3va5zMesLk1A+iadIGJCJNCVOA2RpxDHmmaX28zQCwrpCliH00g9iCRixlK+cB39d1coUWVGy7SeaI8bzfv3 [email protected]
लक्ष्य होस्ट से कनेक्ट करें और Ansible की होस्ट सार्वजनिक कुंजी को ~/.ssh/authorized_keys में पेस्ट करें:
(target-host)$ whoami
root
(target-host)$ vi ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5MZjufN0OiKyKa2OG0EPBEF/w23FnOG2x8qpAaYYuqHlVc+ZyRugtGm+TdTJDfLA1Sr/rtZpXmPDuLUdlAvPmmwqIhgiatKiDw5t2adNUwME0sVgAlBv/KvbusTTdtpFQ1o+Z9CltGiENDCFytr2nVeBFxImoZu2H0ilZed/1OY2SZejUviXTQ0Dh0QYdIeiQHkMf1CiV2sNYs8j8+ULV26OOKCd8c1h1O9M5Dr4P6kt8E1lVSl9hbd4EOHQmeZ3R3va5zMesLk1A+iadIGJCJNCVOA2RpxDHmmaX28zQCwrpCliH00g9iCRixlK+cB39d1coUWVGy7SeaI8bzfv3 [email protected]
अब आप सत्यापित करने के लिए Ansible होस्ट से रिमोट कमांड चलाने का प्रयास कर सकते हैं और आपको किसी भी पासवर्ड के साथ संकेत नहीं दिया जाना चाहिए। इस बिंदु पर, हमारा पासवर्ड रहित SSH कॉन्फ़िगर किया गया है।
लक्ष्य होस्ट को परिभाषित करना
अगला हमें लक्ष्य होस्ट को परिभाषित करने की आवश्यकता है, वह होस्ट जिसे हम Ansible का उपयोग करके प्रबंधित करना चाहते हैं। हमारे आर्किटेक्चर के आधार पर, हम केवल एक MySQL सर्वर को तैनात करने जा रहे हैं जो 192.168.0.221 है। निम्नलिखित पंक्तियों को /etc/ansible/hosts में जोड़ें:
[db-mysql]
192.168.0.221
उपरोक्त का सीधा सा अर्थ है कि हमने "db-mysql" नामक एक समूह को परिभाषित किया है, जो कि जब हम Ansible playbook में लक्ष्य होस्ट को संदर्भित करते हैं तो वह पहचानकर्ता होगा। हम इस समूह के अंतर्गत लक्षित मेजबानों के सभी आईपी पते या होस्टनाम भी सूचीबद्ध कर सकते हैं। इस बिंदु पर, हमारे पास तैनात करने के लिए केवल एक MySQL सर्वर है, इस प्रकार केवल एक प्रविष्टि है। आप एक समूह के अंतर्गत मेजबानों से मिलान करने के लिए कोई मिलान नियम भी निर्दिष्ट कर सकते हैं, उदाहरण के लिए:
[db-mysql]
192.168.0.[221:223]
उपरोक्त परिभाषा का अर्थ है कि हमारे पास इस समूह के अंतर्गत निम्नलिखित IP पते वाले 3 होस्ट हैं:
- 192.168.0.221
- 192.168.0.222
- 192.168.0.223
जैसा कि Ansible इन्वेंट्री गाइड में दिखाया गया है, टारगेट होस्ट को मैच और ग्रुप करने के कई तरीके और नियम हैं।
एक उत्तरदायी भूमिका चुनना
Ansible को यह बताने के लिए कि क्या परिनियोजित करना है, हमें प्लेबुक नामक YML स्वरूपित फ़ाइल में परिनियोजन चरणों को परिभाषित करने की आवश्यकता है। जैसा कि आप जानते हैं, एक पूर्ण MySQL सर्वर को स्थापित करने के लिए सभी MySQL निर्भरता, पोस्ट-इंस्टॉलेशन कॉन्फ़िगरेशन, उपयोगकर्ता और स्कीमा निर्माण आदि को पूरा करने के लिए कई चरणों की आवश्यकता होती है। Ansible ने कई MySQL मॉड्यूल प्रदान किए हैं जो हमारी मदद कर सकते हैं, लेकिन फिर भी हमें परिनियोजन चरणों के लिए एक प्लेबुक लिखनी है।
परिनियोजन चरणों को सरल बनाने के लिए, हम मौजूदा Ansible भूमिकाओं का उपयोग कर सकते हैं। उत्तरदायी भूमिका एक स्वतंत्र घटक है जो सामान्य कॉन्फ़िगरेशन चरणों के पुन:उपयोग की अनुमति देता है। प्लेबुक के भीतर एक उत्तरदायी भूमिका का उपयोग किया जाना है। Ansible Galaxy में कई MySQL Ansible भूमिकाएँ उपलब्ध हैं, Ansible भूमिकाओं के लिए एक रिपॉजिटरी जो सीधे आपकी प्लेबुक में ड्रॉप करने के लिए उपलब्ध हैं।
यदि आप "mysql" खोजते हैं, तो आपको MySQL के लिए बहुत सारी उत्तरदायी भूमिकाएँ मिलेंगी:
हम geerlingguy द्वारा "mysql" नामक सबसे लोकप्रिय नाम का उपयोग करेंगे। आप अन्य भूमिकाओं का उपयोग करने का विकल्प चुन सकते हैं लेकिन अधिकतर सबसे अधिक डाउनलोड की जाने वाली भूमिका सामान्य उद्देश्य के लिए होती है जो आमतौर पर ज्यादातर मामलों में ठीक काम करती है।
Ansible होस्ट पर, Ansible भूमिका डाउनलोड करने के लिए निम्न कमांड चलाएँ:
(ansible-host)$ ansible-galaxy install geerlingguy.mysql
भूमिका वर्तमान उपयोगकर्ता के ~/.ansible/roles/geerlingguy.mysql/ में डाउनलोड हो जाएगी।
उत्तरदायी प्लेबुक लिखना
उत्तरदायी भूमिका के रीडमी को देखकर, हम प्रदान की जा रही उदाहरण प्लेबुक का अनुसरण कर सकते हैं। सबसे पहले, एक प्लेबुक फ़ाइल बनाएँ, जिसे परिनियोजन-mysql.yml कहा जाता है और निम्नलिखित पंक्तियाँ जोड़ें:
(ansible-host)$ vim ~/deploy-mysql.yml
- hosts: db-mysql
become: yes
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.mysql }
उपरोक्त पंक्तियों में, हम लक्ष्य होस्ट को परिभाषित करते हैं जो /etc/ansible/hosts में db-mysql प्रविष्टियों के अंतर्गत सभी होस्ट हैं। अगली पंक्ति (बनें) Ansible को प्लेबुक को रूट उपयोगकर्ता के रूप में निष्पादित करने के लिए कहती है, जो भूमिका के लिए आवश्यक है (यह रीडमी फ़ाइल में कहा गया है)। इसके बाद, हम प्लेबुक पथ के सापेक्ष vars/main.yml पर स्थित चर फ़ाइल (var_files) के स्थान को परिभाषित करते हैं।
चलिए वेरिएबल डायरेक्टरी और फाइल बनाते हैं और निम्नलिखित लाइन निर्दिष्ट करते हैं:
(ansible-host)$ mkdir vars
(ansible-host)$ vim vars/main.yml
mysql_root_password: "theR00tP455w0rd"
अधिक जानकारी के लिए इस भूमिका की रीडमी फ़ाइल में भूमिका चर अनुभाग देखें।
परिनियोजन प्रारंभ करें
अब हम MySQL परिनियोजन शुरू करने के लिए तैयार हैं। हमारी प्लेबुक परिभाषाओं को निष्पादित करने के लिए ansible-playbook कमांड का उपयोग करें:
(ansible-host)$ ansible-playbook deploy-mysql.yml
आपको आउटपुट में लाइनों का एक गुच्छा दिखाई देना चाहिए। अंतिम पंक्ति पर ध्यान दें जहां यह परिनियोजन को सारांशित करती है:
PLAY RECAP ***************************************************************************************************************************************
192.168.0.221 : ok=36 changed=8 unreachable=0 failed=0 skipped=16 rescued=0 ignored=0
यदि सब कुछ हरा और ठीक हो जाता है, तो आप डेटाबेस होस्ट पर सत्यापित कर सकते हैं कि हमारा MySQL सर्वर पहले से स्थापित और चल रहा है:
(mysql-host)$ rpm -qa | grep -i maria
mariadb-server-5.5.64-1.el7.x86_64
mariadb-libs-5.5.64-1.el7.x86_64
mariadb-5.5.64-1.el7.x86_64
(mysql-host)$ mysqladmin -uroot -p ping
Enter password:
mysqld is alive
जैसा कि आप ऊपर से देख सकते हैं, CentOS 7 के लिए मानक पैकेज रिपॉजिटरी के हिस्से के रूप में डिफ़ॉल्ट MySQL स्थापना मारियाडीबी 5.5 है। इस बिंदु पर, हमारे परिनियोजन को पूर्ण माना जाता है, हालाँकि, हम अपने परिनियोजन को और अधिक अनुकूलित करना चाहेंगे जैसा कि अगले अनुभागों में दिखाया गया है।
परिनियोजन को अनुकूलित करना
प्लेबुक में सबसे सरल परिभाषा हमें एक बहुत ही बुनियादी स्थापना देती है और सभी डिफ़ॉल्ट कॉन्फ़िगरेशन विकल्पों का उपयोग करती है। हम निम्नलिखित करने के लिए प्लेबुक को विस्तारित/संशोधित/जोड़कर MySQL स्थापना को और अधिक अनुकूलित कर सकते हैं:
- MySQL कॉन्फ़िगरेशन विकल्प संशोधित करें
- डेटाबेस उपयोगकर्ता जोड़ें
- डेटाबेस स्कीमा जोड़ें
- उपयोगकर्ता विशेषाधिकारों को कॉन्फ़िगर करें
- MySQL प्रतिकृति कॉन्फ़िगर करें
- अन्य विक्रेताओं से MySQL इंस्टॉल करें
- एक कस्टम MySQL कॉन्फ़िगरेशन फ़ाइल आयात करें
Oracle रिपॉजिटरी से MySQL इंस्टाल करना
डिफ़ॉल्ट रूप से, भूमिका डिफ़ॉल्ट MySQL पैकेज स्थापित करेगी जो OS वितरण के साथ आता है। CentOS 7 के लिए, आपको डिफ़ॉल्ट रूप से MariaDB 5.5 स्थापित किया जाएगा। मान लीजिए कि हम किसी अन्य विक्रेता से MySQL स्थापित करना चाहते हैं, हम प्री_टास्क के साथ प्लेबुक का विस्तार कर सकते हैं, एक ऐसा कार्य जो किसी भी .yml फ़ाइल में उल्लिखित किसी भी कार्य को निष्पादित करने से पहले निष्पादित करता है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
(ansible-host)$ vim deploy-mysql.yml
- hosts: db-mysql
become: yes
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.mysql }
pre_tasks:
- name: Install the MySQL repo.
yum:
name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
state: present
when: ansible_os_family == "RedHat"
- name: Override variables for MySQL (RedHat).
set_fact:
mysql_daemon: mysqld
mysql_packages: ['mysql-server']
mysql_log_error: /var/lib/mysql/error.log
mysql_syslog_tag: mysqld
mysql_pid_file: /var/run/mysqld/mysqld.pid
mysql_socket: /var/lib/mysql/mysql.sock
when: ansible_os_family == "RedHat"
प्लेबुक निष्पादित करें:
(ansible-host)$ ansible-playbook deploy-mysql.yml
उपरोक्त इसके बजाय Oracle रिपॉजिटरी से MySQL स्थापित करेगा। आपको मिलने वाला डिफ़ॉल्ट संस्करण MySQL 5.6 है। उपरोक्त प्लेबुक को एक लक्षित होस्ट पर निष्पादित करना जिसमें पहले से ही MySQL/MariaDB का पुराना संस्करण चल रहा है, असंगति के कारण विफल हो जाएगा।
MySQL डेटाबेस और उपयोगकर्ता बनाना
vars/main.yml के अंदर, हम MySQL डेटाबेस और उन उपयोगकर्ताओं को परिभाषित कर सकते हैं जिन्हें हम mysql_database और mysql_users मॉड्यूल का उपयोग करके हमारे MySQL सर्वर पर कॉन्फ़िगर करना चाहते हैं, mysql_root_password पर हमारी पिछली परिभाषा के ठीक बाद:पी>
(ansible-host)$ vim vars/main.yml
mysql_root_password: "theR00tP455w0rd"
mysql_databases:
- name: myshop
encoding: latin1
collation: latin1_general_ci
- name: sysbench
encoding: latin1
collation: latin1_general_ci
mysql_users:
- name: myshop_user
host: "%"
password: mySh0pPassw0rd
priv: "myshop.*:ALL"
- name: sysbench_user
host: "192.168.0.%"
password: sysBenchPassw0rd
priv: "sysbench.*:ALL"
परिभाषा Ansible को दो डेटाबेस बनाने का निर्देश देती है, "myshop" और "sysbench", अपने संबंधित MySQL उपयोगकर्ता को उचित विशेषाधिकारों, अनुमत होस्ट और पासवर्ड के साथ फॉलो करते हैं।
हमारे MySQL सर्वर में परिवर्तन लागू करने के लिए प्लेबुक को फिर से निष्पादित करें:
(ansible-host)$ ansible-playbook deploy-mysql.yml
इस बार, Ansible हमारे MySQL सर्वर पर लागू होने के लिए vars/main.yml में किए गए सभी परिवर्तनों को उठाएगा। हम निम्नलिखित आदेशों के साथ MySQL सर्वर में सत्यापित कर सकते हैं:
(mysql-host)$ mysql -uroot -p -e 'SHOW DATABASES'
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| myshop |
| mysql |
| performance_schema |
| sysbench |
+--------------------+
(mysql-host)$ mysql -uroot -p -e 'SHOW GRANTS FOR [email protected]"192.168.0.%"'
Enter password:
+------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]% |
+------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'sysbench_user'@'192.168.0.%' IDENTIFIED BY PASSWORD '*4AC2E8AD02562E8FAAF5A958DC2AEA4C47451B5C' |
| GRANT ALL PRIVILEGES ON `sysbench`.* TO 'sysbench_user'@'192.168.0.%' |
+------------------------------------------------------------------------------------------------------------------------+
धीमी क्वेरी लॉग सक्षम करना
यह भूमिका MySQL धीमी क्वेरी लॉग को सक्षम करने का समर्थन करती है, हम लॉग फ़ाइल के स्थान के साथ-साथ धीमी क्वेरी समय को भी परिभाषित कर सकते हैं। vars/main.yml फ़ाइल के अंदर आवश्यक चर जोड़ें:
mysql_root_password: "theR00tP455w0rd"
mysql_databases:
- name: example_db
encoding: latin1
collation: latin1_general_ci
- name: sysbench
encoding: latin1
collation: latin1_general_ci
mysql_users:
- name: example_user
host: "%"
password: similarly-secure-password
priv: "example_db.*:ALL"
- name: sysbench_user
host: "192.168.0.%"
password: sysBenchPassw0rd
priv: "sysbench.*:ALL"
mysql_slow_query_log_enabled: true
mysql_slow_query_log_file: 'slow_query.log'
mysql_slow_query_time: '5.000000'
परिवर्तनों को लागू करने के लिए प्लेबुक को फिर से चलाएँ:
(ansible-host)$ ansible-playbook deploy-mysql.yml
प्लेबुक MySQL धीमी क्वेरी से संबंधित विकल्पों में आवश्यक परिवर्तन करेगी और नए कॉन्फ़िगरेशन को लोड करने के लिए MySQL सर्वर को स्वचालित रूप से पुनरारंभ करेगी। फिर हम सत्यापित कर सकते हैं कि क्या नए कॉन्फ़िगरेशन विकल्प MySQL सर्वर पर सही ढंग से लोड किए गए हैं:
(mysql-host)$ mysql -uroot -p -e 'SELECT @@slow_query_log, @@slow_query_log_file, @@long_query_time'
+------------------+-----------------------+-------------------+
| @@slow_query_log | @@slow_query_log_file | @@long_query_time |
+------------------+-----------------------+-------------------+
| 1 | slow_query.log | 5.000000 |
+------------------+-----------------------+-------------------+
कस्टम MySQL कॉन्फ़िगरेशन फ़ाइल सहित
उत्तरदायी भूमिका चर और MySQL चर दो अलग-अलग चीजें हैं। इस भूमिका के लेखक ने कई MySQL संबंधित चर बनाए हैं जिन्हें Ansible भूमिका चर के साथ प्रदर्शित किया जा सकता है। रीडमी फ़ाइल से लिया गया, उनमें से कुछ ये हैं:
mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *default value depends on OS*
mysql_pid_file: *default value depends on OS*
mysql_log_file_group: mysql *adm on Debian*
mysql_log: ""
mysql_log_error: *default value depends on OS*
mysql_syslog_tag: *default value depends on OS*
यदि उत्पन्न कॉन्फ़िगरेशन हमारी MySQL आवश्यकता को पूरा नहीं करता है, तो हम mysql_config_include_files चर का उपयोग करके कस्टम MySQL कॉन्फ़िगरेशन फ़ाइलों को परिनियोजन में शामिल कर सकते हैं। यह अल्पविराम द्वारा अलग किए गए मानों की एक सरणी को स्वीकार करता है, जिसमें "src" Ansible होस्ट पर वास्तविक पथ के उपसर्ग के रूप में होता है।
सबसे पहले, हमें Ansible होस्ट पर कस्टम कॉन्फ़िगरेशन फ़ाइलें तैयार करनी होंगी। एक निर्देशिका और एक साधारण MySQL कॉन्फ़िगरेशन फ़ाइल बनाएँ:
(ansible-host)$ mkdir /root/custom-config/
(ansible-host)$ vim /root/custom-config/my-severalnines.cnf
[mysqld]
max_connections=250
log_bin=binlog
expire_logs_days=7
मान लें कि हमारे पास विशेष रूप से mysqldump कॉन्फ़िगरेशन के लिए एक और कॉन्फ़िगरेशन फ़ाइल है:
(ansible-host)$ vim /root/custom-config/mysqldump.cnf
[mysqldump]
max_allowed_packet=128M
इन कॉन्फ़िगरेशन फ़ाइलों को हमारे परिनियोजन में आयात करने के लिए, उन्हें vars/main.yml फ़ाइल में mysql_config_include_files सरणी में परिभाषित करें:
mysql_root_password: "theR00tP455w0rd"
mysql_databases:
- name: example_db
encoding: latin1
collation: latin1_general_ci
- name: sysbench
encoding: latin1
collation: latin1_general_ci
mysql_users:
- name: example_user
host: "%"
password: similarly-secure-password
priv: "example_db.*:ALL"
- name: sysbench_user
host: "192.168.0.%"
password: sysBenchPassw0rd
priv: "sysbench.*:ALL"
mysql_slow_query_log_enabled: true
mysql_slow_query_log_file: slow_query.log
mysql_slow_query_time: 5
mysql_config_include_files: [
src: '/root/custom-config/my-severalnines.cnf',
src: '/root/custom-config/mysqldump.cnf'
]
ध्यान दें कि /root/custom-config/mysqld-severalnines.cnf और /root/custom-config/mysqldump.cnf Ansible होस्ट के अंदर मौजूद हैं।
प्लेबुक फिर से चलाएँ:
(ansible-host)$ ansible-playbook deploy-mysql.yml
प्लेबुक उन कॉन्फ़िगरेशन फ़ाइलों को आयात करेगा और उन्हें शामिल निर्देशिका (OS के आधार पर) में डाल देगा जो कि CentOS 7 के लिए /etc/my.cnf.d/ है। प्लेबुक ऑटो-रीस्टार्ट होगी नए कॉन्फ़िगरेशन विकल्पों को लोड करने के लिए MySQL सर्वर। फिर हम सत्यापित कर सकते हैं कि क्या नए कॉन्फ़िगरेशन विकल्प सही तरीके से लोड किए गए हैं:
(mysql-host)$ mysql -uroot -p -e 'select @@max_connections'
250
(mysql-host)$ mysqldump --help | grep ^max-allowed-packet
max-allowed-packet 134217728
निष्कर्ष
स्क्रिप्टिंग के थोड़े से ज्ञान के साथ डेटाबेस परिनियोजन और कॉन्फ़िगरेशन प्रबंधन को स्वचालित करने के लिए Ansible का उपयोग किया जा सकता है। इस बीच, क्लस्टरकंट्रोल यूजर इंटरफेस के साथ आपके डेटाबेस क्लस्टर को ए से जेड तक तैनात, मॉनिटर, प्रबंधित और स्केल करने के लिए एक समान पासवर्ड रहित एसएसएच दृष्टिकोण का उपयोग करता है और उसी परिणाम को प्राप्त करने के लिए किसी अतिरिक्त कौशल की आवश्यकता नहीं होती है।