2013-12-10 6 views
11

मैं एक सक्रिय/निष्क्रिय सर्वर आर्किटेक्चर का उपयोग करके अत्यधिक उपलब्ध कतार प्राप्त करने के लिए, RabbitMQ सर्वर का समूह स्थापित करने का प्रयास कर रहा हूं। मेरा अनुसरण कर इस गाइड:सक्रिय/निष्क्रिय उच्च उपलब्धता आर्किटेक्चर का उपयोग कर RabbitMQ को कॉन्फ़िगर कैसे करें

  1. http://www.rabbitmq.com/clustering.html
  2. http://www.rabbitmq.com/ha.html
  3. http://karlgrz.com/rabbitmq-highly-available-queues-and-clustering-using-amazon-ec2/

उच्च उपलब्धता के लिए मेरे आवश्यकता सरल है, मैं RabbitMQ के साथ दो नोड्स (CentOS 6.4) है (v3.2) और एरलांग आर 15 बी03। नोड 1 सभी अनुरोधों का जवाब देकर "सक्रिय" होना चाहिए, और नोड 2 "निष्क्रिय" नोड होना चाहिए जिसमें सभी कतार और संदेश दोहराए गए हैं (नोड 1 से)।

कि ऐसा करने के लिए, मैं निम्नलिखित कॉन्फ़िगर किया है:

    RabbitMQ गैर क्लस्टर मोड में ठीक काम कर रहा साथ
  • node1
  • RabbitMQ गैर क्लस्टर मोड में ठीक काम कर रहा साथ
  • node2

अगले मैंने दोनों नोड्स के बीच क्लस्टर बनाने के लिए किया था: नोड 2 से नोड 1 (गाइड 1) में शामिल होना। इसके बाद मैंने क्लस्टर में सभी नोड्स के बीच सभी कतारों और संदेशों को दोहराने, कतारों (गाइड 2) के प्रतिबिंबित करने के लिए नीति कॉन्फ़िगर की। यह काम करता है, मैं किसी भी नोड से कनेक्ट कर सकता हूं और संदेश प्रकाशित या उपभोग कर सकता हूं, जबकि दोनों नोड उपलब्ध हैं।

समस्या तब होती है जब मेरे पास कोई कतार "क्यूईए" होता है जो नोड 1 (क्यूईए पर मास्टर) पर बनाया गया था, और जब नोड 1 बंद हो जाता है, तो मैं संदेश बनाने या उपभोग करने के लिए नोड 2 में कतार से कनेक्ट नहीं कर सकता, नोड 2 एक त्रुटि कहता है कि नोड 1 पहुंच योग्य नहीं है (मुझे लगता है कि क्यूईए को नोड 2 में दोहराया नहीं गया है, और नोड 2 को कतार के मास्टर के रूप में प्रचारित नहीं किया जा सकता है)।

त्रुटि है:

{ "AMQP आपरेशन बाधित किया गया था: AMQP बंद हो, सहकर्मी, कोड = 404, पाठ = \ द्वारा शुरू की" NOT_FOUND - के घर नोड 'खरगोश @ node1' टिकाऊ कतार vhost में 'queueA' 'app01' नीचे या दुर्गम है \ ", CLASSID = 50, methodId = 10, कारण ="}

इस्तेमाल किया कदम के अनुक्रम है:

node1:

1. rabbitmq-server -detached 
2. rabbitmqctl start_app 

node2:

3. Copy .erlang.cookie from Node1 to Node2 
4. rabbitmq-server -detached 

क्लस्टर में शामिल हों (node2):

5. rabbitmqctl stop_app 
6. rabbitmqctl join_cluster [email protected] 
7. rabbitmqctl start_app 

कॉन्फ़िगर कतार मिररिंग नीति:

8. rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}' 

नोट: पैटर्न कतार नामों के लिए इस्तेमाल किया "" (सभी कतार) है।

जब मैं 'rabbitmqctl list_policies' चलाता हूं और 'rabbitmqctl cluster_status' सब कुछ ठीक है।

