2013-04-26 19 views
8

Rozważmy poniższe ustawienia w elasticsearch.ymlszybkie odzyskiwanie po ponownym uruchomieniu węzła w elasticsearch

gateway.recover_after_data_nodes: 3 
gateway.recover_after_time: 5m 
gateway.expected_data_nodes: 3 

Aktualne ustawienie: Powiedz, mam 3 węzły danych. Teraz, jeśli zdecyduję się zrestartować węzeł danych (z powodu małej zmiany ustawień), odzyskiwanie rozpocznie się natychmiast po restarcie węzła zgodnie z ustawieniem expected_data_nodes. Będzie wiele nieprzypisanych odłamków, które będą przydzielane powoli w zależności od zawartych w nich danych.

Aby tego uniknąć, czy istnieje sposób na przydzielenie wszystkich nieprzydzielonych fragmentów do określonego węzła (w moim przypadku zrestartowanego węzła), a kiedy to nastąpi, ES powinien przejąć równoważenie.

Głównie chcę uniknąć ciężkiego timelag stanu klastra z żółtego na zielony. (Jest w przedziale godzin w moim przypadku)

mogę wykorzystać klaster przekierować api do tego celu?

lub czy istnieją inne api do przeniesienia wszystkich nieprzypisanych odłamków do określonego węzła za jednym razem?

Odpowiedz

26

Dla wersji Elasticsearch> = 1.0.0:

curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "none"}}' 
/etc/init.d/elasticsearch restart 
curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "all"}}' 

dla wcześniejszych wersji ES:

curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.disable_allocation": true}}' 
/etc/init.d/elasticsearch restart 
curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.disable_allocation": false}}' 

Shard utrzymania nieprzydzielone aż "cluster.routing.allocation.disable_allocation" : false, a następnie shards recovery na serwerze po prostu ponownie uruchomionym (począwszy od rozmiaru, który był przed zamknięciem) Jest bardzo szybki.

referencyjny: http://elasticsearch-users.115913.n3.nabble.com/quick-recovery-after-node-restart-in-elasticsearch-td4033876.html#a4034211

+0

Ponieważ jest to „przejściowe” ustawienie, to po prostu powrócić do uporczywego ustawienia po ponownym uruchomieniu. Więc może nie potrzebujesz drugiej części. Ponadto możesz zajrzeć do cluster.routing.allocation.disable_replica_allocation – joeslice

+2

@joeslice 1. Ponieważ w klastrze jest więcej niż 1 węzeł, ustawienia przejściowe pozostają nadal po ponownym uruchomieniu węzła. 2. 'disable_allocation' oznacza' disable_replica_allocation', więc nie ma potrzeby ustawiania obu. – itsadok

+0

@itsadok Dzięki za dodanie. –

Powiązane problemy