들어가며

엘라스틱서치를 클러스터로 운영하게 되면 다음과 같이 몇가지 문제를 맞이 할 수 있습니다

  1. 디스크 문제
  2. 메모리 문제
  3. 샤드 할당 문제
  4. 기타 등등

클러스터의 경우 마스터노드와 데이터노드 코디네이터 노드를 여러대 운영하기 때문에 노드의 추가와 제거가 가능합니다
다만, 간단한 작업의 경우 서버 재시작보다는 rolling restart 방법을 고려해 보는게 좋습니다.


문제상황 (예시)

  • 여기선, 단순히 heap 메모리 증설의 경우를 들어 설명하겠습니다.
  • 데이터 노드의 heap 메모리 부족
  • 먼저, 물리 메모리가 확보 됐는지 확인하고, 가능하다면 heap 메모리를 늘려주자

해결방안

메모리 증설은 해당 노드만 종료후 재실행시켜주면 되기에
엘라스틱서치 전체 재시작보다는 rolling-restart 방식을 취하는 것이 좋습니다

쿼리는 kibana 기준으로 작성 되어 있습니다

  • Step1 heap 메모리 재할당
    # path /elasticsearch/data/config/jvm.options
    Xms4g
    Xmx4g

샤드는 프라이머리, 레플리카로 구성됩니다.
노드가 종료되면 샤드 재배치라는 고비용 작업이 이루어지게
rolling-restart 작업을 할 시에는 샤드 재할당 기능을 종료시켜 놓습니다

  • Step2 샤드 할당 비활성

    # kibana 쿼리 / ES 6.4.2 # 노드를 중단했을때 샤드들이 재배치 되지 않도록 설정 
    PUT _cluster/settings { 
      "persistent": {     
          "cluster.routing.allocation.enable": "none" 
      } 
    }
  • Step3 세그먼트 동기화

    # kibana 쿼리 / ES 6.4.2 # primary - replica 간의 세그먼트 저장 상태를 동기화 
    POST _flush/synced
  • Step4 ES 재실행
    재실행시 elasticsearch의 권한을 잘 확인해보는 것이 좋습니다!!

  • Step5 샤드 할당 활성

    # kibana 쿼리 / ES 6.4.2 # unassigned 된 샤드 재배치 
    PUT _cluster/settings 
    { 
      "persistent": { 
          "cluster.routing.allocation.enable": null 
      } 
    }
  • step6 헬스 체크

    GET _cat/health

참조

블로그 이미지

사용자 yhmane

댓글을 달아 주세요