यदि नोड 1 अनुपलब्ध है तो नोड 2 प्रतिक्रिया क्यों दे सकता है? क्या इस सेटअप में कुछ गड़बड़ है?

+0

आपके पास कतार और संदेश कौन से गुण हैं? क्या आपका क्लस्टर संदेश जारी रखता है? (जब आप नोड सेट करते हैं तो कुछ प्रकार की क्लस्टर कॉन्फ़िगरेशन) यहां एक नज़र डालें: http://stackoverflow.com/a/23224388/1248724 – Zarathustra

उत्तर

1

वेब प्रबंधन कंसोल में, queueA Node1 +1 के रूप में सूचीबद्ध है?

ऐसा लगता है कि आपके सेटअप के साथ कुछ समस्या हो सकती है। मुझे vagrant boxes का एक सेट मिला है जो क्लस्टर में काम करने के लिए पूर्व-कॉन्फ़िगर किया गया है, यह आपके सेटअप में समस्याओं को पहचानने और पहचानने के लायक हो सकता है?

-1

आप अपने RabbitMQ दलाल के निर्माण के लिए RabbitMQ नोड्स के एक क्लस्टर इस्तेमाल कर सकते हैं ध्यान से आपके संदर्भ पढ़ें

http://www.rabbitmq.com/ha.html

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

+0

यह केवल तब लागू होता है जब आप मिररिंग/एचए कतार का उपयोग नहीं कर रहे हैं। अर्थात। आपका उद्धरण एक बयान है जो मिररिंग को लागू करने के कारण बताता है। – kodbuse

0

सुनिश्चित करें कि आपकी कतार टिकाऊ या अनन्य नहीं है।

प्रलेखन (https://www.rabbitmq.com/ha.html) से: जब कनेक्शन है कि उन्हें घोषित बंद कर दिया है

विशेष कतारों हटा दिया जाएगा। इस कारण से, यह एक विशेष कतार के लिए उपयोगी नहीं है (या उस मामले के लिए टिकाऊ) जब नोड होस्टिंग हो रहा है, कनेक्शन बंद हो जाएगा और कतार को वैसे भी हटाया जाना चाहिए।

इस कारण से, विशेष कतारों को कभी प्रतिबिंबित नहीं किया जाता है (भले ही वे नीति से मेल खाते हैं कि वे होना चाहिए)। वे कभी भी टिकाऊ नहीं हैं (भले ही इस तरह घोषित किया गया हो)।

{:

अपने त्रुटि संदेश से

"AMQP आपरेशन बाधित किया गया था: AMQP बंद हो, सहकर्मी द्वारा शुरू की, कोड = 404, पाठ = \" NOT_FOUND - घर नोड 'खरगोश @ ' टिकाऊ कतार के' node1 app01 'vhost में' queueA 'नीचे या दुर्गम है \ ", CLASSID = 50, methodId = 10, कारण ="}

ऐसा लगता है कि एक टिकाऊ कतार बनाया।

+0

नहीं, वे कह रहे हैं कि मिरर या टिकाऊ होने के लिए एक विशेष कतार के लिए यह समझ में नहीं आता है। प्रतिबिंबित और टिकाऊ के बीच कोई विरोधाभास नहीं है। – kodbuse

4

आपने अपने set_policy कॉल में वर्चुअल होस्ट (एप 01) निर्दिष्ट नहीं किया है, इस प्रकार नीति केवल डिफ़ॉल्ट वर्चुअल होस्ट (/) पर लागू होगी। यह कमांड लाइन से काम करना चाहिए:

rabbitmqctl set_policy -p app01 ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}' 
0

केवल दर्पण कतार जो गुरु के साथ सिंक्रनाइज़ कर रहे हैं मास्टर होना करने के लिए प्रोत्साहित कर रहे हैं, के बाद विफल रहता है। यह डिफ़ॉल्ट व्यवहार है, लेकिन इसे हमेशा-ऑन-शटडाउन में बदला जा सकता है।

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