Elasticsearch
एलिटिक्स खोज विन्यास
खोज…
टिप्पणियों
एलेस्टिक्स खोज में चूक के एक सेट के साथ आता है जो विकास के लिए अच्छा अनुभव प्रदान करता है। निहित कथन यह है कि यह उत्पादन के लिए आवश्यक रूप से महान नहीं है, जिसे आपकी अपनी आवश्यकताओं के अनुरूप होना चाहिए और इसलिए इसका अनुमान नहीं लगाया जा सकता है।
डिफ़ॉल्ट सेटिंग्स बिना किसी कॉन्फ़िगरेशन परिवर्तन के एक ही मशीन पर कई नोड्स को डाउनलोड और चलाना आसान बनाते हैं।
सेटिंग्स कहां हैं?
एलिस्टिक्सखोज की प्रत्येक स्थापना के अंदर एक config/elasticsearch.yml । यह वह जगह है जहाँ निम्नलिखित सेटिंग्स रहते हैं:
-
cluster.name- नोड में शामिल होने वाले क्लस्टर का नाम। एक ही क्लस्टर में सभी नोड्स को समान नाम साझा करना होगा ।
- वर्तमान में
elasticsearchमें चूक।
-
node.*-
node.name- यदि आपूर्ति नहीं की जाती है, तो नोड शुरू होने पर हर बार एक यादृच्छिक नाम उत्पन्न होगा। यह मजेदार हो सकता है, लेकिन यह उत्पादन वातावरण के लिए अच्छा नहीं है।
- नामों को अद्वितीय नहीं होना चाहिए , लेकिन उन्हें अद्वितीय होना चाहिए।
-
node.master- एक बूलियन सेटिंग। जब
true, तो इसका मतलब है कि नोड एक योग्य मास्टर नोड है और यह निर्वाचित मास्टर नोड हो सकता है । - करने के लिए चूक
true, प्रत्येक नोड अर्थ एक पात्र मास्टर नोड है।
- एक बूलियन सेटिंग। जब
-
node.data- एक बूलियन सेटिंग। जब यह
true, तो इसका मतलब है कि नोड डेटा को संग्रहीत करता है और खोज गतिविधि को संभालता है। -
trueअवहेलना।
- एक बूलियन सेटिंग। जब यह
-
-
path.*-
path.data- फ़ाइलें जो नोड के लिए लिखी गई हैं। सभी नोड्स मेटाडेटा को संग्रहीत करने के लिए इस निर्देशिका का उपयोग करते हैं , लेकिन डेटा नोड्स इसे दस्तावेज़ों को संग्रहीत / अनुक्रमित करने के लिए भी उपयोग करेंगे।
- चूक
./data।- इसका मतलब यह है कि आपके लिए एलीस्टेकर्च निर्देशिका के अंदर
configकरने के लिए सहकर्मी निर्देशिका के रूप मेंdataबनाया जाएगा।
- इसका मतलब यह है कि आपके लिए एलीस्टेकर्च निर्देशिका के अंदर
-
path.logs- फ़ाइलों को लॉग करने वाले स्थान को लिखा जाता है।
-
./logsडिफ़ॉल्ट
-
-
network.*network.host- डिफ़ॉल्ट रूप से
_local_, जो प्रभावी रूप सेlocalhost।- इसका मतलब है कि, डिफ़ॉल्ट रूप से, नोड्स को वर्तमान मशीन के बाहर से संचारित नहीं किया जा सकता है!
- डिफ़ॉल्ट रूप से
network.bind_host- संभावित रूप से एक सरणी, यह इलास्टिसर्च को बताता है कि सॉकेट्स को बांधने के लिए वर्तमान मशीन के पते क्या हैं।
- यह इस सूची है जो इस नोड से बात करने के लिए मशीन के बाहर से मशीनों (जैसे, क्लस्टर में अन्य नोड्स) को सक्षम करता है।
-
network.hostलिए डिफ़ॉल्ट।
- संभावित रूप से एक सरणी, यह इलास्टिसर्च को बताता है कि सॉकेट्स को बांधने के लिए वर्तमान मशीन के पते क्या हैं।
network.publish_host- एक एकल होस्ट जिसका उपयोग अन्य नोड्स के लिए विज्ञापन करने के लिए किया जाता है कि इस नोड के साथ सबसे अच्छा संवाद कैसे किया जाए।
- जब एक सरणी को
network.bind_hostआपूर्ति की जा रही है, तो यह एक ऐसा होस्ट होना चाहिए जिसका उपयोग इंटर-नोड संचार के लिए किया जाना है।
- जब एक सरणी को
- Network.host` के लिए डिफ़ॉल्ट।
- एक एकल होस्ट जिसका उपयोग अन्य नोड्स के लिए विज्ञापन करने के लिए किया जाता है कि इस नोड के साथ सबसे अच्छा संवाद कैसे किया जाए।
-
discovery.zen.*-
discovery.zen.minimum_master_nodes- मास्टर चुनाव के लिए कोरम को परिभाषित करता है। इसे इस समीकरण का उपयोग करके सेट किया जाना चाहिए:
(M / 2) + 1जहांMयोग्य मास्टर नोड्स की संख्या है (नोड्स का उपयोग कर नोड्सnode.master: trueनिहित या स्पष्ट रूप से)। -
1लिए डिफ़ॉल्ट, जो केवल एकल नोड क्लस्टर के लिए मान्य है!
- मास्टर चुनाव के लिए कोरम को परिभाषित करता है। इसे इस समीकरण का उपयोग करके सेट किया जाना चाहिए:
-
discovery.zen.ping.unicast.hosts- क्लस्टर के बाकी हिस्सों में इस नोड में शामिल होने के लिए तंत्र।
- यह योग्य मास्टर नोड्स को सूचीबद्ध करना चाहिए ताकि एक नोड बाकी क्लस्टर को पा सके।
- यहां जिस मूल्य का उपयोग किया जाना चाहिए, वह उन अन्य नोड्स का
network.publish_hostहै। -
localhostलिए चूक, जिसका अर्थ है कि यह केवल स्थानीय मशीन पर एक क्लस्टर में शामिल होने के लिए दिखता है।
-
किस प्रकार की सेटिंग्स मौजूद हैं?
इलास्टिसर्च तीन अलग-अलग प्रकार की सेटिंग्स प्रदान करता है:
- क्लस्टर-वाइड सेटिंग्स
- ये सेटिंग्स हैं जो क्लस्टर में सब कुछ पर लागू होती हैं, जैसे कि सभी नोड्स या सभी सूचकांक।
- नोड सेटिंग्स
- ये ऐसी सेटिंग्स हैं जो केवल वर्तमान नोड पर लागू होती हैं।
- सूचकांक सेटिंग्स
- ये ऐसी सेटिंग्स हैं जो सिर्फ इंडेक्स पर लागू होती हैं।
सेटिंग के आधार पर, यह हो सकता है:
- रनटाइम पर गतिशील रूप से परिवर्तित
- सूचकांक के पुनः आरंभ (बंद / खुला) के बाद बदला गया
- कुछ इंडेक्स-लेवल सेटिंग्स को इंडेक्स को बंद करने और फिर से खोलने की आवश्यकता नहीं होती है, लेकिन सेटिंग को लागू करने के लिए इंडेक्स को जबरन फिर से मर्ज करने की आवश्यकता हो सकती है।
- एक सूचकांक का संपीड़न स्तर इस प्रकार की सेटिंग का एक उदाहरण है। इसे गतिशील रूप से बदला जा सकता है, लेकिन केवल नए खंड ही परिवर्तन का लाभ उठाते हैं। इसलिए यदि कोई इंडेक्स नहीं बदलेगा, तो यह कभी भी बदलाव का फायदा नहीं उठाएगा जब तक कि आप इंडेक्स को उसके सेगमेंट को दोबारा बनाने के लिए मजबूर न करें।
- कुछ इंडेक्स-लेवल सेटिंग्स को इंडेक्स को बंद करने और फिर से खोलने की आवश्यकता नहीं होती है, लेकिन सेटिंग को लागू करने के लिए इंडेक्स को जबरन फिर से मर्ज करने की आवश्यकता हो सकती है।
- नोड के पुनरारंभ के बाद परिवर्तित
- क्लस्टर के पुनः आरंभ के बाद बदला गया
- कभी बदला नहीं गया
हमेशा सेटिंग के साथ आप क्या कर सकते हैं या नहीं कर सकते, इसके लिए एलिस्टिक्सखोज के अपने संस्करण के दस्तावेज की जांच करें।
मैं सेटिंग्स कैसे लागू कर सकता हूं?
आप कुछ तरीके सेट कर सकते हैं, जिनमें से कुछ का सुझाव नहीं दिया गया है:
- कमांड लाइन तर्क
इलास्टिक्स खोज 1.x और 2.x में, आप ज्यादातर सेटिंग्स को जावा सिस्टम प्रॉपर्टीज के साथ उपसर्ग के रूप में सबमिट कर सकते हैं es. :
$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`
Elasticsearch 5.x में, यह जावा सिस्टम प्रॉपर्टी के उपयोग से बचने के लिए बदलता है, इसके बजाय -Des. की जगह -E लेने के साथ एक कस्टम तर्क प्रकार का उपयोग करता है -Des. :
$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`
क्लस्टर शुरू करने और रोकने के लिए कठपुतली, रसोइया, या उपकरण जैसे उपकरणों का उपयोग करते समय सेटिंग लागू करने के लिए यह दृष्टिकोण बहुत अच्छा काम करता है। हालांकि यह मैन्युअल रूप से करते समय बहुत खराब काम करता है।
- YAML सेटिंग्स
- उदाहरणों में दिखाया गया है
- गतिशील सेटिंग्स
- उदाहरणों में दिखाया गया है
सेटिंग्स को लागू करने का क्रम सबसे गतिशील के क्रम में हैं:
- क्षणिक सेटिंग्स
- लगातार सेटिंग
- कमांड लाइन सेटिंग्स
- YAML (स्थिर) सेटिंग्स
यदि सेटिंग उन स्तरों में से किसी एक पर दो बार सेट की जाती है, तो उच्चतम स्तर प्रभावी होता है।
स्टेटिक एलेस्टिक्स खोज सेटिंग्स
Elasticsearch एक YAML (फिर भी एक अन्य मार्कअप लैंग्वेज) कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है जो डिफ़ॉल्ट Elasticsearch निर्देशिका ( RPM और DEB इंस्टॉल अन्य चीजों के बीच इस स्थान को बदलने ) के अंदर पाई जा सकती है।
आप config/elasticsearch.yml में मूल सेटिंग्स सेट कर सकते हैं:
# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name
# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
# a unique configuration file per node.
node.name: ${HOSTNAME}
# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data
# This is a both a master and data node (defaults)
node.master: true
node.data: true
# This tells Elasticsearch to bind all sockets to only be available
# at localhost (default)
network.host: _local_
लगातार गतिशील क्लस्टर सेटिंग्स
यदि आपको क्लस्टर शुरू होने के बाद गतिशील रूप से सेटिंग लागू करने की आवश्यकता है, और यह वास्तव में गतिशील रूप से सेट किया जा सकता है, तो आप इसे _cluster/settings API का उपयोग करके सेट कर सकते हैं।
लगातार सेटिंग दो प्रकार की क्लस्टर-वाइड सेटिंग्स में से एक है जिसे लागू किया जा सकता है। एक सतत सेटिंग एक पूर्ण क्लस्टर पुनरारंभ से बचेगी।
नोट: सभी सेटिंग्स को गतिशील रूप से लागू नहीं किया जा सकता है। उदाहरण के लिए, क्लस्टर का नाम गतिशील रूप से बदला नहीं जा सकता है। अधिकांश नोड-स्तर सेटिंग्स को गतिशील रूप से सेट नहीं किया जा सकता है (क्योंकि उन्हें व्यक्तिगत रूप से लक्षित नहीं किया जा सकता है)।
यह इंडेक्स-स्तरीय सेटिंग्स सेट करने के लिए उपयोग करने के लिए एपीआई नहीं है। आप बता सकते हैं कि सेटिंग इंडेक्स लेवल सेटिंग है क्योंकि यह index. शुरू होना चाहिए index. । सेटिंग्स जिनका नाम indices. के रूप में indices. क्योंकि वे सभी सूचकांकों पर लागू होते हैं क्लस्टर-व्यापी सेटिंग कर रहे हैं।
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
चेतावनी : इलास्टिक्स खोज 1.x और 2.x में, आप एक स्थिर सेटिंग को परेशान नहीं कर सकते।
सौभाग्य से, यह Elasticsearch 5.x में सुधार किया गया है और अब आप इसे null करने के लिए एक सेटिंग हटा सकते हैं:
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
एक परेशान सेटिंग अपने डिफ़ॉल्ट, या कम प्राथमिकता स्तर (जैसे, कमांड लाइन सेटिंग्स) में परिभाषित किसी भी मूल्य पर वापस आ जाएगी।
क्षणिक गतिशील क्लस्टर सेटिंग्स
यदि आपको क्लस्टर शुरू होने के बाद गतिशील रूप से सेटिंग लागू करने की आवश्यकता है, और यह वास्तव में गतिशील रूप से सेट किया जा सकता है, तो आप इसे _cluster/settings API का उपयोग करके सेट कर सकते हैं।
क्षणिक सेटिंग्स दो प्रकार की क्लस्टर-वाइड सेटिंग्स में से एक हैं जिन्हें लागू किया जा सकता है। एक क्षणिक सेटिंग पूर्ण क्लस्टर पुनरारंभ से नहीं बचेगी।
नोट: सभी सेटिंग्स को गतिशील रूप से लागू नहीं किया जा सकता है। उदाहरण के लिए, क्लस्टर का नाम गतिशील रूप से बदला नहीं जा सकता है। अधिकांश नोड-स्तर सेटिंग्स को गतिशील रूप से सेट नहीं किया जा सकता है (क्योंकि उन्हें व्यक्तिगत रूप से लक्षित नहीं किया जा सकता है)।
यह इंडेक्स-स्तरीय सेटिंग्स सेट करने के लिए उपयोग करने के लिए एपीआई नहीं है। आप बता सकते हैं कि सेटिंग इंडेक्स लेवल सेटिंग है क्योंकि यह index. शुरू होना चाहिए index. । सेटिंग्स जिनका नाम indices. के रूप में indices. क्योंकि वे सभी सूचकांकों पर लागू होते हैं क्लस्टर-व्यापी सेटिंग कर रहे हैं।
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
चेतावनी : इलास्टिक्स खोज 1.x और 2.x में, आप पूर्ण क्लस्टर पुनरारंभ के बिना एक क्षणिक सेटिंग्स को परेशान नहीं कर सकते।
सौभाग्य से, यह Elasticsearch 5.x में सुधार किया गया है और अब आप इसे शून्य करने के लिए एक सेटिंग हटा सकते हैं:
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": null
}
}
एक परेशान सेटिंग अपने डिफ़ॉल्ट, या किसी भी प्राथमिकता को निम्न प्राथमिकता स्तर (जैसे, persistent सेटिंग्स) पर परिभाषित करेगी।
सूचकांक सेटिंग्स
इंडेक्स सेटिंग्स वे सेटिंग्स हैं जो एकल इंडेक्स पर लागू होती हैं। ऐसी सेटिंग्स index. साथ शुरू होंगी index. । उस नियम का अपवाद नहीं है number_of_shards और number_of_replicas है, जो भी के रूप में मौजूद हैं index.number_of_shards और index.number_of_replicas ।
जैसा कि नाम से पता चलता है, इंडेक्स-स्तर सेटिंग्स एकल इंडेक्स पर लागू होती हैं। कुछ सेटिंग्स को सृजन के समय पर लागू किया जाना चाहिए क्योंकि उन्हें गतिशील रूप से नहीं बदला जा सकता है, जैसे कि index.number_of_shards सेटिंग, जो इंडेक्स के लिए प्राथमिक index.number_of_shards की संख्या को नियंत्रित करता है।
PUT /my_index
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
या, अधिक संक्षिप्त प्रारूप में, आप प्रत्येक में प्रमुख उपसर्गों को जोड़ सकते हैं . :
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
उपरोक्त उदाहरण आपूर्ति सेटिंग्स के साथ एक सूचकांक बनाएंगे। आप अनुक्रमणिका _settings समापन बिंदु का उपयोग करके प्रति-अनुक्रमणिका को गतिशील रूप से बदल सकते हैं। उदाहरण के लिए, यहाँ हम गतिशील रूप से केवल चेतावनी स्तर के लिए धीमे सेटिंग को बदलते हैं :
PUT /my_index/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
चेतावनी : इलास्टिसर्च 1.x और 2.x ने बहुत सख्ती से सूचकांक-स्तर सेटिंग नामों को मान्य नहीं किया। यदि आपके पास एक टाइपो था, या बस एक सेटिंग बनाई गई थी, तो वह आँख बंद करके इसे स्वीकार करेगा, लेकिन अन्यथा इसे अनदेखा करें। Elasticsearch 5.x सख्ती से सेटिंग नामों को मान्य करता है और यह एक अज्ञात सेटिंग (एस) (टाइपो या लापता प्लगइन के कारण) के साथ सूचकांक सेटिंग्स को लागू करने के किसी भी प्रयास को अस्वीकार कर देगा। दोनों बयान गतिशील रूप से बदलते सूचकांक सेटिंग्स और निर्माण के समय पर लागू होते हैं।
एक ही समय में एकाधिक सूचकांक के लिए डायनामिक इंडेक्स सेटिंग्स
आप Index Settings उदाहरण में दिखाए गए समान परिवर्तन को एक अनुरोध के साथ सभी मौजूदा सूचकांकों पर लागू कर सकते हैं, या उनमें से एक सबसेट भी:
PUT /*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
या
PUT /_all/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
या
PUT /_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
यदि आप अधिक चुनिंदा तरीके से इसे करना पसंद करते हैं, तो आप सभी की आपूर्ति के बिना कई का चयन कर सकते हैं:
PUT /logstash-*,my_other_index,some-other-*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}