कॉन्फ़िगरेशन प्रबंधन: पुश बनाम पुल आधारित टोपोलॉजी


22

कठपुतली और बावर्ची जैसी अधिक स्थापित कॉन्फ़िगरेशन प्रबंधन (CM) प्रणाली पुल-आधारित दृष्टिकोण का उपयोग करती है: क्लाइंट अद्यतन के लिए समय-समय पर एक केंद्रीकृत मास्टर सर्वेक्षण करते हैं। उनमें से कुछ मास्टरलेस दृष्टिकोण के साथ-साथ (इसलिए, पुश-आधारित) की पेशकश करते हैं , लेकिन यह बताते हैं कि यह 'उत्पादन के लिए नहीं' (सॉल्टस्टैक) या 'कम स्केलेबल' (कठपुतली) है। एकमात्र प्रणाली जो मुझे पता है कि शुरू से ही पुश-आधारित है, रनर-अप Ansible है।

पुल आधारित प्रणाली का विशिष्ट मापनीयता लाभ क्या है? पुश-एजेंट की तुलना में अधिक पुल-मास्टर्स जोड़ना आसान क्यों माना जाता है?

उदाहरण के लिए, agiletesting.blogspot.nl लिखते हैं:

'पुल' प्रणाली में, क्लाइंट एक दूसरे से स्वतंत्र रूप से सर्वर से संपर्क करते हैं, इसलिए एक पूरे के रूप में सिस्टम 'पुश' सिस्टम की तुलना में अधिक स्केलेबल है

दूसरी ओर, रैकस्पेस दर्शाता है कि वे पुश-आधारित मॉडल के साथ 15K सिस्टम को संभाल सकते हैं ।

infastructures.org लिखते हैं:

हम समर्थन, CVSup, एक rsync सर्वर, या cfengine जैसे उपकरण का उपयोग करके, इन्फ्रास्ट्रक्चर को बनाए रखने के लिए एक पुल कार्यप्रणाली द्वारा शपथ लेते हैं। ग्राहकों को पुश परिवर्तन करने के बजाय, प्रत्येक व्यक्तिगत क्लाइंट मशीन को बूट सर्वर पर मतदान करने के लिए ज़िम्मेदार होना चाहिए, और समय-समय पर बाद में, अपने स्वयं के सुधार को बनाए रखने के लिए। इस दृष्टिकोण को अपनाने से पहले, हमने ssh, rsh, rcp और rdist के आधार पर व्यापक पुश-आधारित स्क्रिप्ट विकसित कीं। R- कमांड (या ssh) के साथ हमने जो समस्या पाई, वह यह थी: जब आप अपने टार्गेट मशीनों को बदलने के लिए एक r- कमांड आधारित स्क्रिप्ट चलाते हैं, तो संभावना यह होती है कि यदि आपके पास 30 से अधिक लक्ष्य हैं, तो उनमें से एक को होस्ट करेगा किसी भी समय नीचे हो। कमीशन मशीनों की सूची बनाए रखना दुःस्वप्न बन जाता है। इसको ठीक करने के लिए कोड लिखने के दौरान, आप इससे निपटने के लिए विस्तृत आवरण कोड समाप्त कर देंगे: मृत मेजबान से मध्यांतर; लॉगिंग और मृत मेजबान को फिर से प्रयास करना; समय की उचित मात्रा में कई मेजबानों को हिट करने की कोशिश करने के लिए समानांतर नौकरियों को पकड़ना और चलाना; और अंत में आउटबाउंड rsh सत्रों के साथ स्रोत मशीन पर सभी उपलब्ध टीसीपी सॉकेट्स का उपयोग करने के मामले का पता लगाना और रोकना। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियाँ नहीं करते हैं। समय की उचित मात्रा में कई मेजबानों को हिट करने की कोशिश करने के लिए समानांतर नौकरियों को पकड़ना और चलाना; और अंत में आउटबाउंड rsh सत्रों के साथ स्रोत मशीन पर सभी उपलब्ध टीसीपी सॉकेट्स का उपयोग करने के मामले का पता लगाना और रोकना। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियाँ नहीं करते हैं। समय की उचित मात्रा में कई मेजबानों को हिट करने की कोशिश करने के लिए समानांतर नौकरियों को बनाना और चलाना; और अंत में आउटबाउंड rsh सत्रों के साथ स्रोत मशीन पर सभी उपलब्ध टीसीपी सॉकेट्स का उपयोग करने के मामले का पता लगाना और रोकना। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। और अंत में आउटबाउंड rsh सत्रों के साथ स्रोत मशीन पर सभी उपलब्ध टीसीपी सॉकेट्स का उपयोग करने के मामले का पता लगाना और रोकना। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। और अंत में आउटबाउंड rsh सत्रों के साथ स्रोत मशीन पर सभी उपलब्ध टीसीपी सॉकेट्स का उपयोग करने के मामले का पता लगाना और रोकना। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। फिर भी आपको अभी भी समस्या है कि आपने भविष्य में स्थापित होने वाले सभी नए मेजबानों के लिए जो कुछ भी स्थापित किया है, उसे करने के साथ-साथ मरने वाले किसी भी मेजबान के लिए इसे दोहराएं और कल फिर से बनाया जाए। मुसीबत के बाद हम आर-कमांड आधारित प्रतिकृति को लागू करने के लिए गए, हमने पाया कि यह इसके लायक नहीं है। हम फिर से आर-कमांड के साथ या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ एक बुनियादी ढांचे के प्रबंधन पर योजना नहीं बनाते हैं। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं। या उस मामले के लिए किसी अन्य धक्का तंत्र के साथ। वे पैमाने के साथ-साथ पुल-आधारित विधियां नहीं करते हैं।

