ES क्लस्टर कैसे सेट करें?


81

मान लें कि मेरे पास 5 मशीनें हैं जिन पर मैं एक इलास्टिक्स खोज क्लस्टर चलाना चाहता हूं, और वे सभी एक साझा ड्राइव से जुड़े हैं। मैंने उस साझा ड्राइव पर इलास्टिक्स की एक एकल प्रति लगाई ताकि तीनों इसे देख सकें। क्या मैं अपनी मशीनों के आईल पर उस साझा ड्राइव पर इलास्टिक्स खोज शुरू कर दूंगा और क्लस्टरिंग स्वचालित रूप से अपने जादू का काम करेगा? या क्या मुझे 5 मशीनों पर चलने वाली यह पता लगाने के लिए इलास्टिक्स को प्राप्त करने के लिए विशिष्ट सेटिंग्स को कॉन्फ़िगर करना होगा? यदि हां, तो प्रासंगिक सेटिंग्स क्या हैं? क्या मुझे प्रतिकृतियों के लिए कॉन्फ़िगर करने के बारे में चिंता करनी चाहिए या क्या यह स्वचालित रूप से नियंत्रित किया जाता है?


3
आप इंडेक्स के लिए साझा किए गए फ़ोल्डर का उपयोग नहीं करने जा रहे हैं, क्या आप हैं?
जावना

जवाबों:


53

यह सुपर आसान है।

आपको प्रत्येक मशीन की आवश्यकता होगी, जिसके पास ElasticSearch की स्वयं की प्रतिलिपि हो (बस आपके पास अभी जो है उसे कॉपी करें) - इसका कारण यह है कि प्रत्येक मशीन / नोड जो भी रखने जा रही है वह स्वयं की फाइलें हैं जो क्लस्टर के पार रखी हुई हैं।

केवल एक चीज जिसे आपको वास्तव में करने की आवश्यकता है वह क्लस्टर फ़ाइल का नाम शामिल करने के लिए कॉन्फ़िगरेशन फ़ाइल को संपादित करना है।

यदि सभी मशीनों में एक ही क्लस्टर नाम इलास्टिक्स खोज बाकी है तो स्वचालित रूप से करेंगे (जब तक कि मशीनें एक ही नेटवर्क पर हैं)

आरंभ करने के लिए यहां पढ़ें: https://www.elastic.co/guide/en/elasticsearch/guide/current/dep.html.html

जब आप अनुक्रमणिका बनाते हैं (जहां डेटा जाता है) आप उस समय को परिभाषित करते हैं कि आप कितने प्रतिकृतियां चाहते हैं (वे क्लस्टर के आसपास वितरित किए जाएंगे)


9
इसके अलावा - हेड प्लगइन स्थापित करें। यह आपके अनुक्रमणिका की स्थिति की पूरी तरह से निगरानी करना आसान बनाता है। mobz.github.io/elasticsearch-head
लेनदेन चार्ली

1
ऐसा क्यों है कि आपको प्रत्येक मशीन पर अलग-अलग प्रतियां रखने की आवश्यकता है? एकल नोड मशीनों के लिए मैंने जो देखा है, उसके आधार पर, आप नोड नाम को एक ही प्रति के साथ चलने वाले कई उदाहरणों में बदल सकते हैं: concept47.com/austin_web_developer_blog/elasticsearch/… यह तब लागू नहीं होता है जब आप एक ही शेयर ड्राइव के साथ अलग-अलग मशीनें लगाते हैं। ? मुझे लगता है कि यदि मैं एकल प्रति के लिए एक क्लस्टर नाम सेट करता हूं, तो मैं प्रत्येक मशीन को उस एकल प्रतिलिपि को चला सकता हूं, इसलिए क्लस्टर नाम सैद्धांतिक रूप से एक ही सही होगा या मैं गलत हूं?
रोलैंडो

प्रत्येक मशीन (या नोड) को ल्यूसिन इंडेक्स फ़ाइलों को लिखने के लिए स्वयं के फाइलस्पेस की आवश्यकता होने वाली है। यदि आप स्थानीय नोड पर किसी अन्य निर्देशिका को इंगित करने के लिए कॉन्फ़िगरेशन फ़ाइल (लिंक की जांच करें) को बदलते हैं तो यह काम कर सकता है।
लेन

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

