आप केवल एक बार किसी कार्य को चलाने के लिए क्लस्टर कैसे बना सकते हैं?


13

यदि आपके पास एक कार्य था जिसे आप केवल एक बार सर्वरों के एक समूह पर चलाना चाहते थे, तो एक नियमित अंतराल पर इसे प्राप्त करने का सबसे अच्छा तरीका क्या होगा? इस मामले में क्लस्टर की परिभाषा एक लोड बैलेंसर के पीछे बैठे वितरित सत्रों के साथ 2 या अधिक समान सर्वर हैं।

केस का उपयोग करें: आपके पास एक ऐसा काम है जो चलाने के लिए महंगा है जिसे केवल X घंटे के अनुसार एक बार चलाया जाना चाहिए। उदाहरण के लिए, यह काम रिकॉर्डों के एक समूह पर आधारित हो सकता है और उनकी स्थिति को अपडेट कर सकता है।

  • सबसे खराब स्थिति यह है कि दो बार नौकरी चलाने से आपका डेटा अमान्य हो जाता है।
  • सबसे अच्छा मामला परिदृश्य यह है कि नौकरी आपके सभी सर्वरों पर संसाधनों का उपयोग करती है।

आवश्यकताएँ सारांश:

  1. यदि किसी एक नोड के डाउन होने पर भी जॉब चलना चाहिए।
  2. नौकरी प्रति शेड्यूल के अनुसार केवल एक बार चलाई जानी चाहिए।
  3. यदि एक ही समय में या ओवरलैपिंग समय पर कई कार्य निर्धारित किए जाते हैं, तो चल रहे नौकरियों की संख्या को सर्वरों के बीच समान रूप से वितरित किया जाता है।
  4. मशीनों का समान कोड आधार होना चाहिए और NTP के माध्यम से सिंक्रनाइज़ किया जाना चाहिए।
  5. कॉन्फ़िगरेशन वातावरण चर द्वारा नोड और नोड के बीच भिन्न हो सकता है।
  6. काम को समय पर या निर्धारित समय के दिए गए अंतराल के भीतर शुरू करना होगा। (उदाहरण के लिए 5 मिनट का कहना है)

संभव समाधान

  • एक नोड को मास्टर नोड के रूप में सेट करें, यह काम नहीं करता है क्योंकि यह ऊपर 1 का उल्लंघन करता है।
  • एक अनुरोध करें कि लोड बैलेंसर काम को किक करने के लिए संतुलित करता है। दुर्भाग्य से इसका साइड इफेक्ट यह है कि यदि आपके पास एक ही समय में कई कार्य चल रहे हैं तो वे सभी एक ही मशीन द्वारा चलाए जा सकते हैं।

यह जावा में एक सर्वलेट कंटेनर में चलना होगा। हालाँकि यह उन नौकरियों को कोड नहीं कर रहा है जिनकी मुझे तलाश है।

निश्चित रूप से यह ज्ञात सर्वोत्तम समाधान के साथ एक हल की गई समस्या है।


संबंधित प्रश्न। /programming/5949038/schedule-job-executes-twice-on-cluster

यह डुप्लिकेट नहीं है क्योंकि समाधान ऊपर दी गई उन 5 आवश्यकताओं के अनुसार अपर्याप्त है। सबसे अपवर्तित समाधान एक दौड़ समस्या से ग्रस्त है, और दूसरा समाधान आवश्यकता 3 का उल्लंघन करता है

जवाबों:


16

क्या आपके पास एक साझा डेटाबेस है? मैंने अतीत में आर्बिटर के रूप में डेटाबेस का उपयोग करके ऐसा किया है।

मूल रूप से, प्रत्येक "नौकरी" को डेटाबेस में एक पंक्ति के रूप में दर्शाया जाता है। आप उस समय के साथ डेटाबेस में एक पंक्ति जोड़कर नौकरी शेड्यूल करते हैं जब आप इसे चलाना चाहते हैं तब प्रत्येक सर्वर करता है:

SELECT TOP 1 *
FROM jobs
WHERE state = 'NotRun'
ORDER BY run_time ASC

इस तरह, वे सभी उस काम को चुनेंगे जो अगले चलाने के लिए निर्धारित है । वे सभी सोते हैं ताकि वे जागें जब नौकरी वास्तव में चलने वाली हो। फिर, वे सभी ऐसा करते हैं:

UPDATE jobs
SET state = 'Running'
WHERE job_id = :id
  AND state = 'NotRun'

:idऊपर चरण में आपको मिली नौकरी की पहचानकर्ता कहां है। क्योंकि अद्यतन परमाणु है, सर्वर में से केवल एक ही वास्तव में पंक्ति को अपडेट करेगा, आप यह निर्धारित करने के लिए डेटाबेस की "पंक्तियों की संख्या अपडेट" स्थिति कोड की जांच कर सकते हैं कि क्या आप वास्तव में पंक्ति को अद्यतन करने वाले सर्वर थे, और इसलिए क्या आप सर्वर हैं कि काम चलाने के लिए हो जाता है।

यदि आप "नहीं जीते" और आप काम नहीं चला रहे हैं, तो तुरंत चरण 1 पर वापस जाएं। यदि आप "जीत" करते हैं, तो काम को दूसरे धागे में निष्पादित करने के लिए शेड्यूल करें, फिर चरण 1 पर वापस जाने से पहले कुछ सेकंड प्रतीक्षा करें। इस तरह, इस बार काम नहीं करने वाले सर्वरों को नौकरी लेने की अधिक संभावना है वह तुरंत चलने वाला है।


1
यहाँ आप किस स्तर का उपयोग कर रहे हैं? प्रतिबद्ध या धारावाहिक पढ़ें?
मैवरिक रिज़

2

कई ऐप सर्वर में "क्लस्टर वाइड सिंगलटन सेवाओं" के लिए एक सुविधा है।

उदाहरण के लिए Weblogic में एक सिंगलटन सर्विस सुविधा है जिसे वेब व्यवस्थापक कंसोल के माध्यम से कॉन्फ़िगर किया गया है।

आपको एक वर्ग लिखना होगा जो weblogic.cluster.singleton.SingletonService को लागू करता है और इसका उपयोग व्यवस्थापक कंसोल में सेवा की घोषणा करने के लिए करता है। क्लस्टर क्लास को तत्काल शुरू करने और सेवा शुरू होने या बंद होने पर आपको सूचित करने का ख्याल रखता है। SingletonService इंटरफ़ेस में एक सक्रिय () और एक निष्क्रिय () विधि है।

जब यह पहली बार क्लस्टर के किसी एक नोड पर सेवा लाता है, तो वेबलॉग कॉल सक्रिय () होता है। यदि चयनित नोड नीचे जाता है, तो व्यवस्थापक सर्वर एक अलग सर्वर पर सेवा को "स्थानांतरित" करता है, कॉलिंग सक्रिय ()।

http://docs.oracle.com/cd/E12839_01/apirefs.1111/e13952/taskhelp/clusters/ConfigureSingletonService.html

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