यह एक वास्तुशिल्प के बजाय एक कार्यान्वयन समस्या नहीं है? एक थ्रेडेड पुल सर्वर की तुलना में थ्रेडेड पुश क्लाइंट लिखना कठिन क्यों है?


4
बस एक नोट, Ansible पुल के माध्यम से भी कर सकता है ansible-pull
सियजॉयज

1
एक बड़ा फायदा नैट और फायरवॉल को पीछे कर रहा है। यह अक्सर एक सड़क नहीं है, लेकिन कभी-कभी यह गेम चेंजर होता है।
डैन गर्थवाइट

SALT पब / सब ZeroMQ का उपयोग करता है। जो अलग है।
डैन गर्थवाइट

1
[डेप्स-टूलचैन] [1] मेलिंग सूची पर अनुप्रयोग परिनियोजन बनाम सिस्टम कॉन्फ़िगरेशन थ्रेड में इस बारे में व्यापक बहस हुई थी । [१]: code.google.com/p/devops-toolchain
१३:४४ पर Sciurus

1
btw - एचपी सर्वर ऑटोमेशन पुश-मॉडल है, और हजारों उपकरणों का प्रबंधन कर सकता है {प्रकटीकरण - मैं एचपी पार्टनर के लिए ऑटोमेशन आर्किटेक्ट हूं}
वॉरेन

जवाबों:


8

पुश आधारित सिस्टम के साथ समस्या यह है कि आपके पास केंद्रीय पुश नोड पर संपूर्ण आर्किटेक्चर का एक पूरा मॉडल होना चाहिए। आप उस मशीन को धक्का नहीं दे सकते जिसके बारे में आप नहीं जानते हैं।

यह स्पष्ट रूप से काम कर सकता है, लेकिन इसे सिंक में रखने के लिए बहुत काम लगता है।

Mcollective जैसी चीजों का उपयोग करके, आप कठपुतली और अन्य मुख्यमंत्री को धक्का आधारित प्रणाली में परिवर्तित कर सकते हैं। आम तौर पर, पुल सिस्टम को एक पुश आधारित एक में परिवर्तित करना तुच्छ होता है, लेकिन हमेशा दूसरे रास्ते पर जाने के लिए सरल नहीं होता है।

संगठनात्मक राजनीति का सवाल भी है। एक पुश आधारित प्रणाली केंद्रीय व्यवस्थापक के सभी नियंत्रण हाथ रखती है। इस तरह से जटिलता का प्रबंधन करना बहुत कठिन हो सकता है। मुझे लगता है कि स्केलिंग मुद्दा एक लाल हेरिंग है, या तो तराजू पर पहुंचें यदि आप सिर्फ क्लाइंट की संख्या को देखते हैं। कई मायनों में पुश स्केल करना आसान है। हालाँकि, डायनेमिक कॉन्फ़िगरेशन कम या ज्यादा करता है जो आपके पास क्लाइंट पंजीकरण का कम से कम एक पुल संस्करण है।

अंततः, यह इस बारे में है कि कौन सी प्रणाली आपके संगठन में वर्कफ़्लो और स्वामित्व से मेल खाती है। एक सामान्य नियम के रूप में, पुल सिस्टम अधिक लचीले होते हैं।


