कठपुतली कॉन्फ़िगरेशन प्रबंधन और परिनियोजन के लिए खुला स्रोत सॉफ़्टवेयर है। 2005 में स्थापित, यह बहु-मंच है और यहां तक कि कॉन्फ़िगरेशन के लिए इसकी अपनी घोषणात्मक भाषा भी है।
PostgreSQL (या वास्तव में अन्य सॉफ़्टवेयर) के प्रशासन और रखरखाव से संबंधित कार्य दैनिक, दोहराव वाली प्रक्रियाएं शामिल हैं जिन्हें निगरानी की आवश्यकता होती है। यह उन कार्यों पर भी लागू होता है जो शेड्यूलिंग टूल के माध्यम से स्क्रिप्ट या कमांड द्वारा संचालित होते हैं। बड़े पैमाने पर बुनियादी ढांचे पर निष्पादित होने पर इन कार्यों की जटिलता तेजी से बढ़ जाती है, हालांकि, इस तरह के कार्यों के लिए कठपुतली का उपयोग अक्सर इस प्रकार की बड़े पैमाने की समस्याओं को हल कर सकता है क्योंकि कठपुतली इन कार्यों के प्रदर्शन को बहुत ही चुस्त तरीके से केंद्रीकृत और स्वचालित करती है।पी>
कठपुतली क्लाइंट/सर्वर स्तर पर आर्किटेक्चर के भीतर काम करती है जहां कॉन्फ़िगरेशन किया जा रहा है; फिर इन ऑप्स को सभी क्लाइंट (नोड्स के रूप में भी जाना जाता है) पर फैलाया और निष्पादित किया जाता है।
आमतौर पर हर 30 मिनट में चलने पर, एजेंटों का नोड सूचना का एक सेट (प्रोसेसर का प्रकार, आर्किटेक्चर, आईपी पता, आदि) एकत्र करेगा, जिसे तथ्य भी कहा जाता है, फिर सूचना को भेजता है मास्टर जो यह देखने के लिए उत्तर की प्रतीक्षा कर रहा है कि क्या लागू करने के लिए कोई नया कॉन्फ़िगरेशन है।
ये तथ्य मास्टर को प्रत्येक नोड के लिए समान कॉन्फ़िगरेशन को अनुकूलित करने की अनुमति देंगे।
बहुत ही सरल तरीके से, कठपुतली सबसे महत्वपूर्ण DevOps टूल में से एक है आज उपलब्ध है। इस ब्लॉग में हम निम्नलिखित पर एक नज़र डालेंगे...
- कठपुतली और PostgreSQL के लिए उपयोग का मामला
- कठपुतली स्थापित करना
- कठपुतली को कॉन्फ़िगर करना और प्रोग्रामिंग करना
- PostgreSQL के लिए कठपुतली को कॉन्फ़िगर करना
नीचे वर्णित कठपुतली की स्थापना और सेटअप (संस्करण 5.3.10) ऑपरेटिंग सिस्टम के रूप में CentOS 7.0 का उपयोग करके मेजबानों के एक सेट में किया गया था।
कठपुतली और पोस्टग्रेएसक्यूएल के लिए उपयोग का मामला
मान लें कि आपके सभी PostgreSQL सर्वरों को होस्ट करने वाली मशीनों पर आपके फ़ायरवॉल में कोई समस्या है, तो यह आवश्यक होगा कि PostgreSQL के सभी आउटबाउंड कनेक्शन को अस्वीकार कर दिया जाए, और इसे जल्द से जल्द किया जाए।
पी>कठपुतली इस स्थिति के लिए एकदम सही उपकरण है, खासकर क्योंकि गति और दक्षता ज़रूरी। हम इस उदाहरण के बारे में बात करेंगे जो "पोस्टग्रेएसक्यूएल के लिए कठपुतली को कॉन्फ़िगर करना" खंड में प्रस्तुत किया गया है, जो कि पैरामीटर लिने_एड्रेस को प्रबंधित करके है।
कठपुतली स्थापित करना
मास्टर या एजेंट होस्ट पर प्रदर्शन करने के लिए सामान्य चरणों का एक सेट है:
एक कदम
होस्ट नामों और उनके आईपी पते के साथ /etc/hosts फ़ाइल का अद्यतन करना
192.168.1.85 agent agent.severalnines.com
192.168.1.87 master master.severalnines.com puppet
दूसरा चरण
सिस्टम पर कठपुतली भंडार जोड़ना
$ sudo rpm –Uvh https://yum.puppetlabs.com/puppet5/el/7/x86_64/puppet5-release-5.0.0-1-el7.noarch.rpm
अन्य ऑपरेटिंग सिस्टम या CentOS संस्करणों के लिए, सबसे उपयुक्त रिपॉजिटरी Puppet, Inc. Yum रिपॉजिटरी में पाई जा सकती है।
तीसरा चरण
NTP (नेटवर्क टाइम प्रोटोकॉल) सर्वर का कॉन्फ़िगरेशन
$ sudo yum -y install chrony
चरण चार
क्रोनी का उपयोग विभिन्न एनटीपी सर्वरों से सिस्टम घड़ी को सिंक्रोनाइज़ करने के लिए किया जाता है और इस प्रकार मास्टर और एजेंट सर्वर के बीच समय को सिंक्रोनाइज़ करता रहता है।
एक बार क्रोनी इंस्टॉल हो जाने के बाद इसे सक्षम और पुनरारंभ करना होगा:
$ sudo systemctl enable chronyd.service
$ sudo systemctl restart chronyd.service
पांचवां चरण
SELinux पैरामीटर अक्षम करें
फ़ाइल पर /etc/sysconfig/selinux पैरामीटर SELINUX (सिक्योरिटी-एन्हांस्ड लिनक्स) को अक्षम किया जाना चाहिए ताकि दोनों होस्ट पर एक्सेस प्रतिबंधित न हो।
SELINUX=disabled
छठा चरण
कठपुतली स्थापना से पहले (या तो मास्टर या एजेंट) इन मेजबानों में फ़ायरवॉल को तदनुसार परिभाषित किया जाना चाहिए:
$ sudo firewall-cmd -–add-service=ntp -–permanent
$ sudo firewall-cmd –-reload
कठपुतली मास्टर स्थापित करना
एक बार पैकेज रिपॉजिटरी कठपुतली5-रिलीज-5.0.0-1-el7.noarch.rpm सिस्टम में जुड़ जाने के बाद कठपुतली सर्वर की स्थापना की जा सकती है:
$ sudo yum install -y puppetserver
अधिकतम मेमोरी आवंटन पैरामीटर /etc/sysconfig/puppetserver फ़ाइल को 2GB (या सेवा शुरू नहीं होने पर 1GB तक) पर अपडेट करने के लिए एक महत्वपूर्ण सेटिंग है:
JAVA_ARGS="-Xms2g –Xmx2g "
कॉन्फ़िगरेशन फ़ाइल /etc/puppetlabs/puppet/puppet.conf में निम्नलिखित पैरामीटरीकरण जोड़ना आवश्यक है:
[master]
dns_alt_names=master.severalnines.com,puppet
[main]
certname = master.severalnines.com
server = master.severalnines.com
environment = production
runinterval = 1h
कठपुतली सेवा नोड अनुरोधों को सुनने के लिए पोर्ट 8140 का उपयोग करती है, इस प्रकार यह सुनिश्चित करना आवश्यक है कि यह पोर्ट सक्षम किया जाएगा:
$ sudo firewall-cmd --add-port=8140/tcp --permanent
$ sudo firewall-cmd --reload
एक बार कठपुतली मास्टर में सभी सेटिंग्स हो जाने के बाद, इस सेवा को शुरू करने का समय आ गया है:
$ sudo systemctl start puppetserver
$ sudo systemctl enable puppetserver
कठपुतली एजेंट स्थापित करना
पैकेज रिपॉजिटरी में कठपुतली एजेंट कठपुतली5-रिलीज-5.0.0-1-el7.noarch.rpm को भी सिस्टम में जोड़ा जाता है, कठपुतली-एजेंट की स्थापना तुरंत की जा सकती है:पी>
$ sudo yum install -y puppet-agent
कठपुतली-एजेंट कॉन्फ़िगरेशन फ़ाइल /etc/puppetlabs/puppet/puppet.conf को भी निम्न पैरामीटर जोड़कर अद्यतन करने की आवश्यकता है:
[main]
certname = agent.severalnines.com
server = master.severalnines.com
environment = production
runinterval = 1h
अगले चरण में निम्नलिखित कमांड निष्पादित करके मास्टर होस्ट पर एजेंट नोड को पंजीकृत करना शामिल है:
$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
service { ‘puppet’:
ensure => ‘running’,
enable => ‘true’
}
इस समय, मास्टर होस्ट पर, एक प्रमाणपत्र पर हस्ताक्षर करने के लिए कठपुतली एजेंट की ओर से एक लंबित अनुरोध है:
जिस पर निम्न में से किसी एक कमांड को निष्पादित करके हस्ताक्षर किया जाना चाहिए:
$ sudo /opt/puppetlabs/bin/puppet cert sign agent.severalnines.com
या
$ sudo /opt/puppetlabs/bin/puppet cert sign --all
आखिरकार (और एक बार कठपुतली मास्टर ने प्रमाण पत्र पर हस्ताक्षर कर दिया है) यह कठपुतली मास्टर से कैटलॉग प्राप्त करके एजेंट को कॉन्फ़िगरेशन लागू करने का समय है:
$ sudo /opt/puppetlabs/bin/puppet agent --test
इस कमांड में, पैरामीटर --test का मतलब परीक्षण नहीं है, मास्टर से प्राप्त सेटिंग्स को स्थानीय एजेंट पर लागू किया जाएगा। मास्टर से कॉन्फ़िगरेशन का परीक्षण/जांच करने के लिए निम्न आदेश निष्पादित किया जाना चाहिए:
$ sudo /opt/puppetlabs/bin/puppet agent --noop
कठपुतली को कॉन्फ़िगर और प्रोग्रामिंग करना
कठपुतली एक घोषणात्मक प्रोग्रामिंग दृष्टिकोण का उपयोग करती है जिसका उद्देश्य यह निर्दिष्ट करना है कि क्या करना है और इसे प्राप्त करने के तरीके से कोई फर्क नहीं पड़ता!
कठपुतली पर कोड का सबसे प्राथमिक भाग वह संसाधन है जो एक सिस्टम गुण जैसे कमांड, सेवा, फ़ाइल, निर्देशिका, उपयोगकर्ता या पैकेज को निर्दिष्ट करता है।
इसके नीचे एक उपयोगकर्ता बनाने के लिए संसाधन का सिंटैक्स प्रस्तुत किया गया है:
user { 'admin_postgresql':
ensure => present,
uid => '1000',
gid => '1000',
home => '/home/admin/postresql'
}
विभिन्न संसाधनों को "पीपी" एक्सटेंशन (यह कठपुतली कार्यक्रम के लिए खड़ा है) के साथ फ़ाइल के पूर्व वर्ग (जिसे मेनिफेस्ट के रूप में भी जाना जाता है) में जोड़ा जा सकता है, फिर भी, कई मैनिफ़ेस्ट और डेटा (जैसे तथ्य, फ़ाइलें, और टेम्प्लेट) एक मॉड्यूल की रचना करेंगे। सभी तार्किक पदानुक्रम और नियम नीचे दिए गए चित्र में दर्शाए गए हैं:
प्रत्येक मॉड्यूल का उद्देश्य एकल निष्पादित करने के लिए सभी आवश्यक मैनिफ़ेस्ट को शामिल करना है मॉड्यूलर तरीके से काम करता है। दूसरी ओर, कक्षा की अवधारणा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं से समान नहीं है, कठपुतली में, यह संसाधनों के एक समूह के रूप में काम करती है।
इन फाइल संगठन के पास अनुसरण करने के लिए एक विशिष्ट निर्देशिका संरचना है:
जिस पर प्रत्येक फ़ोल्डर का उद्देश्य निम्नलिखित है:
फ़ोल्डर | विवरण |
प्रकट होता है | कठपुतली कोड |
फ़ाइलें | नोड्स में कॉपी की जाने वाली स्टेटिक फाइलें |
टेम्पलेट्स | टेम्प्लेट फ़ाइलें प्रबंधित नोड्स में कॉपी की जानी हैं (इसे वेरिएबल के साथ अनुकूलित किया जा सकता है) |
उदाहरण | मॉड्यूल का उपयोग कैसे करें यह दिखाने के लिए प्रकट करें |
class dev_accounts {
$rootgroup = $osfamily ? {
'Debian' => 'sudo',
'RedHat' => 'wheel',
default => warning('This distribution is not supported by the Accounts module'),
}
include accounts::groups
user { 'username':
ensure => present,
home => '/home/admin/postresql',
shell => '/bin/bash',
managehome => true,
gid => 'admin_db',
groups => "$rootgroup",
password => '$1$7URTNNqb$65ca6wPFDvixURc/MMg7O1'
}
}
अगले भाग में, हम आपको दिखाएंगे कि उदाहरण फ़ोल्डर की सामग्री कैसे उत्पन्न करें और साथ ही प्रत्येक मॉड्यूल का परीक्षण और प्रकाशन करने के लिए आदेश।
पोस्टग्रेएसक्यूएल के लिए कठपुतली को कॉन्फ़िगर करना
एक PostgreSQL डेटाबेस को परिनियोजित करने और बनाए रखने के लिए कई कॉन्फ़िगरेशन उदाहरण प्रस्तुत करने से पहले, उनकी सभी कार्यात्मकताओं का उपयोग करने के लिए PostgreSQL कठपुतली मॉड्यूल (सर्वर होस्ट पर) को स्थापित करना आवश्यक है:
$ sudo /opt/puppetlabs/bin/puppet module install puppetlabs-postgresql
वर्तमान में, पपेट पर उपयोग के लिए तैयार हजारों मॉड्यूल सार्वजनिक मॉड्यूल रिपॉजिटरी पपेट फोर्ज पर उपलब्ध हैं।
एक कदम
एक नया PostgreSQL उदाहरण कॉन्फ़िगर और परिनियोजित करें। सभी नोड्स में एक नया PostgreSQL इंस्टेंस स्थापित करने के लिए सभी आवश्यक प्रोग्रामिंग और कॉन्फ़िगरेशन यहां दिए गए हैं।
पहला कदम एक नई मॉड्यूल संरचना निर्देशिका बनाना है जैसा कि पहले साझा किया गया था:
$ cd /etc/puppetlabs/code/environments/production/modules
$ mkdir db_postgresql_admin
$ cd db_postgresql_admin; mkdir{examples,files,manifests,templates}
फिर, मेनिफेस्ट फ़ाइल में मेनिफ़ेस्ट/init.pp, आपको इंस्टॉल किए गए मॉड्यूल द्वारा प्रदान किया गया क्लास पोस्टग्रेस्क्ल::सर्वर शामिल करना होगा:
class db_postgresql_admin{
include postgresql::server
}
मेनिफेस्ट के सिंटैक्स की जांच करने के लिए, निम्न कमांड को निष्पादित करना एक अच्छा अभ्यास है:
$ sudo /opt/puppetlabs/bin/puppet parser validate init.pp
अगर कुछ भी नहीं लौटाया जाता है, तो इसका मतलब है कि सिंटैक्स सही है
उदाहरण फ़ोल्डर में इस मॉड्यूल का उपयोग करने का तरीका दिखाने के लिए, निम्नलिखित सामग्री के साथ एक नई मेनिफेस्ट फ़ाइल init.pp बनाना आवश्यक है:
include db_postgresql_admin
मॉड्यूल में उदाहरण स्थान का परीक्षण किया जाना चाहिए और मास्टर कैटलॉग पर लागू किया जाना चाहिए:
$ sudo /opt/puppetlabs/bin/puppet apply --modulepath=/etc/puppetlabs/code/environments/production/modules --noop init.pp
आखिरकार, यह परिभाषित करना आवश्यक है कि प्रत्येक नोड के पास फ़ाइल "/etc/puppetlabs/code/environments/production/manifests/site.pp" में किस मॉड्यूल तक पहुंच है:
node ’agent.severalnines.com’,’agent2.severalnines.com’{
include db_postgresql_admin
}
या सभी नोड्स के लिए एक डिफ़ॉल्ट कॉन्फ़िगरेशन:
node default {
include db_postgresql_admin
}
आमतौर पर प्रत्येक 30 मिनट में नोड्स मास्टर कैटलॉग की जांच करते हैं, फिर भी इस क्वेरी को निम्नलिखित कमांड द्वारा नोड साइड पर मजबूर किया जा सकता है:
$ /opt/puppetlabs/bin/puppet agent -t
या यदि उद्देश्य मास्टर कॉन्फ़िगरेशन और वर्तमान नोड सेटिंग्स के बीच अंतर का अनुकरण करना है, तो इसे nopp पैरामीटर (कोई ऑपरेशन नहीं) का उपयोग किया जा सकता है:
$ /opt/puppetlabs/bin/puppet agent -t --noop
दूसरा चरण
सभी इंटरफेस को सुनने के लिए PostgreSQL इंस्टेंस को अपडेट करें। पिछली स्थापना एक बहुत ही प्रतिबंधात्मक मोड में एक इंस्टेंस सेटिंग को परिभाषित करती है:केवल लोकलहोस्ट पर कनेक्शन की अनुमति देता है जैसा कि पोर्ट 5432 (पोस्टग्रेएसक्यूएल के लिए परिभाषित) से जुड़े मेजबानों द्वारा पुष्टि की जा सकती है:
$ sudo netstat -ntlp|grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3237/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 3237/postgres
सभी इंटरफ़ेस को सुनने की अनुमति देने के लिए, फ़ाइल /etc/puppetlabs/code/environments/production/modules/db_postgresql_admin/manifests/init.pp
में निम्नलिखित सामग्री का होना आवश्यक है।class db_postgresql_admin{
class{‘postgresql:server’:
listen_addresses=>’*’ #listening all interfaces
}
}
उपरोक्त उदाहरण में पोस्टग्रेस्क्ल::सर्वर वर्ग घोषित किया गया है और पैरामीटर सुनो_एड्रेस को "*" पर सेट किया गया है जिसका अर्थ है कि सभी इंटरफेस।
अब पोर्ट 5432 सभी इंटरफेस के साथ जुड़ा हुआ है, इसकी पुष्टि निम्नलिखित आईपी पते/पोर्ट से की जा सकती है:"0.0.0.0:5432"
$ sudo netstat -ntlp|grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1232/postgres
tcp6 0 0 :::5432 :::* LISTEN 1232/postgres
प्रारंभिक सेटिंग को वापस रखने के लिए:केवल लोकलहोस्ट से डेटाबेस कनेक्शन की अनुमति दें, सुनो_एड्रेस पैरामीटर को "लोकलहोस्ट" पर सेट किया जाना चाहिए या यदि वांछित हो तो मेजबानों की सूची निर्दिष्ट करना चाहिए:
listen_addresses = 'agent2.severalnines.com,agent3.severalnines.com,localhost'
मास्टर होस्ट से नया कॉन्फ़िगरेशन पुनर्प्राप्त करने के लिए, केवल नोड पर अनुरोध करने की आवश्यकता है:
$ /opt/puppetlabs/bin/puppet agent -t
तीसरा चरण
एक PostgreSQL डेटाबेस बनाएँ। इस डेटाबेस का उपयोग करने के लिए PostgreSQL इंस्टेंस को एक नए डेटाबेस के साथ-साथ एक नए उपयोगकर्ता (पासवर्ड के साथ) के साथ बनाया जा सकता है और इस नए उपयोगकर्ता के लिए डेटाबेस कनेक्शन की अनुमति देने के लिए pg_hab.conf फ़ाइल पर एक नियम:
class db_postgresql_admin{
class{‘postgresql:server’:
listen_addresses=>’*’ #listening all interfaces
}
postgresql::server::db{‘nines_blog_db’:
user => ‘severalnines’, password=> postgresql_password(‘severalnines’,’passwd12’)
}
postgresql::server::pg_hba_rule{‘Authentication for severalnines’:
Description =>’Open access to severalnines’,
type => ‘local’,
database => ‘nines_blog_db’,
user => ‘severalnines’,
address => ‘127.0.0.1/32’
auth_method => ‘md5’
}
}
इस अंतिम संसाधन का नाम "कई नौ के लिए प्रमाणीकरण" है और pg_hba.conf फ़ाइल में एक और अतिरिक्त नियम होगा:
# Rule Name: Authentication for severalnines
# Description: Open access for severalnines
# Order: 150
local nines_blog_db severalnines 127.0.0.1/32 md5
मास्टर होस्ट से नया कॉन्फ़िगरेशन प्राप्त करने के लिए, केवल नोड पर अनुरोध करने की आवश्यकता है:
$ /opt/puppetlabs/bin/puppet agent -t
चरण चार
केवल-पढ़ने के लिए उपयोगकर्ता बनाएं। रीड ओनली विशेषाधिकारों के साथ एक नया उपयोगकर्ता बनाने के लिए, निम्नलिखित संसाधनों को पिछले मेनिफेस्ट में जोड़ने की आवश्यकता है:
postgresql::server::role{‘Creation of a new role nines_reader’:
createdb => false,
createrole => false,
superuser => false, password_hash=> postgresql_password(‘nines_reader’,’passwd13’)
}
postgresql::server::pg_hba_rule{‘Authentication for nines_reader’:
description =>’Open access to nines_reader’,
type => ‘host’,
database => ‘nines_blog_db’,
user => ‘nines_reader’,
address => ‘192.168.1.10/32’,
auth_method => ‘md5’
}
मास्टर होस्ट से नया कॉन्फ़िगरेशन प्राप्त करने के लिए, केवल नोड पर अनुरोध करने की आवश्यकता है:
$ /opt/puppetlabs/bin/puppet agent -t
निष्कर्ष
इस ब्लॉग पोस्ट में, हमने आपको कई नोड्स (जो वर्चुअल मशीन भी हो सकते हैं) पर एक स्वचालित और अनुकूलित तरीके से अपने PostgreSQL डेटाबेस को तैनात करने और कॉन्फ़िगर करने के लिए बुनियादी कदम दिखाए हैं।
इस प्रकार के ऑटोमेशन आपको इसे मैन्युअल रूप से करने से अधिक प्रभावी बनने में मदद कर सकते हैं और PostgreSQL कॉन्फ़िगरेशन को कठपुतली भंडार में उपलब्ध कई वर्गों का उपयोग करके आसानी से किया जा सकता है