Próbuję zrozumieć, co to jest fragment i replika w Elasticsearch, ale nie udało mi się tego zrozumieć. Jeśli pobiorę Elasticsearch i uruchomię skrypt, to z tego, co wiem, uruchomiłem klaster z jednym węzłem. Teraz ten węzeł (mój komputer) ma 5 odłamków (?) I kilka replik (?).
Co to jest, czy mam 5 duplikatów indeksu? Jeśli tak to dlaczego? Mogę potrzebować wyjaśnienia.
elasticsearch
full-text-search
Lucky Luke
źródło
źródło
Odpowiedzi:
Spróbuję wyjaśnić na prawdziwym przykładzie, ponieważ udzielona odpowiedź i odpowiedzi nie wydają się ci pomóc.
Po pobraniu i uruchomieniu go elasticsearch tworzysz węzeł elasticsearch, który próbuje dołączyć do istniejącego klastra, jeśli jest dostępny, lub tworzy nowy. Załóżmy, że utworzyłeś nowy klaster z jednym węzłem, tym, który właśnie uruchomiłeś. Nie mamy danych, dlatego musimy utworzyć indeks.
Podczas tworzenia indeksu (indeks jest tworzony automatycznie również podczas indeksowania pierwszego dokumentu) można określić, z ilu fragmentów będzie się składał. Jeśli nie określisz liczby, będzie ona miała domyślną liczbę odłamków: 5 podstawowych. Co to znaczy?
Oznacza to, że elasticsearch utworzy 5 podstawowych odłamków, które będą zawierać Twoje dane:
Za każdym razem, gdy indeksujesz dokument, elasticsearch decyduje, który odłamek podstawowy ma przechowywać ten dokument, i tam go zindeksuje. Podstawowe odłamki nie są kopią danych, są danymi! Posiadanie wielu odłamków pomaga wykorzystać przetwarzanie równoległe na jednym komputerze, ale chodzi o to, że jeśli uruchomimy inną instancję wyszukiwania elastycznego w tym samym klastrze, odłamki zostaną rozłożone w równomierny sposób w klastrze.
Węzeł 1 będzie wówczas przechowywał na przykład tylko trzy odłamki:
Ponieważ pozostałe dwa odłamki zostały przeniesione do nowo uruchomionego węzła:
Dlaczego to się dzieje? Ponieważ elasticsearch to rozproszona wyszukiwarka, w ten sposób możesz korzystać z wielu węzłów / maszyn do zarządzania dużymi ilościami danych.
Każdy indeks elasticsearch składa się z co najmniej jednego podstawowego fragmentu, ponieważ tam są przechowywane dane. Każdy odłamek ma jednak swoją cenę, dlatego jeśli masz jeden węzeł i nie da się go przewidzieć, po prostu trzymaj się jednego odłamka podstawowego.
Innym rodzajem odłamka jest replika. Wartość domyślna to 1, co oznacza, że każdy podstawowy niezależny fragment zostanie skopiowany do innego niezależnego fragmentu, który będzie zawierał te same dane. Repliki służą do zwiększania wydajności wyszukiwania i przełączania awaryjnego. Odłamek repliki nigdy nie zostanie przydzielony w tym samym węźle, w którym znajduje się powiązany element główny (byłoby to prawie jak umieszczenie kopii zapasowej na tym samym dysku co oryginalne dane).
Wracając do naszego przykładu, z 1 repliką będziemy mieli cały indeks w każdym węźle, ponieważ 2 fragmenty repliki zostaną przydzielone w pierwszym węźle i będą zawierać dokładnie takie same dane, jak podstawowe fragmenty w drugim węźle:
To samo dla drugiego węzła, który będzie zawierał kopię podstawowych odłamków w pierwszym węźle:
Przy takiej konfiguracji, jeśli nastąpi awaria węzła, nadal masz cały indeks. Odłamki repliki automatycznie staną się podstawowymi, a klaster będzie działał poprawnie pomimo awarii węzła, w następujący sposób:
Skoro tak
"number_of_replicas":1
, replik nie można już przypisywać, ponieważ nigdy nie są one przydzielane w tym samym węźle, w którym znajduje się ich podstawa. Dlatego będziesz mieć 5 nieprzypisanych odłamków, repliki i status klastraYELLOW
zamiastGREEN
. Brak utraty danych, ale może być lepiej, ponieważ niektórych odłamków nie można przypisać.Po utworzeniu kopii zapasowej węzła, który opuścił, ponownie dołączy do klastra i repliki zostaną przypisane ponownie. Istniejący fragment niezależny w drugim węźle można załadować, ale należy go zsynchronizować z innymi fragmentami, ponieważ operacje zapisu najprawdopodobniej miały miejsce, gdy węzeł był wyłączony. Pod koniec tej operacji stanie się status klastra
GREEN
.Mam nadzieję, że to wyjaśni ci wszystko.
źródło
Indeks dzieli się na odłamki w celu ich dystrybucji i skalowania.
Repliki są kopiami odłamków i zapewniają niezawodność w przypadku utraty węzła. Często występuje zamieszanie w tym numerze, ponieważ liczba replik == 1 oznacza, że klaster musi mieć główną i replikowaną kopię odłamka, aby być w stanie zielonym.
Aby móc utworzyć repliki, musisz mieć co najmniej 2 węzły w klastrze.
Tutaj definicje mogą być łatwiejsze do zrozumienia: http://www.elasticsearch.org/guide/reference/glossary/
Z pozdrowieniami, Paul
źródło
Jeśli naprawdę nie lubisz widzieć żółtego. możesz ustawić liczbę replik na zero:
Pamiętaj, że powinieneś to zrobić tylko na lokalnym polu programistycznym.
źródło
Czerep:
ElasticSearch
wykorzystuje koncepcję zwanąShard
do dystrybucji dokumentów indeksowych we wszystkich węzłach.index
Potencjalnie mogą przechowywać duże ilości danych, które mogą przekraczać granic sprzętowychsingle node
Elasticsearch
zapewnia możliwość podzielenia indeksu na wiele części zwanychshards
.shards
.Documents
są przechowywane wshards
, a odłamki są przydzielanenodes
w twoimcluster
cluster
rośnie lub kurczy się,Elasticsearch
automatycznie migruje odłamki między niminodes
, abycluster
pozostały zrównoważone.primary shard
alboreplica shard
.single primary shard
, więc liczba posiadanych odłamków podstawowych określa maksymalną ilość danych, które może pomieścić indeksreplica shard
jest tylko kopią podstawowego odłamka.Replika:
Replica shard
jest kopiąprimary Shard
, aby zapobiec utracie danych w przypadku awarii sprzętu.Elasticsearch
pozwala wykonać jedną lub więcej kopii odłamków indeksu w tak zwanych odłamkach repliki lubreplicas
w skrócie.index
Mogą być również powielane zera (czyli nie repliki) lub więcej razy.number of shards
Oraz repliki mogą być zdefiniowane za indeksu w czasie indeks jest tworzony.cannot change the number of shards
później.Elasticsearch
przypisuje się 5 podstawowych odłamków,1 replica
co oznacza, że jeśli masz co najmniej dwa węzły w klastrze, twój indeks będzie miał 5 odłamków podstawowych i kolejne 5 odłamków repliki (1 kompletna replika), co daje łącznie 10 odłamków na indeks.źródło
Indeks dzieli się na odłamki w celu ich dystrybucji i skalowania.
Repliki są kopiami odłamków.
Węzeł jest działającą instancją wyszukiwania elastycznego, która należy do klastra.
Klaster składa się z jednego lub więcej węzłów o tej samej nazwie. Każdy klaster ma pojedynczy węzeł główny, który jest wybierany automatycznie przez klaster i który można wymienić, jeśli obecny węzeł główny ulegnie awarii.
źródło
AWS ec2
instancje, na każdym są zainstalowane elastyczne wyszukiwania. Czyli mamy tutaj trzy węzły? Jeśli wszystkie te węzły mają ten samcluster.name: test
zestaw właściwości, czy utworzy nazwę klastra,test
która miałaby trzy węzły?Wyjaśnię to przy użyciu prawdziwych scenariuszy słownych. Wyobraź sobie, że prowadzisz witrynę e-commerce. Gdy stajesz się coraz bardziej popularny, coraz więcej sprzedawców i produktów dodaje się do Twojej witryny. Zrozumiesz, że wzrosła liczba produktów, które mogą być potrzebne do indeksowania, i jest on zbyt duży, aby zmieścić się na jednym dysku twardym jednego węzła. Nawet jeśli zmieści się na dysku twardym, przeszukiwanie liniowe wszystkich dokumentów w jednym urządzeniu jest bardzo wolne. jeden indeks w jednym węźle nie będzie korzystał z konfiguracji klastra rozproszonego, na której działa elasticsearch.
Elasticsearch dzieli dokumenty w indeksie na wiele węzłów w klastrze. Każdy podział dokumentu nazywa się odłamkiem. Każdy węzeł niosący fragment dokumentu będzie miał tylko podzbiór dokumentu. załóżmy, że masz 100 produktów i 5 odłamków, każdy odłamek będzie miał 20 produktów. To dzielenie danych umożliwia wyszukiwanie z małym opóźnieniem w wyszukiwaniu elastycznym. wyszukiwanie odbywa się równolegle na wielu węzłach. Wyniki są agregowane i zwracane. Odłamki nie zapewniają jednak odporności na uszkodzenia. Oznacza to, że jeśli dowolny węzeł zawierający odłamek jest wyłączony, zdrowie klastra staje się żółte. Oznacza to, że niektóre dane nie są dostępne.
Aby zwiększyć odporność na awarie, można zobaczyć repliki. Przez deault wyszukiwanie elastyczne tworzy pojedynczą replikę każdego odłamka. Te repliki są zawsze tworzone w innym węźle, w którym podstawowy fragment nie znajduje się. Aby system był odporny na awarie, konieczne może być zwiększenie liczby węzłów w klastrze i zależy to również od liczby odłamków indeksu. Ogólny wzór do obliczania liczby wymaganych węzłów na podstawie replik i odłamków to „liczba węzłów = liczba odłamków * (liczba replik + 1)”. Standardową praktyką jest posiadanie co najmniej jednej repliki w celu zapewnienia odporności na uszkodzenia.
Konfigurowanie liczby odłamków jest operacją statyczną, co oznacza, że musisz ją określić podczas tworzenia indeksu. Wszelkie zmiany po tym woulf wymagają pełnego ponownego indeksowania danych i potrwają długo. Jednak konfiguracja liczby replik jest operacją dynamiczną i można ją wykonać w dowolnym momencie po utworzeniu indeksu.
możesz ustawić liczbę odłamków i replik dla swojego indeksu za pomocą poniższego polecenia.
źródło
Nie odpowiedź, ale kolejne odniesienie do podstawowych pojęć do ElasticSearch, i myślę, że są one dość jasne jako uzupełnienie odpowiedzi @ javanna.
Odłamki
Repliki
źródło
W ElasticSearch na najwyższym poziomie indeksujemy dokumenty do indeksów. Każdy indeks ma liczbę odłamków, które wewnętrznie dystrybuują dane, a wewnątrz odłamków istnieją segmenty Lucene, które są głównym miejscem przechowywania danych. Więc jeśli indeks ma 5 odłamków, oznacza to, że dane zostały rozłożone między odłamkami i nie ma takich samych danych w odłamkach.
Uważaj na wideo, które wyjaśnia rdzeń ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Artykuł o wielu indeksach lub wielu odłamkach Elastyczne wyszukiwanie, wiele indeksów kontra jeden indeks i typy dla różnych zestawów danych?
źródło
Elasticsearch jest doskonale skalowalny, a cały kredyt należy do jego architektury rozproszonej. Jest to możliwe dzięki Sharding. Teraz, zanim przejdziemy dalej, rozważmy prosty i bardzo powszechny przypadek użycia. Załóżmy, że masz indeks, który zawiera bardzo dużo dokumentów, a dla uproszczenia rozważ, że rozmiar tego indeksu wynosi 1 TB (tj. Suma rozmiarów każdego dokumentu w tym indeksie wynosi 1 TB ). Załóżmy również, że masz dwa Węzły, każdy z 512 GB miejsca dostępnego do przechowywania danych. Jak widać wyraźnie, cały nasz indeks nie może być przechowywany w żadnym z dwóch dostępnych węzłów i dlatego musimy rozdzielić nasz indeks między te węzły.
W takich przypadkach, gdy rozmiar indeksu przekracza ograniczenia sprzętowe pojedynczego węzła, na ratunek przychodzi Sharding . Sharding rozwiązuje ten problem, dzieląc indeksy na mniejsze części, które są nazywane odłamkami.
źródło
Mówiąc najprościej,
shard
jest to tylko część indeksu przechowywanego na dysku w oddzielnym folderze:Ten zrzut ekranu pokazuje cały katalog Elasticsearch.
Jak widać, wszystkie dane trafiają do
data
katalogu.Sprawdzając indeks
C-mAfLltQzuas72iMiIXNw
, widzimy, że ma on pięć odłamków (folderów0
do4
).Z drugiej strony
JH_A8PgCRj-GK0GeQ0limw
indeks ma tylko jeden fragment (0
folder).Wyświetla
pri
całkowitą liczbę odłamków.źródło