2010-11-05 13 views
16

मैं कई वेब संतुलित सर्वर पर चल रहे जावा वेब ऐप को प्रबंधित करने के लिए कैपिस्ट्रानो का उपयोग कर रहा हूं। कुछ कार्य (जैसे कॉन्फ़िगरेशन परिवर्तन) को सर्वर को पुनरारंभ करने की आवश्यकता होती है, या ऐप पुनर्वितरण की आवश्यकता होती है, जिसके दौरान सर्वर गैर-उत्तरदायी हो जाता है।Capistrano मेजबान पर कार्य निष्पादित कर सकते हैं?

यदि कैपिस्ट्रानो इन कार्यों को लगातार सर्वर पर निष्पादित कर सकता है, तो साथ ही, खेत में केवल एक मशीन नीचे जायेगी, और लोड बैलेंसर यह सुनिश्चित करेगा कि कोई अनुरोध गुम हो जाए। हालांकि, मैं जो कह सकता हूं उससे, कैपिस्ट्रानो केवल समवर्ती रूप से सर्वर पर संचालन करता है।

स्पष्ट होने के लिए, मैं लगातार विभिन्न कार्यों को निष्पादित करने की कोशिश नहीं कर रहा हूं। मैं लगातार एक ही कार्य को विभिन्न सर्वरों पर निष्पादित करने की कोशिश कर रहा हूं।

मैं अपने कॉन्फ़िगरेशन में इसे हैक करने के कुछ तरीकों के बारे में सोच सकता हूं, लेकिन ऐसा लगता है कि एक ध्वज होना चाहिए जहां मैं कहीं भी सेट कर सकता हूं।

कोई भी यह कैसे जानता है?

उत्तर

19

मैं बजाय समानांतर में इस का उपयोग श्रृंखला में मेरे सर्वर को पुनः आरंभ करने,:

task :my_task, :roles => :web do 
    find_servers_for_task(current_task).each do |server| 
    run "[task command here]", :hosts => server.host 
    end 
end 
+0

यह पूरी तरह से काम किया। धन्यवाद। – devinfoley

+0

बहुत बहुत धन्यवाद! यह सही काम करता है। – raskhadafi

+2

अद्भुत! बीटीडब्ल्यू, शायद टोपी अनुक्रम में कार्य निष्पादित करने के लिए एक रणनीति जोड़ना चाहिए। – DiveInto

-1

नमस्ते यह आसानी से कैपिस्ट्रानो में संभव नहीं है, निश्चित रूप से कुछ दृष्टिकोण लिया जा सकता है।

1) आप प्रत्येक सर्वर को अलग-अलग भूमिका में निर्दिष्ट कर सकते हैं और भूमिकाओं के घूर्णन के लिए जिम्मेदार एक अलग कार्य जोड़ सकते हैं और उस कार्य को बुला सकते हैं जो वास्तव में आवश्यक कार्य करता है।

2) यदि आप के रूप में ऊपर रोटेशन कर लेकिन अलग मेजबान के नाम के बजाय भूमिकाओं

3) यह भी फिल्टर करने के लिए होस्ट नामों/वातावरण चर का उपयोग कर Capistrano में सर्वर, हो सकता है आप उस में इस्तेमाल कर सकते हैं संभव है का उपयोग कर अलग स्क्रिप्ट लिख सकता है रोटेशन एल्गोरिदम में।

दुर्भाग्यवश कैपिस्ट्रानो के लिए कैपिस्ट्रानो के लिए कोई अच्छा प्रलेखन नहीं है, पढ़ने के लिए कैपिस्ट्रानो स्रोतों ने काफी अच्छा काम किया लेकिन इसमें बहुत समय लगता है।

+0

जानकारी के लिए धन्यवाद के रूप में वर्णित in: :sequence उपयोग कर सकते हैं।जवाब नहीं था जिसके लिए मैं उम्मीद कर रहा था, लेकिन सच्चाई दर्द होता है। मैं कांटा करने की कोशिश कर सकता हूं और इस सुविधा को जोड़ सकता हूं। – devinfoley

16

आप अपने समानांतरवाद को सीमित करने के कार्य के लिए :max_hosts सेट कर सकते हैं:

:max_hosts - अधिकतम संख्या निर्दिष्ट करता है मेजबानों का एक समय में चुना जाना चाहिए। यदि यह मान चलाने के लिए चुने गए मेजबानों की संख्या से कम है, तो मेजबान max_hosts के समूहों में चलाया जाएगा। डिफ़ॉल्ट शून्य है, जो इंगित करता है कि अधिकतम मेजबान सीमा नहीं है। कृपया ध्यान दें कि यह एसएसएच चैनलों की संख्या को सीमित नहीं करता है जो खुले जा सकते हैं, केवल मेजबानों की संख्या जिस पर इसे कहा जाएगा।

उदाहरण:

desc "Say hello, one at a time" 
task :hello, :roles => :app, :max_hosts => 1 do 
    run "echo serial hello ; sleep 0 ; echo serial hello DONE" 
    # Note that task parameters do NOT get automatically passed on to 
    # other tasks, i.e. a call to "deploy:restart" would be 
    # unaffected by :max_hosts set here. Example: 
    self.send(:normal_hello) 
end 

desc "Say hello, everybody" 
task :normal_hello, :roles => :app do 
    run "echo 'normal (parallel) hello' ; sleep 10 ; echo normal hello DONE" 
end 
4

Capistrano 3 SSHKit जो कई सर्वरों के लिए आदेशों की अनुक्रमिक भेजने के लिए प्रदान करता है का उपयोग करता है। वहाँ SSHKit पर एक उदाहरण मुझे पढ़ रहा है:

https://github.com/capistrano/sshkit

ध्यान दें, Capistrano 3 काफी Capistrano 2.x. से एक परिवर्तन है

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