2013-05-29 14 views
73

Zakładając, że mam 5 maszyn, chcę uruchomić klaster elasticsearch i wszystkie są połączone z udostępnionym dyskiem. Umieszczam jedną kopię elastycznego wyszukiwania na tym wspólnym dysku, aby wszyscy trzej mogli go zobaczyć. Czy po prostu rozpocznę elastyczne badanie tego wspólnego dysku na wszystkich moich maszynach, a tworzenie klastrów automatycznie zadziałałoby w jego magię? Czy musiałbym skonfigurować konkretne ustawienia, aby elasticsearch zorientował się, że działa na 5 komputerach? Jeśli tak, jakie są odpowiednie ustawienia? Czy powinienem się martwić konfigurowaniem replik lub czy jest on obsługiwany automatycznie?Jak skonfigurować klaster ES?

+1

Nie zamierzamy korzystać z udostępnionego folderu na indeksie, prawda? – javanna

Odpowiedz

48

to bardzo proste.

Będziesz potrzebował, aby każda maszyna posiadała własną kopię ElasticSearch (po prostu skopiuj tę, którą masz teraz) - powodem jest to, że każda maszyna/węzeł ma zachować własne pliki, które są wyryte w klastrze .

Jedyne, co naprawdę musisz zrobić, to edytować plik konfiguracyjny, aby dołączyć nazwę klastra.

Jeśli wszystkie maszyny mają taką samą nazwę klastra elasticsearch automatycznie zrobi resztę (tak długo, jak maszyny są w tej samej sieci)

przeczytać tutaj, aby uzyskać początek: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

kiedy utwórz indeksy (tam, gdzie przechodzą dane) określasz w tym czasie, ile replik chcesz (zostaną one rozmieszczone wokół klastra).

+8

Również - zainstaluj wtyczkę głowicy. Znacznie ułatwia to monitorowanie stanu twoich indeksów. http://mobz.github.io/elasticsearch-head/ –

+1

Dlaczego na każdym komputerze musisz mieć oddzielne kopie? Na podstawie tego, co widziałem w przypadku komputerów z jednym węzłem, można zmienić nazwę węzła, aby wiele wystąpień działało z tą samą kopią: http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch -nodes-on-one-machine/Czy nie ma to zastosowania, gdy masz oddzielne komputery z jednym dyskiem udostępniania? Myślę, że gdybym ustawił nazwę klastra dla pojedynczej kopii, mógłbym kazać każdej z maszyn uruchomić tę pojedynczą kopię, więc nazwa klastra teoretycznie byłaby tym samym prawem, czy też jestem niepoprawny? – Rolando

+0

Każda maszyna (lub węzeł) będzie potrzebować własnej przestrzeni plików do zapisu plików indeksu lucenu. jeśli zmienisz plik konfiguracyjny (sprawdź łącze), aby wskazywał na inny katalog w węźle lokalnym, może on działać. –

50

Zwykle jest to obsługiwane automatycznie.

Jeśli automatyczne wykrywanie nie działa. Edytować plik konfiguracyjny wyszukiwarki elastyczny, umożliwiając odkrycie unicast

węzła 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"] 

węzła 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"] 

i tak dalej do węzła 3,4,5. Ustaw węzeł master, a reszta tylko jako węzły danych.

Edit: Należy pamiętać, że za rządów ES, jeśli trzeba N węzłów, a następnie umownie N/2+1 węzły powinny być mistrzami fail-over mechanizmy mogą lub nie mogą być węzły danych, choć.

Ponadto, w przypadku, gdy automatyczne wykrywanie nie działa, najprawdopodobniej powodem jest to, że sieć nie pozwala na to (a zatem jest wyłączone). Jeśli wystąpi zbyt wiele pingów automatycznego wykrywania na wielu serwerach, zasoby do zarządzania tymi pingami uniemożliwią poprawne działanie innych usług.

Dla przykładu pomyśl o klastrze z 10 000 węzłów i 10 000 węzłach wykonujących automatyczne pingowania.

+0

Dla wyjaśnienia, czy wszystkie "unicast.hosts" powinny być IP/FQDN urządzenia master? Wydaje się być tym, co pokazuje twój przykład. – harperville

+0

tak. Lista wszystkich dostępnych mistrzów. – KannarKK

+0

Według komentarzy elasticsearch.yml w 1.7.x, jeśli ustawisz "node.master: false", węzeł NIGDY nie stanie się wzorcem ... – Jonesome

3

Próbowałem kroków, które @KannarKK zasugerował na ES 2.0.2, jednak nie mogłem uruchomić klastra. Najwyraźniej coś wymyśliłem, ponieważ ustawiłem numer portu TCP na Master, na Discovery konfiguracji slave.zen.ping.unicast.hosts potrzebuje numeru portu Master wraz z adresem IP (numer portu TCP) do odkrycia. Więc kiedy próbuję podążać za konfiguracją, działa to dla mnie.

Node 1

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"] 

Node 2

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"]