2
धन्यवाद! लेकिन डायनेमिक कॉन्फ़िगरेशन इंप्रेस क्यों करेगा? उदाहरण के लिए, ऐनेबल्ड डायनेमिक पुश का उपयोग करता है। तो ऐसा लगता है कि कठपुतली गतिशील धक्का नहीं कर सकती है, कार्यान्वयन की सीमा है, वास्तुकला की सीमा नहीं है, है ना?
विलेम

4
@Willem वास्तव में "गतिशील" वातावरण का अर्थ है एक नई मशीन किसी भी समय कहीं भी दिखाई दे सकती है, और इसके लिए कॉन्फ़िगरेशन की आवश्यकता होती है। एक पुश-आधारित सिस्टम से आपको केंद्रीय नोड पर उस सिस्टम को कॉन्फ़िगर करने की आवश्यकता होती है; पुल-आधारित सिस्टम कॉन्फ़िगरेशन सर्वर (ओं) के लिए कुछ भी करने की आवश्यकता के बिना पर्यावरण व्यवस्थापक के बिना (जेनेरिक) कॉन्फ़िगरेशन को खींच सकता है।
voretaq7

1
Zabbix मेजबानों को पता चलता है, Ansible एक गतिशील इन्वेंट्री का उपयोग करके एक डिस्क कॉन्फ़िगरेशन को नए प्रिय मेजबानों तक पहुंचा सकता है।
bbaassssiiee

हाँ, ansible अपनी गतिशील सूची के लिए कई स्रोतों का उपयोग कर सकता है, इसलिए उदाहरण के लिए ESX API। इस तरह से आप एक VM के बारे में जानते हैं जैसे ही यह बनाया जाता है, और एक पैटर्न मैच पर नाटक चला सकते हैं।
जेएम बेकर

11

यदि यह किसी के लिए भी रूचिकर है, तो मुझे लगता है कि मैं कम से कम एक उपयोगकर्ता अनुभव रिपोर्ट दे सकता हूं, जिसने मिशन-क्रिटिकल सिस्टम के मल्टी-होस्ट सेटअप के पैच प्रबंधन के संदर्भ में अंसिबल के आउट ऑफ द बॉक्स पुश क्षमता का पहला उपयोग किया है। अमेज़न बादल में। मेरी पूर्व धारणाओं या पूर्वाग्रहों को समझने के लिए, मुझे यह समझाना चाहिए कि ऑटोमेशन स्क्रिप्टिंग स्तर पर रूबी के लिए मेरी प्राथमिकता है और अतीत में मास्टर-एजेंट कठपुतली कॉन्फ़िगरेशन प्रति प्रोजेक्ट-वीपीसी का उपयोग करने के लिए परियोजनाएं स्थापित की हैं। इसलिए मेरा अनुभव पिछले पूर्वाग्रहों को मानता है, अगर कोई था।

मेरा हालिया अनुभव दर्जनों से कई सैकड़ों सर्वरों के बदलते एस्टेट पर डायनेमिक पुश के लिए बहुत अनुकूल था, जो ऊपर या नीचे हो सकता है, समाप्त और ताज़ा हो सकता है। मेरी स्थिति में एक साधारण Ansible 1.7 तदर्थ कमांड था जो मुझे पैच बनाने के लिए आवश्यक था। हालांकि इस उद्देश्य के लिए प्रति Vpc में एक AnsibleController (एक t2.micro पर) स्थापित करने की प्रभावशीलता को देखते हुए, भविष्य में मैं अधिक जटिल आवश्यकताओं के लिए तकनीक का विस्तार करने का इरादा कर रहा हूं।

तो मुझे इस थ्रेड में पूछे गए प्रश्न पर वापस लौटना चाहिए: डायनेमिक रूप से बदलती संपत्ति में पेशेवरों और विपक्षों को धक्का।

