नमस्ते

यह विषय
कठपुतली विन्यास प्रबंधन प्रणाली के उपयोग पर लेखों की एक श्रृंखला खोलता है।
विन्यास प्रबंधन प्रणाली क्या है?
मान लीजिए कि आपके पास विभिन्न कार्यों को करने वाले सर्वरों का एक बेड़ा है। जबकि कुछ सर्वर हैं और आप बढ़ नहीं रहे हैं, आप आसानी से प्रत्येक सर्वर को मैन्युअल रूप से कॉन्फ़िगर कर सकते हैं। ओएस स्थापित करें (शायद स्वचालित रूप से), उपयोगकर्ताओं को जोड़ें, सॉफ़्टवेयर स्थापित करें, कंसोल में कमांड दर्ज करें, सेवाओं को कॉन्फ़िगर करें, अपने पसंदीदा पाठ संपादकों (नैनोकोर, वीआईएमआरसी) के कॉन्फ़िगरेशन को संपादित करें, उन पर एक ही डीएनएस सर्वर सेटिंग्स सेट करें, मॉनिटरिंग सिस्टम एजेंट स्थापित करें, कॉन्फ़िगर करें लॉग के केंद्रीकृत संग्रह के लिए syslog ... एक शब्द में, बहुत काम है और यह विशेष रूप से दिलचस्प नहीं है।
मुझे पूरा विश्वास है कि एक अच्छा व्यवस्थापक एक आलसी व्यवस्थापक है। वह कई बार कुछ करना पसंद नहीं करता। पहला विचार कुछ स्क्रिप्ट लिखना है जिसमें कुछ इस तरह होगा:
servers.sh
servers="server00 server01 server02 server03 server04" for server in $servers ; do scp /path/to/job/file/job.sh $server:/tmp/job.sh ssh $server sh /tmp/job.sh done
job.sh
सब कुछ आसान और अच्छा लग रहा था। हमें कुछ करने की जरूरत है - हम एक नई स्क्रिप्ट लिखते हैं, इसे चलाते हैं। क्रमिक रूप से सभी सर्वरों में परिवर्तन आता है। अगर स्क्रिप्ट पर अच्छी तरह से बहस हो जाए, तो सबकुछ ठीक हो जाएगा। कुछ समय के लिए।
अब कल्पना करें कि अधिक सर्वर हैं। उदाहरण के लिए, एक सौ। और परिवर्तन लंबा है - उदाहरण के लिए, स्रोत से कुछ बड़ा और डरावना (उदाहरण के लिए, कर्नेल) का संयोजन। स्क्रिप्ट सौ साल तक चलेगी, लेकिन यह इतनी बुरी नहीं है।
कल्पना करें कि आपको केवल इस सौ सर्वर के विशिष्ट समूह पर ऐसा करने की आवश्यकता है। और दो दिनों के बाद, आपको दूसरे सर्वर स्लाइस पर एक और बड़ा काम करने की आवश्यकता है। आपको प्रत्येक बार स्क्रिप्ट्स को फिर से लिखना होगा और कई बार यह देखना होगा कि उनमें कोई त्रुटि है या नहीं, या इससे स्टार्टअप पर कोई समस्या होगी या नहीं।
सबसे बुरी बात यह है कि इस तरह की लिपियों में आप उन
कार्यों का वर्णन करते हैं जिन्हें सिस्टम को एक निश्चित स्थिति में लाने के लिए किया जाना चाहिए, न कि इस राज्य में ही। इसलिए, यदि सिस्टम शुरू में उस स्थिति में नहीं था जिसकी आपको उम्मीद थी, तो निश्चित रूप से सब कुछ गलत हो जाएगा। कठपुतली अभिव्यक्तियाँ प्रणाली की आवश्यक स्थिति का वर्णन करती हैं, और यह गणना करना कि इसे वर्तमान स्थिति से कैसे प्राप्त किया जाए, यह विन्यास प्रबंधन प्रणाली का ही कार्य है।
तुलना के लिए: कठपुतली का प्रदर्शन जो विषय के शीर्ष से स्क्रिप्ट के एक जोड़े के रूप में एक ही काम करता है:
nginx.pp
class nginx { package { 'nginx': ensure => latest } service { 'nginx': ensure => running, enable => true, require => Package['nginx'] } } node /^server(\d+)$/ { include nginx }
यदि आप सही ढंग से सर्वर का उपयोग करते हैं और कॉन्फ़िगरेशन प्रबंधन प्रणाली के प्रारंभिक सेटअप पर कुछ समय बिताते हैं, तो आप सर्वर के बेड़े की ऐसी स्थिति प्राप्त कर सकते हैं कि आपको काम करने के लिए उन्हें लॉग इन करने की आवश्यकता नहीं है। सभी आवश्यक परिवर्तन अपने आप आ जाएंगे।
कठपुतली क्या है?
कठपुतली एक विन्यास प्रबंधन प्रणाली है। आर्किटेक्चर क्लाइंट-सर्वर है, कॉन्फ़िगरेशन सर्वर पर संग्रहीत होते हैं (कठपुतली शब्दों में उन्हें
मैनिफ़ेस्ट कहा जाता
है ), क्लाइंट सर्वर तक पहुंचते हैं, उन्हें प्राप्त करते हैं और उन्हें लागू करते हैं। पपेट को रूबी में लिखा गया है, प्रकट रूप से एक विशेष डीएसएल में लिखा गया है, जो रूबी के समान ही है।
पहला कदम
चलो ग्राहकों, सर्वरों, उनकी बातचीत आदि के बारे में भूल जाते हैं। मान लीजिए कि हमारे पास केवल एक सर्वर है जिस पर एक नंगे ओएस स्थापित किया गया है (इसके बाद मैं Ubuntu 12.04 में काम करता हूं, अन्य प्रणालियों के लिए क्रियाएं थोड़ी भिन्न होंगी)।
पहले कठपुतली नवीनतम संस्करण स्थापित करें।
wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb dpkg -i puppetlabs-release-precise.deb apt-get update apt-get install puppet puppetmaster
अद्भुत। अब कठपुतली हमारे सिस्टम में स्थापित है और आप इसके साथ खेल सकते हैं।
नमस्ते दुनिया!
पहला प्रदर्शन बनाएँ:
/tmp/helloworld.pp
file { '/tmp/helloworld': ensure => present, content => 'Hello, world!', mode => 0644, owner => 'root', group => 'root' }
और इसे लागू करें:
$ puppet apply helloworld.pp /Stage[main]//File[/tmp/helloworld]/ensure: created Finished catalog run in 0.06 seconds
लॉन्च के बारे में थोड़ा साइस विषय में दिए गए मैनिफ़ेस्ट्स को कठपुतली लागू का उपयोग करके मैन्युअल रूप से लागू किया जा सकता है। हालांकि, बाद के विषयों में, काम के लिए मास्टर-स्लेव कॉन्फ़िगरेशन (कठपुतली के लिए मानक) का उपयोग किया जाएगा।
अब / tmp / helloworld फ़ाइल की सामग्री देखें। इसमें (आश्चर्यजनक रूप से!) लाइन होगी "हैलो, दुनिया!", जिसे हमने मैनिफ़ेस्ट में सेट किया है।
आप कह सकते हैं कि आप
echo "Hello, world!" > /tmp/helloworld
echo "Hello, world!" > /tmp/helloworld
, यह तेज, आसान होगा, मुझे सोचना नहीं होगा, कुछ डरावने घोषणापत्र लिखने होंगे और सामान्य तौर पर
इसे किसी की भी जरूरत नहीं होगी, यह किसी भी तरह से जटिल है, लेकिन अधिक गंभीरता से सोचें। वास्तव में,
touch /tmp/helloworld && echo "Hello, world!" > /tmp/helloworld && chmod 644 /tmp/helloworld && chown root /tmp/helloworld && chgrp root /tmp/helloworld
लिखना आवश्यक होगा
touch /tmp/helloworld && echo "Hello, world!" > /tmp/helloworld && chmod 644 /tmp/helloworld && chown root /tmp/helloworld && chgrp root /tmp/helloworld
touch /tmp/helloworld && echo "Hello, world!" > /tmp/helloworld && chmod 644 /tmp/helloworld && chown root /tmp/helloworld && chgrp root /tmp/helloworld
उसी परिणाम की गारंटी देने के लिए।
आइए उन रेखाओं को देखें जो वास्तव में हमारे प्रकटीकरण में निहित हैं:
/tmp/helloworld.pp
file { '/tmp/helloworld': ensure => present,
कठपुतली के संदर्भ में, नाम (शीर्षक)
/ tmp / helloworld के साथ एक
फ़ाइल प्रकार
संसाधन यहाँ वर्णित है ।
साधन
एक संसाधन कठपुतली में अमूर्त की सबसे छोटी इकाई है। संसाधन हो सकते हैं:
- फ़ाइलें;
- संकुल (कठपुतली कई वितरण के पैकेज सिस्टम का समर्थन करता है);
- सेवाएं;
- उपयोगकर्ताओं;
- समूह;
- क्रोन कार्य
- और टी। डी।
आप
दस्तावेज़ में संसाधनों
के सिंटैक्स को देख सकते हैं।
कठपुतली में संसाधनों को जोड़ने की क्षमता होती है। इसलिए, यदि आप भ्रमित हो जाते हैं, तो आप इस तरह प्रकट हो सकते हैं:
webserver.pp
include webserver; webserver::vhost { 'example.com': ensure => present, size => '1G', php => false, https => true }
इस स्थिति में, कठपुतली सर्वर पर 1 GiB का एक तार्किक आयतन बनाएगा, जहाँ आवश्यक हो (उदाहरण के लिए, /var/www/example.com में) माउंट करें, fstab में आवश्यक प्रविष्टियाँ जोड़ें, nginx और Apache में आवश्यक वर्चुअल होस्ट बनाएँ, दोनों डेमों को पुनरारंभ करें, example.com को ftp में जोड़ें और पासवर्ड के साथ mySuperSecretPassWord के साथ sftp इस वर्चुअल होस्ट तक पहुँच लिखें।
क्या यह स्वादिष्ट है? गलत शब्द!
इसके अलावा, मेरी राय में, सबसे स्वादिष्ट, दिनचर्या का स्वचालन नहीं है। यदि आप एक बेवकूफ हैं, उदाहरण के लिए, और उत्पादन में अपने सर्वरों को फिर से माउंट करते हैं, तो कठपुतली आपको एक पुराने प्यार से बनाए गए पैकेज का सेट लेने की अनुमति देगा और पूरी तरह से स्वचालित मोड में स्क्रैच से कॉन्फ़िगर करेगा। आप बस कठपुतली एजेंट स्थापित करें, इसे अपने कठपुतली मास्टर से कनेक्ट करें और प्रतीक्षा करें। सब कुछ अपने आप आ जाएगा। पैकेज एक जादुई (नहीं, वास्तव में जादुई!) सर्वर पर दिखाई देगा, जिस तरह से, आपके ssh कुंजियाँ विघटित हो जाएंगी, एक फ़ायरवॉल स्थापित किया जाएगा, व्यक्तिगत बैश और नेटवर्क सेटिंग्स आएंगी, सभी सॉफ्टवेयर जिसे आपने जानबूझकर स्थापित किया है, जो कठपुतली का उपयोग करके स्थापित और कॉन्फ़िगर किया जाएगा।
इसके अलावा, कठपुतली जब एक स्व-दस्तावेजीकरण प्रणाली प्राप्त करने की कोशिश कर रही है, क्योंकि कॉन्फ़िगरेशन (प्रकट) स्वयं प्रलेखन की रीढ़ है। वे हमेशा प्रासंगिक होते हैं (वे पहले से ही काम करते हैं), उनके पास कोई त्रुटि नहीं है (आप शुरू करने से पहले अपनी सेटिंग्स की जांच करते हैं), वे न्यूनतम रूप से विस्तृत हैं (यह काम करता है)।
कुछ और जादू
क्रॉस वितरण के बारे में थोड़ा साकठपुतली में क्रॉस-वितरण मैनिफ़ेस्ट का उपयोग करने की क्षमता है, यह उन उद्देश्यों में से एक है जिसके लिए इसे बनाया गया था। मैंने जानबूझकर कभी इसका इस्तेमाल नहीं किया और मैं आपको इसकी सलाह नहीं देता। सर्वर पार्क सिस्टम सॉफ़्टवेयर के संदर्भ में जितना संभव हो उतना सजातीय होना चाहिए, यह आपको महत्वपूर्ण क्षणों पर सोचने की अनुमति नहीं देता है
rc.d, init.d ”(ArchLinux के प्रति उत्सुकता) नहीं है और आम तौर पर आपको नियमित कार्यों पर कम सोचने की अनुमति देता है।
कई संसाधन अन्य संसाधनों पर निर्भर करते हैं। उदाहरण के लिए, संसाधन "sshd सेवा" के लिए संसाधन "sshd पैकेज" और वैकल्पिक "sshd config" की आवश्यकता होती है
आइए देखें कि यह कैसे लागू किया जाता है:
file { 'sshd_config': path => '/etc/ssh/sshd_config', ensure => file, content => "Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes", mode => 0644, owner => root, group => root, require => Package['sshd'] } package { 'sshd': ensure => latest, name => 'openssh-server' } service { 'sshd': ensure => running, enable => true, name => 'ssh' subscribe => File['sshd_config'], require => Package['sshd'] }
यह एक इनलाइन कॉन्फ़िगरेशन का उपयोग करता है, जो प्रकट रूप से बदसूरत बनाता है। वास्तव में, यह लगभग कभी नहीं किया गया है, एक ईआरबी-आधारित टेम्पलेट इंजन है और बस बाहरी फ़ाइलों का उपयोग करने की क्षमता है। लेकिन हमें इसमें कोई दिलचस्पी नहीं है।
यहां सबसे स्वादिष्ट लाइनें निर्भरता रेखाएं हैं - आवश्यकता और सदस्यता।
कठपुतली निर्भरता का वर्णन करने के लिए कई विकल्पों का समर्थन करती है। विवरण, हमेशा की तरह,
प्रलेखन में पाया जा सकता है।
- आवश्यकता का मतलब वही है जो अपेक्षित है। यदि संसाधन A संसाधन B पर निर्भर करता है, तो कठपुतली पहले संसाधन B को संसाधित करेगी और फिर संसाधन A पर वापस लौटेगी।
- सदस्यता थोड़ा पेचीदा व्यवहार देता है। यदि संसाधन A को संसाधन B की सदस्यता दी जाती है, तो कठपुतली पहले संसाधन B को संसाधित करेगी, और फिर संसाधन A पर वापस लौटेगी (व्यवहार की आवश्यकता के समान है), और फिर, यदि B बदलता है, तो इसे पुन: संसाधित किया जाएगा। यह उस पर निर्भर करने के लिए बहुत सुविधाजनक है जो इस पर निर्भर करता है उनके विन्यास से (जैसा कि ऊपर के उदाहरण में है)। यदि कॉन्फ़िगरेशन बदलता है, तो सर्वर पुनरारंभ होता है, इसके बारे में खुद को चिंता करने की कोई आवश्यकता नहीं है।
पहले भी
अधिसूचित किए गए हैं, लेकिन हम यहां उन पर स्पर्श नहीं करेंगे। इच्छुक लोगों के लिए - पहले से ही उल्लेखित
प्रलेखन में ।
परिणाम
फिलहाल, हम पहले ही सीख चुके हैं कि संसाधनों के बीच निर्भरता को दर्शाते हुए सरल अभिव्यक्तियों को कैसे लिखा जाए। बहुत सारे साधारण दानव पैकेज-कॉन्फ़िगरेशन-सेवा मॉडल में आते हैं, इसलिए इस रूप में भी कठपुतली उपयोग के लिए पहले से ही उपयुक्त है।
निम्नलिखित विषयों का वर्णन होगा कि वैक्यूम में एक गोलाकार LAMP होस्टिंग बनाते समय अधिक शक्तिशाली कठपुतली सुविधाओं का उपयोग कैसे करें (यदि प्रशिक्षण के लिए एक गोलाकार परियोजना के लिए अन्य विचार हैं, तो पीएम या टिप्पणी में आपका स्वागत है)।
संबंधित लिंक