Zatrzymanie usługi i zabicie demona to rzeczywiście właściwy sposób na zamknięcie węzła. Jednak nie zaleca się robienia tego bezpośrednio, jeśli chcesz wyłączyć węzeł w celu konserwacji. W rzeczywistości, jeśli nie masz replik, utracisz dane.
Gdy bezpośrednio zamkniesz węzeł, Elasticsearch będzie czekał 1 min (czas domyślny), aż wróci do trybu online. Jeśli tak się nie stanie, zacznie przydzielać fragmenty z tego węzła do innych węzłów, marnując dużo IO.
Typowym podejściem byłoby tymczasowe wyłączenie alokacji fragmentów przez wydanie:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Teraz, gdy usuniesz węzeł, ES nie będzie próbować alokować fragmentu z tego węzła do innych węzłów i możesz wykonać czynności konserwacyjne, a gdy węzeł zostanie uruchomiony, możesz ponownie włączyć alokację fragmentu:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
Źródło: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html
Jeśli nie masz replik dla wszystkich indeksów, wykonanie tego typu czynności spowoduje przestoje w przypadku niektórych indeksów. W tym przypadku czystszym sposobem byłoby migrowanie wszystkich fragmentów do innych węzłów przed usunięciem węzła:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
Spowoduje to przeniesienie wszystkich fragmentów z 10.0.0.1
innych węzłów (zajmie to trochę czasu w zależności od danych). Gdy wszystko zostanie zrobione, możesz zabić węzeł, przeprowadzić konserwację i przywrócić go do trybu online. Jest to wolniejsza operacja i nie jest wymagana, jeśli masz repliki.
(Zamiast _ip, _id, _name z symbolami wieloznacznymi będą działać dobrze.)
Więcej informacji: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html
Inne odpowiedzi wyjaśniają, jak zabić proces.