2012-10-19 15 views
5

मेरा उत्पादन वातावरण क्वार्ट्ज 2.1.4 का उपयोग कर जावा शेड्यूलर नौकरी चला रहा है। वेबलॉग क्लस्टर सर्वर पर 4 मशीन के साथ और केवल एक शेड्यूल जॉब एक ​​क्लस्टर नोड (नोड 1) पर सामान्य रूप से कुछ महीनों के लिए निष्पादित होता है, लेकिन नोड 2 अचानक पता चला कि नोड 1 निष्पादन नौकरी पर कल रात को विफल होने में विफल रहता है। वास्तव में, त्रुटि के बिना नोड 1 (सर्वर, नेटवर्क, डेटाबेस, अनुप्रयोग लॉग के अनुसार), इस घटना ने 2 प्रक्रिया समवर्ती निष्पादन के कारण बनाई गई डुप्लिकेट संदेश उत्पन्न किया।क्वार्ट्ज पता कैसे नोड्स

नोड का पता लगाने के लिए क्वार्ट्ज की तंत्र क्या विफल हो जाती है? पिंग स्कैन करके, या यूसीपी प्रसारण के माध्यम से दिल की धड़कन पिंग करके, या डेटाबेस प्रतिक्रिया समय अन्य? इस पर कोई विन्यास?

मैंने क्वार्ट्ज कॉन्फ़िगरेशन मार्गदर्शिका http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJDBCJobStoreClustering पढ़ी है, लेकिन कोई जवाब नहीं है।

मैं जेडीबीसी जॉबस्टोर का उपयोग कर रहा हूं। विवरण जांचने के बाद, हमने पाया कि असामान्य लंबे समय तक निष्पादित एक डेटाबेस (ओरेकल) कथन है (5 सेकंड से 30 सेकंड तक)। घटना इस अवधि पर हुई थी। क्या आपको लगता है कि यह संबंधित है?

मेरी विन्यास है

` org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.jobStore.misfireThreshold = 10000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX `

किसी को भी यह जानकारी है? धन्यवाद।

उत्तर

2

मुझे पता है कि जवाब बहुत देर हो चुकी है, लेकिन हो सकता है कि हम दोनों की तरह किसी को भी इसकी आवश्यकता होगी।

लघु संस्करण: यह सब डीबी द्वारा संभाला जाता है। महत्वपूर्ण संपत्ति org.quartz.jobStore.clusterCheckinInterval होगा।

लांग संस्करण (सभी क्रेडिट http://flylib.com/books/en/2.65.1.91/1/ पर जाएं):

का पता लगाने के समयबद्धक नोड्स

विफल एक समयबद्धक उदाहरण चेक-इन दिनचर्या करता है, अगर वहाँ अन्य रहे हैं करने के लिए देखना यह लग रहा है शेड्यूलर उदाहरण जो पर जांच नहीं करते थे, उन्हें माना जाता था। यह SCHEDULER_STATE तालिका का निरीक्षण करके और LAST_CHECK_TIME कॉलम में मूल्य org.quartz.jobStore.clusterCheckinInterval (अगले अनुभाग में चर्चा) के शेड्यूलर की जांच करके करता है। यदि एक या अधिक नोड्स में चेक नहीं किया गया है, तो चल रहे शेड्यूलर मानते हैं कि अन्य उदाहरण विफल हो गए हैं।

साथ ही अगले अनुच्छेद भी महत्वपूर्ण हो सकता है:

unsynchronized घड़ियों

से अलग-अलग मशीनों पर

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

संबंधित मुद्दे