2014-07-04 14 views
5

हमें हमारे ईएस क्लस्टर के साथ एक बड़ी समस्या है। हमारे नोड्स में से एक हमेशा 99% सीपीयू पर है। किसी कारण से सामान्य नोड की तुलना में elasticsearch प्रक्रिया के लिए इसमें 3 गुना अधिक धागे चल रहे हैं। मैंने 2 htop स्क्रीनशॉट 2 नोड्स, एक अधिभारित और एक और सामान्य के लिए संलग्न किया है। कृपया सलाह दें!लोचदार खोज बहुत से चलने वाले धागे

धन्यवाद!

अतिभारित नोड overloaded node

सामान्य नोड normal node

अद्यतन

  1. क्लस्टर वास्तुकला:

    11 नोड्स, 2 समर्पित स्वामी, 9 डेटा नोड्स।

  2. नोड्स हार्डवेयर गुण

    मास्टर्स:

    • सीपीयू: 8x इंटेल (आर) जिऑन (आर) सीपीयू E5-1620 v2 @ 3.70GHz
    • मेमोरी: 32GB
    • डिस्क: 120GB

    गुलाम:

    1. सीपीयू: 12x इंटेल (आर) जिऑन (आर) सीपीयू E5-1650 v2 @ 3.50GHz
    2. मेमोरी: 64GB
    3. डिस्क: 2।क्लस्टर में 7T
  3. दस्तावेज:

    ~ 200 लाखों

  4. सूचकांक conf:

    प्रत्येक सूचकांक 10 टुकड़े (5 प्राथमिक, 5 प्रतिकृति)

  5. में विभाजित किया गया है प्रश्न:

    खोज आरटी: ~ 250/s, सूचकांक आरटी: ~ 6K/s

  6. ओएस

    Ubuntu 12.04.4 LTS

  7. जावा

java version "1.7.0_60" 
Java(TM) SE Runtime Environment (build 1.7.0_60-b19) 
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode) 
+2

मुझे डर है कि आपके स्क्रीन शॉट्स स्वयं ही बहुत उपयोगी नहीं हैं। मैं निम्नलिखित जोड़ दूंगा: प्रत्येक नोड के लिए क्लस्टर, मेमोरी, सीपीयू और डिस्क में नोड्स की संख्या, क्लस्टर में दस्तावेज़ों की संख्या, समग्र क्लस्टर और इंडेक्स कॉन्फ़िगरेशन, मैपिंग्स, क्वेरी वॉल्यूम, वॉल्यूम डालें, नोड जैसे ईएस डायग्नोस्टिक्स से आउटपुट आंकड़े, ऑपरेटिंग सिस्टम, जेवीएम संस्करण। –

+0

@ जॉन पैट्रोन मैंने आवश्यक जानकारी के साथ एक अद्यतन पोस्ट किया है। धन्यवाद! –

उत्तर

1

हाथ में विरल जानकारी के आधार पर, मैं अनुमान की एक जोड़ी है संभावित रूप से समस्या हो सकती है एम:

  • शार्ड्स अच्छी तरह से संतुलित नहीं हैं और आप गर्म स्पॉटिंग कर रहे हैं। सुनिश्चित करें कि आपकी सबसे अधिक उपयोग की जाने वाली अनुक्रमणिका इस तरह से शर्मीली हैं कि प्रत्येक मशीन अपना काम साझा कर सकती है। इसके अलावा, समान संतुलन को बल देने के लिए इंडेक्स स्तर "index.routing.allocation.total_shards_per_node" देखें।

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

+0

उत्तर के लिए धन्यवाद। हमारे पास एक गर्म स्थान की स्थिति थी जिसके बारे में हमारे पास प्रत्येक इंडेक्स के लिए '10 शर्ड्स' के साथ 9 डेटा नोड्स थे, इसलिए हमेशा एक नोड था जिसमें 2 शर्दे लगेंगे। परीक्षण उद्देश्यों के लिए हमने अपने द्वितीयक मास्टर को डेटा नोड के रूप में भी बदल दिया है और माइग्रेटेड शर्ड्स को फिर से आवंटित किया है - दुर्भाग्य से कोई बदलाव नहीं। खोज अनुरोधों के बारे में, हमारे पास डिफ़ॉल्ट कॉन्फ़िगरेशन है, इसलिए यह प्रतिकृतियां पूछताछ कर रहा है। –

+0

सेटिंग का प्रयास करें: प्रत्येक इंडेक्स के लिए "index.routing.allocation.total_shards_per_node" 1 तक, जो प्रति समान 10 डेटाटन और 10 शर्ड्स (प्रतिकृतियां सहित) बराबर संतुलन को मजबूर करना चाहिए। नोट: यह केवल परीक्षण के लिए किया जाना चाहिए। दीर्घकालिक, आप प्रति इंडेक्स के अधिक शर्ड्स के साथ बेहतर तरीके से बंद हो सकते हैं जो आपके कुल_shards_per_node को कुछ लचीलापन देगा। – ppearcy

2

यह पता लगाया।

[2014-07-07 13:38:42,521][DEBUG][index.search.slowlog.query] [n013.my_cluster] [my_index][3] took[2s], took_millis[2066], types[my_type], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"size":20,"from":0,"sort":{"_score":"desc"},"query":{"filtered":{"query":{"query_string":{"query":"my eight words space separated query","fields":["description","tags"],"default_operator":"OR"}},"filter":{"and":[{"range":{"ats":{"lte":1404730800}}},{"terms":{"aid":[1,2,4]}}]},"_cache":false}}}], extra_source[]

समस्या "filter": {"and": ...} अंदर बसता, प्रश्नों के इन प्रकार की तरह लग रहा bool प्रकार के प्रश्नों की तुलना में ES के लिए भारी होते हैं। http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html

चीयर्स: तो जब भी आप कुछ filters लागू करना चाहते हैं, bool फिल्टर (must, must_not और should)

Reff का उपयोग करें!

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