स्वचालित लिनक्स अपडेट के लिए सर्वश्रेष्ठ अभ्यास


11

हम अपने आरएचईएल / आरएचईएल-आधारित सर्वरों के लिए स्वचालित अपडेट करने के तरीके पर काम कर रहे हैं।

प्रारंभिक विचार: कठपुतली का उपयोग करते हुए, हम डिफ़ॉल्ट रिपॉजिटरी को अक्षम करते हैं और अपने आप को इंगित करते हैं। फिर, हम ensure => latestउन पैकेजों के लिए उपयोग करते हैं जिन्हें हम स्वचालित रूप से अपडेट करना चाहते हैं।

समस्या: हम देख रहे हैं कि कुछ सेवाएँ अपडेट (डुह) के बाद पुनः आरंभ होती हैं।

प्रश्न: क्या किसी के पास सेवाओं के स्वचालित पुनरारंभ को कम करने के लिए लिनक्स अपडेट और रणनीतियों को बेहतर बनाने के लिए कोई सलाह है? हम एक समाधान पसंद करेंगे जिसमें कठपुतली शामिल है लेकिन, अगर हमें किसी अन्य सेवा का उपयोग करने की आवश्यकता है, तो यह एक सौदा ब्रेकर नहीं है।

संपादित करें

संभावित समाधान: मैंने एक समाधान प्रस्तुत किया जो @ voretaq7 और @ewwhite में से कई को लागू करता है। ऐसा लगता है कि मैं जिस समय के लिए जा रहा हूं वह मार्ग है। यदि आपके पास कोई अन्य सुझाव है, तो कृपया टिप्पणी करें या जवाब प्रस्तुत करें।

जवाबों:


14

आपकी सामान्य अपडेट रणनीति ध्वनि है: आपके पास एक स्थानीय रेपो है (जो मैं आपको देव माहौल में परीक्षण करता हूं), और आप सब कुछ उसी के आधार पर अपडेट करते हैं (मुझे लगता है कि अच्छा रेपो)।

सेवा पुनरारंभ करने की बात अपरिहार्य है: यदि अंतर्निहित कोड बदल गया है तो आपको उस परिवर्तन के प्रभावी होने के लिए सेवा को पुनरारंभ करने की आवश्यकता है। ऐसा करने में विफल होने से परिणाम खराब हो सकते हैं (कोड को एक साझा लाइब्रेरी के साथ सिंक से बाहर चलाने पर एप्लिकेशन के क्रैश हो सकता है)।
अपने वातावरण में मैं त्रैमासिक पैच विंडो को त्रैमासिक रूप से "सभी का वर्णन करता हूं!" खिड़कियां भी। ऐसी नीति का लाभ यह है कि आप जानते हैं कि आपके सर्वर एक पुनरारंभ होने के बाद वापस आ जाएंगे, और आप जानते हैं कि वे ठीक से काम करेंगे (क्योंकि आप उन्हें नियमित रूप से परीक्षण करते हैं)।


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

जोड़ा अतिरेक भी हार्डवेयर विफलताओं की स्थिति में आपकी रक्षा करता है, जो लंबे समय से पर्याप्त समय के पैमाने पर अपरिहार्य हैं।


4
रीबूट ऑल द थिंग्स के लिए +1।
टॉम ओ'कॉनर

2
@ TomO'Connor मैंने कठिन तरीका सीखा है। मैं रिबूट के बीच लगभग 3 महीने तक बहुत सहज महसूस करता हूं, उसके बाद मुझे आश्चर्य होता है कि मैंने जो किया वह गायब होने वाला है। अंतिम रिबूट हमने वास्तव में एक वीपीएन सुरंग खो दी थी (सुरंग कठिन-कोडित थी और ऊपर आई थी, लेकिन इसके लिए मार्ग जोड़ा नहीं गया था, इसलिए ... हाँ।)
voretaq7

आप से प्रेरित एक संभावित समाधान @ voretaq7
Belmin फर्नांडीज

@ BeamingMel-Bin आपको एक उत्तर के रूप में पोस्ट करना चाहिए - यह एक उचित दृष्टिकोण की तरह लगता है।
voretaq7

धन्यवाद। मैंने इसे राइड होम पर किया था, कुछ सोच के अनुसार वर्कफ़्लो में कुछ संशोधनों के साथ इसे पोस्ट किया।
बेलमिन फर्नांडीज

5

क्या पैकेज अद्यतन के बाद सेवा को फिर से शुरू करने में कोई समस्या है? यह देखने के लिए कि क्या कोई समस्या है, परिनियोजित करने से पहले एक छोटे पैमाने पर परीक्षण करें। मैं हाल ही में DenyHosts के rpmforge पैकेज के साथ एक बदसूरत मुद्दा था । यह वास्तव में एक यम अद्यतन से संशोधन के बीच अपने विन्यास और कार्य निर्देशिकाओं के स्थान को बदल दिया। यह पूरी तरह से अवांछित व्यवहार है। आमतौर पर, आरएचईएल के एक ही संशोधन के भीतर, बहुत सारे मुद्दे नहीं होते हैं, लेकिन आप परीक्षण किए बिना और प्रभावों को करीब से देखे बिना कभी सुनिश्चित नहीं हो सकते।

दूसरा विकल्प चुनिंदा सेवाओं को अपडेट करना है। क्या आपको हमेशा नवीनतम पैकेजों की आवश्यकता होती है, उदाहरण के लिए? यह अपडेट चलाने के आपके कारणों को समझने के लिए वापस जाता है। वास्तविक लक्ष्य क्या है?

