2015-03-25 28 views
5

Wyobraźmy sobie sytuację, w której mamWyłącz ElasticSeach ponownego równoważenia jeśli jeden węzeł jest w dół

  • 3 (AWS) Węzły
  • Index (pozwala wywołać znajomych) z 3 odłamki i 1 repliki.

S1 (wskaźnik znajomych podstawowej skorupa 1)

S2 (Indeks znajomych podstawowej skorupa 2)

S3 (Indeks znajomych podstawowej skorupa 3)

R1 (Replika fragmencie 1)

R2 (Replika fragmencie 2) R3 (Replika fragmencie 3)

Umożliwia sa Y, który ma Node1 (S1 R2) i jest wzorcem

Node2 ma (S2 R3)
Node3 ma (S3 R1)

Teraz, jeżeli z powodu awarii zasilania Węzła 2 przechodzi w dół.

Równoważenie obciążenia nastąpi i Węzeł 1 będzie promować replikę (R2) jako podstawowej i nowej repliki do (R2) zostanie utworzony w Node3

Wreszcie po równoważenia obciążenia będzie to jak

węźle Node1 ma (S1 S2, R3)
Węzeł3 ma (S3 R1, R2)

Podczas tego ponownego równoważenia występują ciężkie operacje IO, a stan zdrowia Elastic będzie czerwony -> żółty, a następnie zielony.

Moim wymaganiem jest to, że jeśli węzeł 2 jest wyłączony, węzły nie mogą ponownie wyważać. Jestem OK, jeśli wyniki w zapytaniu pokazują wyniki tylko z odłamu S1 i S3. A gdy węzeł 2 powróci, nie powinno następować ponowne równoważenie.

Odpowiedz

2

Możesz to zrobić, wyłączając przydzielanie odłamków.

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

Jeśli chcesz włączyć alokację powrotem:

curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "all"}}' 
+0

Yea Chris! Myślę, że muszę napisać skrypt, aby cały czas sprawdzać węzły. Jeśli w dół wyłącz przydzielanie odłamków jeszcze włącz go ponownie .. – Cyril