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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Ponieważ pozostałe dwa odłamki zostały przeniesione do nowo uruchomionego węzła:
____ ____
| 4 | | 5 |
|____| |____|
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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
To samo dla drugiego węzła, który będzie zawierał kopię podstawowych odłamków w pierwszym węźle:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
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 klastra YELLOW
zamiast GREEN
. 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.