अपने स्वयं के रेपो को चलाने का लाभ यह है कि आप रिलीज़ या रोलआउट को स्टेज कर सकते हैं और शेड्यूल को प्रबंधित कर सकते हैं। क्या होगा यदि आपके पास एक हार्डवेयर परिधीय या सॉफ़्टवेयर विक्रेता है जिसे आरएचईएल 5.6 की आवश्यकता है और 5.7 के तहत टूट जाएगा? अपने स्वयं के पैकेज को प्रबंधित करने के लाभों में से एक है।


मैं कहूंगा कि यदि अपडेट सेट एक सेवा पुनरारंभ करता है तो आप निश्चित रूप से उस पुनरारंभ को करना चाहते हैं। बेशक अगर आपको उस अपडेट को करने की आवश्यकता नहीं है (यह आपको एक सुविधा, सुरक्षा बढ़ाने, या किसी और चीज़ की ज़रूरत नहीं है) मैं इसे नहीं करूंगा, या मैं तब तक इंतजार करूंगा जब तक मैं आउटेज को शेड्यूल नहीं कर सकता। अपने और मेरे उपयोगकर्ताओं के लिए सुविधाजनक हो।
voretaq7

2

@ बीमिंग मेल-बिन

सरलीकरण लूप उपकरण के लिए ssh का उपयोग करने, कठपुतली शुरू / बंद करने की आवश्यकता को समाप्त कर देगा।

सबसे पहले आपको "noop" नामक एक वैरिएबल को शामिल करने के लिए अपने मैनिफ़ेस्ट को बदलना होगा, जिसका मान ENC से प्राप्त होता है।

तो आपके पास कक्षा में ऐसा कुछ होगा:

noop => $noop_status

noop_statusआपके ENC में कहां सेट किया गया है। आप का मान सेट जब noop_statusकरने के लिए true, प्रकट NOOP मोड में ही चलेंगे।

यदि आपके पास 100 से अधिक मेजबान हैं, तो आप डैशबोर्ड या फोरमैन जैसे ईएनसी का उपयोग कर सकते हैं जो आपको "होस्टग्रुप" या "डोमेन" स्तर पर विरासत में देकर कई मेजबानों के लिए बड़े पैमाने पर बदलाव की अनुमति देता है। फिर आप Hostgroup मान को ओवरराइड करते हुए परीक्षण होस्ट की एक छोटी संख्या के लिए "झूठी" मान सेट कर सकते हैं।

इसके साथ, कोई भी परिवर्तन केवल चयनित होस्ट पर लागू होता है।

एक केंद्रीय स्थान में एक पैरामीटर बदलने से लूप टूल के लिए ssh के साथ कठपुतली को चालू / बंद करने की आवश्यकता के बिना, किसी भी संख्या में मेजबानों को प्रभावित किया जा सकता है। आप सुरक्षा / प्रबंधन के लिए अपने मेजबान को कई समूहों में विभाजित कर सकते हैं।

यह भी ध्यान दें कि मैनिफ़ेस्ट में हार्ड कोडिंग पैकेज संस्करण संख्याओं के बजाय, आप उन्हें ENC में रख सकते हैं। और ऊपर की तरह, आप चुनिंदा परिवर्तन लागू कर सकते हैं और रोलआउट प्रबंधित कर सकते हैं।

यदि आप अधिक ग्रैन्युलैरिटी (और जटिलता) चाहते हैं, तो आपके पास प्रति वर्ग पैरामीटर भी हो सकते हैं, जैसे noop_status_apacheClassऔर इतने पर।

यदि आप includeअन्य कक्षाओं में कक्षाएं लेते हैं, तो इसे प्रबंधित करना कठिन हो सकता है ।


1

संभावित समाधान @ voretaq7 के उत्तर पर आधारित है:

  1. puppetमैनिफ़ेस्ट में पैकेज का हार्ड कोड संस्करण संख्या और हमारी अपनी रिपॉजिटरी में पैकेज बनाए रखता है।

  2. जब हमें किसी पैकेज के नए संस्करण की आवश्यकता होती है, तो वह कुछ ऐसा प्रदान करता है (जैसे, सुरक्षा वृद्धि, हमारे ग्राहकों द्वारा आवश्यक सुविधाएँ आदि), हम पैकेज को रिपॉजिटरी में डाउनलोड करते हैं।

  3. एक परीक्षण सर्वर पर अद्यतन पैकेज का परीक्षण करें।

  4. एक बार अपडेट का परीक्षण करने के बाद, प्रभावित नोड्स पर एजेंट को बंद करने funcया psshबंद करने जैसी किसी चीज़ का उपयोग करें puppet

  5. puppetपैकेज के नए संस्करण को प्रभावित नोड्स पर स्थापित करने के लिए मैनिफ़ेस्ट को अपडेट करें।

  6. अंत में, puppet agent --onetime && rebootसर्वर का उपयोग करके चलाएं funcयाpssh

कृपया टिप्पणी करें और मुझे बताएं कि क्या आप इस समाधान या ऐसी किसी भी चीज़ में कोई कमी रखते हैं, जिसे सरल बनाया जा सकता है।


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

कृपया @NotNow विस्तृत करें और उत्तर पोस्ट करें। जानने के लिए तैयार।
बेलमिन फर्नांडीज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.