Category Archives: Elasticsearch

elasticsearch rolling restart

elasticsearch 클러스터 운영시, 플러그인을 추가하거나 버전 업그레이드와 같은 이유로 클러스터 전체를 재기동해야 하는 상황이 있다.

하지만 전체 서비스는, 특히 검색 서비스는 사용할 수 있도록 한 채, 클러스터 전체를 재기동하기 위해서는 각 노드를 하나씩 재기동해야 하며 이를 rolling restart라고 부른다.

이때 단순히 노드를 하나씩 재기동하기 전에 반드시, 인덱스 재할당(index rebalance or index allocation)을 disable 해야 한다.

실제로 해당 노드에 장애가 발생한 경우라면, 인덱스가 균등하게 분포하도록 인덱스가 재할당되는 것이 맞다.

하지만 운영상의 이유로 관리자가 수작업으로 노드를 하나씩 재기동하는 경우라면, 짧은 시간만 노드가 shutdown될 것이며, 이 경우에는 인덱스 재할당이 불필요하다.

비교) 하둡 commissin / decommission

하둡 HDFS의 경우 노드를 추가/제거할 때 commission / decommission 작업을 하여 데이터 노드의 데이터를 밸런싱하는 작업을 수행한다.

 

각 노드를 중지하기 전에, 클러스터의 인덱스 재할당을 disable 하려면 cluster.routing.allocation.enable을 none으로 변경한다.

 

각 노드를 재기동한 후에는, 클러스터의 인덱스 재할당을 enable 한다.

 

밸런싱 작업이 끝난 후, 클러스터의 상태가 녹색불이 뜬 후 나머지 노드도 동일한 방식으로 재기동한다.

 

아래는 elasticearch rolling restart를 위한 스크립트(https://gist.github.com/lamchakchan/aac7089dfc3daab3ce59)를 약간 수정한 스크립트다.

 

참고자료