Szukaj…


Uwagi

Elasticsearch jest dostarczany z zestawem wartości domyślnych, które zapewniają dobre przygotowanie do pracy. Domniemane stwierdzenie jest takie, że niekoniecznie jest ono świetne dla produkcji, która musi być dostosowana do twoich własnych potrzeb i dlatego nie można jej przewidzieć.

Domyślne ustawienia ułatwiają pobieranie i uruchamianie wielu węzłów na tym samym komputerze bez żadnych zmian w konfiguracji.

Gdzie są ustawienia?

Wewnątrz każdej instalacji Elasticsearch znajduje się config/elasticsearch.yml . W tym miejscu działają następujące ustawienia :

  • cluster.name
    • Nazwa klastra, do którego dołącza węzeł. Wszystkie węzły w tym samym klastrze muszą mieć tę samą nazwę.
    • Obecnie domyślnie jest elasticsearch .
  • node.*
    • node.name
      • Jeśli nie zostanie podany, losowa nazwa będzie generowana przy każdym uruchomieniu węzła . To może być zabawne, ale nie jest dobre dla środowisk produkcyjnych.
      • Nazwy nie muszą być unikalne, ale powinny być unikalne.
    • node.master
      • Ustawienie boolowskie. Kiedy true , oznacza to, że węzeł jest uprawnionym węzeł główny i może być wybrany węzeł nadrzędny.
      • Domyślnie true , co oznacza, że każdy węzeł jest odpowiednim węzłem głównym.
    • node.data
      • Ustawienie boolowskie. Wartość true oznacza, że węzeł przechowuje dane i obsługuje działania związane z wyszukiwaniem.
      • Domyślnie true .
  • path.*
    • path.data
      • Lokalizacja, w której zapisywane są pliki dla węzła. Wszystkie węzły używają tego katalogu do przechowywania metadanych, ale węzły danych będą go również używać do przechowywania / indeksowania dokumentów.
      • Domyślnie to ./data .
        • Oznacza to, że data zostaną utworzone jako katalog równorzędny do config w katalogu Elasticsearch.
    • path.logs
      • Lokalizacja, w której zapisywane są pliki dziennika.
      • Domyślnie ./logs .
  • network.*
    • network.host

      • Domyślnie _local_ , który jest w rzeczywistości _local_ localhost .
        • Oznacza to, że domyślnie nie można komunikować się z węzłami spoza bieżącej maszyny!
    • network.bind_host

      • Potencjalnie tablica, informuje to Elasticsearch, jakie adresy bieżącej maszyny mają również wiązać gniazda.
        • Ta lista umożliwia komputerom spoza komputera (np. Innym węzłom w klastrze) komunikowanie się z tym węzłem.
      • Domyślnie to network.host .
    • network.publish_host

      • Pojedynczy host używany do reklamowania się w innych węzłach, w jaki sposób najlepiej komunikować się z tym węzłem.
        • Dostarczając tablicę do network.bind_host , powinien być to jeden host, który ma być używany do komunikacji między węzłami.
      • Domyślnie network.host`.
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • Definiuje kworum dla wyborów głównych. Należy to ustawić za pomocą tego równania: (M / 2) + 1 gdzie M jest liczbą kwalifikujących się węzłów głównych (węzły używające node.master: true niejawnie lub jawnie).
      • Domyślnie 1 , co jest poprawne tylko dla klastra z jednym węzłem!
    • discovery.zen.ping.unicast.hosts
      • Mechanizm łączenia tego węzła z resztą klastra.
      • Powinno to zawierać listę odpowiednich węzłów głównych, aby węzeł mógł znaleźć resztę klastra.
      • Wartością, którą należy tu zastosować, jest network.publish_host tych innych węzłów.
      • Domyślnie localhost , co oznacza, że klastra dołącza tylko do komputera lokalnego.

Jakie typy ustawień istnieją?

Elasticsearch zapewnia trzy różne typy ustawień:

  • Ustawienia dla całego klastra
    • Są to ustawienia, które dotyczą wszystkich elementów w klastrze, takich jak wszystkie węzły lub wszystkie indeksy.
  • Ustawienia węzła
    • Są to ustawienia, które dotyczą tylko bieżącego węzła.
  • Ustawienia indeksu
    • Są to ustawienia, które dotyczą tylko indeksu.

W zależności od ustawienia może to być:

  • Zmieniany dynamicznie w czasie wykonywania
  • Zmieniono po ponownym uruchomieniu (zamknięciu / otwarciu) indeksu
    • Niektóre ustawienia na poziomie indeksu nie wymagają zamknięcia i ponownego otwarcia indeksu, ale mogą wymagać wymuszonego ponownego scalenia indeksu w celu zastosowania ustawienia.
      • Poziom kompresji indeksu jest przykładem tego rodzaju ustawienia. Można go zmieniać dynamicznie, ale tylko nowe segmenty korzystają ze zmiany. Jeśli więc indeks się nie zmieni, to nigdy nie skorzysta ze zmiany, chyba że wymusisz na indeksie odtworzenie jego segmentów.
  • Zmieniono po ponownym uruchomieniu węzła
  • Zmieniono po ponownym uruchomieniu klastra
  • Nigdy się nie zmieniłem

Zawsze sprawdzaj w dokumentacji swojej wersji Elasticsearch, co możesz zrobić, a czego nie możesz zrobić z ustawieniem.

Jak mogę zastosować ustawienia?

Możesz ustawić ustawienia na kilka sposobów, z których niektóre nie są sugerowane:

  • Argumenty wiersza poleceń

W Elasticsearch 1.xi 2.x większość ustawień można przesłać jako Właściwości systemowe Java poprzedzone es. :

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

W Elasticsearch 5.x zmienia się, aby uniknąć używania właściwości systemowych Java, zamiast niestandardowego typu argumentu z -E zamiast -Des. :

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

Takie podejście do stosowania ustawień działa świetnie, gdy używasz narzędzi takich jak Puppet, Chef lub Ansible do uruchamiania i zatrzymywania klastra. Jednak działa to bardzo słabo, gdy wykonuje się to ręcznie.

  • Ustawienia YAML
    • Pokazane w przykładach
  • Ustawienia dynamiczne
    • Pokazane w przykładach

Kolejność stosowania ustawień jest najbardziej dynamiczna:

  1. Ustawienia przejściowe
  2. Trwałe ustawienia
  3. Ustawienia wiersza poleceń
  4. Ustawienia YAML (statyczne)

Jeśli ustawienie zostanie ustawione dwa razy, jeden raz na którymkolwiek z tych poziomów, obowiązuje najwyższy poziom.

Ustawienia statycznego wyszukiwania elastycznego

Elasticsearch używa pliku konfiguracyjnego YAML (Yet Another Markup Language), który można znaleźć w domyślnym katalogu Elasticsearch ( instalacje RPM i DEB zmieniają tę lokalizację między innymi ).

Możesz ustawić podstawowe ustawienia w 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_

Trwałe ustawienia dynamicznego klastra

Jeśli musisz zastosować ustawienie dynamicznie po uruchomieniu klastra i faktycznie można je ustawić dynamicznie, możesz je ustawić za pomocą _cluster/settings API.

Trwałe ustawienia są jednym z dwóch rodzajów ustawień obejmujących cały klaster, które można zastosować. Trwałe ustawienie przetrwa pełną ponownego uruchomienia klastra.

Uwaga: Nie wszystkie ustawienia można zastosować dynamicznie. Na przykład nazwy klastra nie można dynamicznie zmieniać. Większość ustawień na poziomie węzłów również nie może być ustawiana dynamicznie (ponieważ nie można na nie celować indywidualnie).

To nie jest interfejs API używany do ustawiania ustawień na poziomie indeksu. Możesz powiedzieć, że to ustawienie jest poziomem indeksu, ponieważ powinno zaczynać się od index. . Ustawienia, których nazwa ma postać indices. ustawieniami obejmującymi cały klaster, ponieważ dotyczą wszystkich indeksów.

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

Ostrzeżenie : W Elasticsearch 1.xi 2.x nie można cofnąć ustawienia trwałego.

Na szczęście poprawiono to w Elasticsearch 5.x i można teraz usunąć ustawienie, ustawiając null :

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

Nieuzbrojone ustawienie powróci do wartości domyślnej lub dowolnej wartości zdefiniowanej na niższym poziomie priorytetu (np. Ustawienia wiersza poleceń).

Ustawienia przejściowego klastra dynamicznego

Jeśli musisz zastosować ustawienie dynamicznie po uruchomieniu klastra i faktycznie można je ustawić dynamicznie, możesz je ustawić za pomocą _cluster/settings API.

Ustawienia przejściowe są jednym z dwóch rodzajów ustawień obejmujących cały klaster, które można zastosować. Ustawienie przejściowe nie przetrwa pełnego restartu klastra.

Uwaga: Nie wszystkie ustawienia można zastosować dynamicznie. Na przykład nazwy klastra nie można dynamicznie zmieniać. Większość ustawień na poziomie węzłów również nie może być ustawiana dynamicznie (ponieważ nie można na nie celować indywidualnie).

To nie jest interfejs API używany do ustawiania ustawień na poziomie indeksu. Możesz powiedzieć, że to ustawienie jest poziomem indeksu, ponieważ powinno zaczynać się od index. . Ustawienia, których nazwa ma postać indices. ustawieniami obejmującymi cały klaster, ponieważ dotyczą wszystkich indeksów.

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

Ostrzeżenie : W Elasticsearch 1.xi 2.x nie można cofnąć ustawień przejściowych bez pełnego restartu klastra.

Na szczęście poprawiono to w Elasticsearch 5.x i można teraz usunąć ustawienie, ustawiając wartość null:

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": null
  }
}

Nieuzbrojone ustawienie powróci do wartości domyślnej lub dowolnej wartości zdefiniowanej na niższym poziomie priorytetu (np. Ustawienia persistent ).

Ustawienia indeksu

Ustawienia indeksu to ustawienia, które dotyczą jednego indeksu. Takie ustawienia zaczną się od index. . Wyjątkiem od tej reguły są number_of_shards i number_of_replicas , które również istnieją w formie index.number_of_shards i index.number_of_replicas .

Jak sama nazwa wskazuje, ustawienia na poziomie indeksu dotyczą pojedynczego indeksu. Niektóre ustawienia muszą zostać zastosowane podczas tworzenia, ponieważ nie można ich zmieniać dynamicznie, takie jak ustawienie index.number_of_shards , które kontroluje liczbę podstawowych odłamków dla indeksu.

PUT /my_index
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 1
  }
}

lub, w bardziej zwięzłym formacie, możesz łączyć kluczowe prefiksy w każdym z nich . :

PUT /my_index
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    }
  }
}

Powyższe przykłady utworzą indeks z dostarczonymi ustawieniami. Możesz dynamicznie zmieniać ustawienia według indeksu, używając punktu końcowego indeksu _settings . Na przykład tutaj dynamicznie zmieniamy ustawienia slowlog tylko dla poziomu ostrzegania:

PUT /my_index/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

Ostrzeżenie : Elasticsearch 1.x i 2.x nie bardzo ściśle sprawdzały nazwy ustawień na poziomie indeksu. Jeśli miałeś literówkę lub po prostu wymyśliłeś ustawienie, to na ślepo je zaakceptowałoby, ale w przeciwnym razie zignoruje je. Elasticsearch 5.x ściśle sprawdza nazwy ustawień i odrzuci każdą próbę zastosowania ustawień indeksu z nieznanymi ustawieniami (z powodu literówki lub brakującej wtyczki). Obie instrukcje dotyczą dynamicznie zmieniających się ustawień indeksu oraz w czasie tworzenia.

Ustawienia indeksu dynamicznego dla wielu indeksów jednocześnie

Możesz zastosować tę samą zmianę pokazaną w przykładzie Index Settings do wszystkich istniejących indeksów za pomocą jednego żądania, a nawet ich części:

PUT /*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

lub

PUT /_all/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

lub

PUT /_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

Jeśli wolisz to również zrobić bardziej selektywnie, możesz wybrać wiele bez podania wszystkich:

PUT /logstash-*,my_other_index,some-other-*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow