본문 바로가기

elasticsearch

엘라스틱서치 ( elasticsearch ) 순차 재시작

반응형

* 원문링크 *

Rolling Restarts

클러스를 온라인 상태를 유지하면서 순차적인 재시작이 필요한 순간이 있다.

* 엘라스틱서치 업그레이드

* 서버( OS, hardware update) 의 유지보수를 위해

원래 엘라스틱은 데이터가 복제되어 있고 고르게 분배되어 있다. 만약 하나의 노드를 끄게 되면 클러스터는 이를 즉시 감지하고 재배치를 시작한다. 비록 다운타임이 짧다 하더라도 샤드의 크기가 클 경우 재배치 하는데 꽤나 긴 시간이 걸리게 되는데 이 부분이 상당히 번거롭다.

 

이와 같은 번거로운 상황을 피하기 위해 외부의 작업(재시작이 필요한) 이 완료되기 까지 엘라스틱서치의 재배치 작업을 끌 수있다. 이 단계는 아래와 같다.

 

1. 가능하다면 새로운 데이터의 indexing 작업을 멈춘다. 이 작업이 항상 가능할 순 없지만 인덱싱 작업을 멈춤으로써 소요 시간을 줄일 수 있다.

 

2. 샤드 할당 작업을 끈다. 이 설정은 유실된 샤드의 재배치를 하지 않도록 만든다. 샤드 할당을 끄는 설정은 ( disable allocation ) 아래와 같다.

PUT /_cluster/settings

{

"transient" : {

"cluster.routing.allocation.enable" : "none"

}

}

 

3. 노드를 내린다.

 

4. 유지보수 / 업그레이드 작업을 한다.

 

5. 노드를 다시 올리고 노드가 클러스터에 포함이 되는지 확인을 한다.

 

6. [위 2번] 에서 끈 설정을 다시 킨다.

PUT /_cluster/settings

 

{

"transient" : {

"cluster.routing.allocation.enable" : "all"

}

}

위 옵션을 켜게 되면 샤드를 재배치 하는데 시간이 좀 걸린다. 클러스터의 상태가 green 이 될때까지 기다린다.

 

7. [위 2번] 에서 [6번] 작업을 나머지 노드에도 진행한다.

 

8. 이 시점부터 안전하게 재 인덱싱을 할 수 있지만 클러스터가 완전히 배치 될때까지 기다리는게 빠른 작업을 위해 좋다.

 

추가적으로 cluster.routing.allocation.enable 옵션의 설명을 찾아 보면 아래와 같다.

특정한 샤드의 배치 활성/비활성 시킴

all - (기본값) 모든 종류의 샤드 배치

primaries - primary shard 만  배치

new_primaries - 새로운 인덱스가 생성되는 primary shard만 배치

none - 모든 샤드 배치 안함

반응형