1
क्यों नहीं बस इसे आज़माएं - आप इसे हमेशा साफ कर सकते हैं? वापस रिपोर्ट करें - मुझे दिलचस्पी होगी। अतीत में मेरे पास प्रत्येक मशीन पर एक इंस्टॉल चल रहा है क्योंकि वह अधिक अनावश्यक और सुरक्षित लग रहा था।
लेनदेन चार्ली

53

यह आमतौर पर स्वचालित रूप से नियंत्रित किया जाता है।

यदि ऑटोडिस्कवरी काम नहीं करती है। यूनिकस्ट डिस्कवरी को सक्षम करके इलास्टिक सर्च कॉन्फिगर फाइल को एडिट करें

नोड 1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

नोड 2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

और इतने पर नोड 3,4,5 के लिए। नोड 1 मास्टर बनाएं, और बाकी केवल डेटा नोड्स के रूप में।

संपादित करें: कृपया ध्यान दें कि ES नियम से, यदि आपके पास Nनोड्स हैं, तो कन्वेंशन के द्वारा, N/2+1नोड्स को फेल-ओवर मैकेनिज्म के लिए मास्टर्स होना चाहिए। वे डेटा नोड्स हो सकते हैं या नहीं।

साथ ही, यदि ऑटो-डिस्कवरी काम नहीं करती है, तो सबसे संभावित कारण यह है कि नेटवर्क इसकी अनुमति नहीं देता (और इसलिए अक्षम है)। यदि कई सर्वरों पर बहुत सारे ऑटो-डिस्कवरी पिंग होते हैं, तो उन पिंग को प्रबंधित करने के संसाधन अन्य सेवाओं को सही तरीके से चलने से रोकेंगे।

पूर्व के लिए, एक 10,000 नोड क्लस्टर और सभी 10,000 नोड्स ऑटो-पिंग कर रहे हैं।


स्पष्टीकरण के लिए, सभी "यूनिकैस्ट.होस्ट" को मास्टर का आईपी / एफक्यूडीएन होना चाहिए? ऐसा प्रतीत होता है कि आपका उदाहरण क्या संकेत कर रहा है।
harperville

1.7.x में elasticsearch.yml टिप्पणियों के अनुसार, यदि आप "नोड.मास्टर: गलत" सेट करते हैं, तो नोड कभी भी मास्टर नहीं बन जाएगा ....
जोन्सोम को बहाल करें मोनिका

@Jonesome - मेरा उदाहरण एक मास्टर और> 1 डेटा नोड दिखाता है। यदि आप एक गुरु के रूप में कभी कार्य नहीं करना चाहते हैं, तो आपको संपत्ति को गलत साबित करने के लिए ठीक होना चाहिए। हालाँकि, यदि आप कभी चाहते हैं कि आपका नोड मास्टर बने, तो इस संपत्ति को कभी छुआ नहीं जाना चाहिए।
किन्नरके

@KannarKK लेकिन ES के साथ, यदि आप 1 को छोड़कर प्रत्येक नोड पर "नोड.मास्टर: गलत" सेट करते हैं, यदि मास्टर नीचे जाता है, तो पूरा क्लस्टर नीचे नहीं जाएगा? क्या वह क्लस्टर का एक प्रमुख उद्देश्य नहीं है? क्यों नहीं "नोड.मास्टर" को yml से पूरी तरह से छोड़ दें (जो इसे सत्य मानता है) ताकि यदि मास्टर की मृत्यु हो जाए, तो दूसरा नोड मास्टर बन सकता है?
जोंसोम ने मोनिका को

@Jonesome - मैंने पहले ही इस जानकारी को उत्तर में शामिल कर लिया है: .... कृपया ध्यान दें कि ES नियम से, यदि आपके पास N नोड्स हैं, तो कन्वेंशन द्वारा, N / 2 + 1 नोड्स को फेल-ओवर मैकेनिज्म के लिए मास्टर्स होना चाहिए। या डेटा नोड्स नहीं हो सकता है, हालांकि। इसलिए, यदि आपके पास> 1 स्वामी हैं, तो अपनी सभी जानकारी को मेजबानों की सूची में जोड़ें
कन्नरके

