IT Knowledge/ElasticSearch

Elasticsearch 안정적인 클러스터 운영 노하우

Seok. 2024. 8. 6. 23:00
반응형
  1. 노드 부트스트랩 과정 이해
  2. 마스터 노드와 데이터 노드 분리하기
  3. 클러스터 관리 API
  4. 주요 체크포인트

 

[노드 부트스트랩 과정 이해]

노드 부트스트랩 = 노드가 최초 실행시, 동작할 환경을 체크하는 작업을 스스로 수행한다.

 

Elasticsearch에서는 운영시 발생 가능한 다양한 문제점을 미연에 방지하기 위해, 엘라스틱서치 노드가 실행될 강력한 검사를 수행하게 된다.

부트스트랩 체크 과정을 통해 필수 설정이 잘못되어 있을 경우,

사용자에게 알리고 해당 설정이 정상적으로 수정 될때까지 엘라스틱서치를 강제 종료

반드시 필수 설정이 완료 되어야만 실행되도록 강제한다.

 

이러한 노드 부트스트랩 과정이 항상 실행할 필요는 없지만,

운영환경의 경우는 필수로 필요하다.

 

개발 모드(Development Mode)

  • 로컬동작으로 다른 노드와 클러스터를 구성할 없다.

운영 모드(Product Mode)

  • 1대라면 개발모드로 판단하고 부트스트랩 과정 무시
  • 부트스트랩 체크 과정 강제 옵션(-Des.enforce.bootstrap.checks=true)

 

부트스트랩 체크 과정

  1. Heap Size Check( 크기 체크)
  2. File Descriptor Check(파일 디스크립터 체크)
  3. Memory lock Check(메모리 체크)
  4. Maximum number of Threads Check(최대 스레드 체크)
  5. Maximum Size Virtual memory Check(최대 가상 메모리 크기 체크)
  6. Max File Size Check(최대 파일 크기 체크)
  7. Maximum map Count Check(mmap 카운트 체크)
  8. Client JVM Check(클라이언트 JVM 체크)
  9. Use Serial Collector Check(Serial Collector 사용 여부 체크
  10. System Call Filter Check(시스템 필터 체크)
  11. OnError and OnOutOfMemoryError Checks(OnError, EnOutOfMemoryError 체크)
  12. Early-access Check(Early-Access 체크)
  13. G1GC Check(G1GC 체크)
  14. All Permission Check(All Permission 체크)

 

[마스터노드와 데이터 노드 분리하기]

데이터 용량이 작아 단일노드로 충분할때는 문제 없지만, 실제 운영 환경에서 데이터가 늘어나게 되면, 엘라스틱서치 노드의 역할에 맞게 운영해야 한다.

 

마스터노드와 데이터노드 분리.

코디네이터 노드 별도 구축 .

 

node.master : true or false
node.data : true or false
node.ingest : true or false
search.remote.connect : true or false

 

Master Node - 클러스터의 제어를 담당하는 모드.

Data Node - 데이터를 보관하고 데이터의 CRUD, 검색, 집계 데이터 관련 작업 담당하는 모드

Ingest Node 모드 - 데이터를 색인할 데이터의 전처리를 담당하는 모드

Coordination Nodate 모드 - 사용자의 요청(검색 or 집계…) 받아 처리하는 코디네이터 모드

 

[클러스터 관리 API]

엘라스틱서치에서는 클러스터 관리를 위해 _cluster API 제공한다.

이를 통해 모니터링하거나 상태를 조회할 있다.

대표적인 API

_cluster/settings : 런타임에 환경설정 변경

  _cluster/settings?flat_settings=ture

_cluster/pending_tasks : 대기중인 클러스터 변경 명령 조회

  노드 부하나 장애 발생시, 처리되지 못한 큐에 쌓인 태스크 목록 조회 .

_nodes/hot_threads : 사용률이 높은 스레트 조회

_cluster/reroute : 노드간 샤드 이동

_tasks : 실행중인 태스크 조회

_nodes/usage : 관리 API 호출 통계

 

 

[안정적인 클러스터 운영을 위한 주요 체크포인트]

클러스터를 운영하면서 지속적으로 살펴봐야할 지표는 무엇인가?

클러스터 상태 측정(Cluster Health API) : green > yellow > red 현재 상태 표현

  • Cluster.health.status
  • _cluster/health

노드 통계 조회

  • _nodes/stats
  • _nodes/{NODE_NAME}/stats/indices/indexing,refresh,flush

검색 성능 측정

  • Indices.search.query_total : 쿼리
  • Indices.search.query_time_in_millis : 쿼리에 소요된 시간
  • Indices.search.fetch_time_in_millis : 조회에 소요된 시간

색인 성능 측정

  • Indices.indexing.index_time_in_millis : 색인 작업시 소요된 시간
  • Indices.indexing.index_current : 현재 색인중인 문서수
  • Indices.flush.total : 디스크 flush 작업이 발생한 횟수

HTTP 성능 측정

  • Http.current_open : 현재 열려있는 HTTP연결

GC성능 측정

  • jvm.gc.collectors.young.collection_count : young영역의 GC 개수
  • jvm.mem.heap_used_percent : 현재 사용중인 JVM 힙의 비율

운영체제 성능 측정

스레드풀 상태 측정

  • Thread_pool.bulk.queue
  • Thread_pool.index.queue
  • ...

캐시 상태 측정

  • indices.query_cache.hit_count : 쿼리 캐시 적중률
  • Indices.query_cache.total_count : 생성된 쿼리 캐시

 

- 엘라스틱서치 실무 가이드(위키북스)

반응형