मेरे द्वारा लक्षित सर्वर संपदा की तरह की धारणाएं थीं:

  • कोई भी धारणा यह नहीं है कि आईपी पते या अमेज़ॅन-जनित स्थानीय होस्टनाम लंबे समय तक चलने वाले होंगे - वे दोनों आ सकते हैं और जा सकते हैं
  • सभी उदाहरणों को मशीन की छवियों से बनाया गया था जो पहले से ही एक विशेषाधिकार प्राप्त प्रशासनिक उपयोगकर्ता से ssh तक पहुंच बनाने की क्षमता रखते थे
  • सर्वरों को अलग करने के लिए, और संभावित रूप से उन्हें समूहों में विभाजित करें, फ़ंक्शन के अनुसार या विकास के चरण (उदाहरण के लिए परीक्षण या ठेस) के अनुसार यह सहमत पारंपरिक नामों के लॉन्च विशिष्ट अमेज़ॅन टैग के माध्यम से किया जाएगा।
  • मैं अलग-अलग तदर्थ आदेशों के साथ अलग से लिनक्स और विंडोज सर्वरों को प्रशासित करूंगा, इसलिए विंडोज सर्वर से संपर्क करने पर लिनक्स विशिष्ट लॉगिन को विफल होने देता है।

इन स्थितियों को ध्यान में रखते हुए, कई सर्वरों में ड्रॉप करने और मौजूदा सर्वर खातों के भीतर स्वस्थानी में (क्रेडेंशियल्स के साथ) कॉन्फ़िगर करने के लिए एक AnsibleController की एक मशीन छवि बनाना बहुत सरल है। छवि से बनाई गई प्रत्येक आवृत्ति के भीतर स्वचालित है

  1. नियमित अंतराल पर चल रहे सर्वर पर पैच को पुश करने के लिए एक क्रॉन नौकरी ताकि आवश्यक संपत्ति लगातार अंतराल पर पहुंच जाए
  2. इस तरह के हर अंतराल पर Ansible इन्वेंट्री की गणना का एक तरीका।

यदि आवश्यक हो तो दूसरी वस्तु को अपेक्षाकृत परिष्कृत बनाया जा सकता है (Ansible इन्वेंट्री की जानकारी संरचना के माध्यम से)। लेकिन अगर परिष्कार की आवश्यकता नहीं है, तो यहां प्रत्येक क्रोन अंतराल पर सभी अमेज़ॅन ईसी 2 उदाहरणों की गणना करने और एक उचित इन्वेंट्री फ़ाइल (जैसे / आदि / ansible / होस्ट) में परिणामों को निर्देशित करने के लिए स्क्रिप्ट का एक बहुत ही सरल उदाहरण है ...

#!/bin/bash
# Assumes aws-cli/1.3.4 Python/2.6.9 Linux/3.4.73-64.112.amzn1.x86_64 or greater
# http://aws.amazon.com/releasenotes/8906204440930658
# To check yum list aws-cli
# Assumes that server is equipped with AWS keys and is able to access some or all
# instances in the account within it is running.
# Provide a list of host IPs each on a separate line
# If an argument is passed then treat it as the filename, whether local or absolute 
# path, to which the list is written

function list-of-ips {
    /usr/bin/aws ec2 describe-instances --filters '[ {"Name": "instance-state-code", "Values": [ "16" ] } ]' | grep -w PrivateIpAddress | awk  '{x=$2; gsub("\"","", x); gsub(",","", x); if(x && FNR!=1){print x;}}' | uniq
 }

if [ -n "$1" ]; then
   list-of-ips > "$1"
else
   list-of-ips
fi

उपयोग के मामले के लिए एकमात्र चेतावनी यह है कि पैच कमांड को बेरोजगार होना चाहिए। यह पूरी तरह से सुनिश्चित करने के लिए पूर्व-परीक्षण करने के लिए वांछनीय है कि यह संतुष्ट है, यह सुनिश्चित करने के हिस्से के रूप में कि पैच वास्तव में क्या करना है।

इसलिए संक्षेप में, मैंने एक उपयोग के मामले को चित्रित किया है जहां गतिशील धक्का मेरे द्वारा निर्धारित लक्ष्यों के खिलाफ प्रभावी है। यह एक दोहराने योग्य समाधान है (एक छवि में समझाया जा रहा है जिसे कई खातों और क्षेत्रों में रोल आउट किया जा सकता है)। मेरे अनुभव में तारीख को गतिशील पुश तकनीक प्रदान करना बहुत आसान है --- और कार्रवाई में शामिल --- वर्तमान में हमारे लिए उपलब्ध टूलसेट से उपलब्ध विकल्पों की तुलना में।


2
//, @jonz, यह उस तरह की चर्चा है जिसके लिए, मुझे लगता है, अनुभवी डेवलपर्स स्टैक एक्सचेंज मॉडल से प्यार करने लगे हैं। मुझे विशेष रूप से आपके द्वारा चुनी गई शर्तें पसंद हैं, और यह उत्तर पहले मान्यताओं को सूचीबद्ध करता है।
नाथन बसानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.