5

मैंने उन चरणों की कोशिश की, जो @KannarKK ने ES 2.0.2 पर सुझाए थे, हालांकि, मैं क्लस्टर को ऊपर और चला नहीं सका। जाहिर है, मुझे कुछ पता चला है, क्योंकि मैंने मास्टर पर tcp पोर्ट नंबर सेट किया था, स्लेव कॉन्फ़िगरेशन पर खोज के लिए ।zen.ping.unicast.hosts को खोज के लिए IP पते (tcp पोर्ट नंबर) के साथ मास्टर पोर्ट नंबर की आवश्यकता है। इसलिए जब मैं निम्नलिखित विन्यास की कोशिश करता हूं तो यह मेरे लिए काम करता है।

नोड १

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

नोड २

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]

4

लोचदार खोज 7 ने क्लस्टर आरंभीकरण के लिए विन्यास को बदल दिया। ध्यान देना महत्वपूर्ण है कि ईएस इंस्टेंस ट्रांसपोर्ट लेयर (टीसीपी) का उपयोग करके आंतरिक रूप से संचार करता है न कि एचटीटीपी प्रोटोकॉल का जो आमतौर पर सूचकांकों पर ऑप्स करने के लिए उपयोग किया जाता है। नीचे 2 मशीनों के क्लस्टर के लिए नमूना विन्यास है।

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2

मशीन 2 विन्यास: -

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

क्लस्टर.नाम: यह सभी मशीनों में समान है जो क्लस्टर का हिस्सा बनने जा रहे हैं।

नोड.नाम: ES उदाहरण के लिए पहचानकर्ता। नहीं दिए जाने पर मशीन के नाम की कमी।

नोड.मास्टर: निर्दिष्ट करता है कि यह ES उदाहरण मास्टर होने वाला है या नहीं

नोड.डेटा : निर्दिष्ट करता है कि यह ES उदाहरण डेटा नोड हो रहा है या नहीं (डेटा पकड़ो)

bootrap.memory_lock: स्वैपिंग अक्षम करें। आप इस ध्वज को सेट किए बिना क्लस्टर शुरू कर सकते हैं। लेकिन इसकी लॉक को सेट करने की सिफारिश की गई। अधिक जानकारी: https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host: 0.0.0.0 यदि आप नेटवर्क पर ES उदाहरण को उजागर करना चाहते हैं। 0.0.0.0 127.0.0.1 (उर्फ लोकलहोस्ट या लूपबैक एड्रेस) से अलग है। इसका अर्थ है मशीन पर सभी IPv4 पते। यदि मशीन में 0.0.0.0 पर सुनने वाले सर्वर के साथ कई आईपी पते हैं, तो ग्राहक किसी भी आईपीवी 4 पते से मशीन तक पहुंच सकता है।

http.port: वह पोर्ट जिस पर यह ES उदाहरण HTTP अनुरोधों के लिए सुनेगा

transport.host: होस्ट का IPv4 पता (इसका उपयोग विभिन्न मशीनों पर चलने वाले अन्य ES इंस्टेंस के साथ संचार करने के लिए किया जाएगा)। और जानकारी: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-trans.html

transport.tcp.port: 9300 (पोर्ट जहां मशीन tcp कनेक्शन स्वीकार करेगी)

search.seed_hosts: हाल के संस्करणों में इसे बदल दिया गया था। ईएस उदाहरणों के टीसीपी पोर्ट (महत्वपूर्ण) के साथ सभी आईपीवी 4 पते को प्रारंभ करें जो इस क्लस्टर का हिस्सा बनने जा रहे हैं। यह सभी ईएस उदाहरणों में समान है जो इस क्लस्टर का हिस्सा हैं।

क्लस्टर.आयंत्र_मास्टर_नोड्स : ईएस मशीनों के नोड नाम (नोड.नाम) जो मास्टर चुनाव में भाग लेने जा रहे हैं। (कोरम आधारित निर्णय लेने वाले: - https://www.elastic.co/guide/en/elasticsearch/reference/urrent /modules-discovery-quorums.html#modules-discovery-quorums )

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