Opensearch - 3

Koo·2023년 10월 8일
1
post-thumbnail

샤드 할당(Shard Allocation)과 재배치(Rerouting)

  • 샤드할당 : 노드에 샤드를 할당하는 것
  • 클러스터 매니저는 어떤 샤드를 어떤 노드에 할당하고, 언제 노드 간에 샤드 이동이 필요한지 결정
  • 샤드 할당 발생 시기
    • 처음 인덱스를 생성할 때

    • 인덱스의 replica 수를 변경할 때

    • 클러스터에 노드가 추가되거나 노드가 클러스터를 이탈했을 때

    • 노드 간에 샤드 리밸런싱(rebalancing)이 필요할 때

      • 특정 노드에 샤드가 많을 때 샤드 리밸런싱 발생

인덱스 라이프사이클 관리

  • 인덱스에 도큐먼트를 제한 없이 저장하면, 인덱스의 크기가 무한히 커짐
  • 인덱스 크기가 너무 커질 경우 성능 문제가 발생할 수 있기 때문에, 주기적으로 인덱스를 나눠주는 작업이 필요
  • Opensearch는 ISM(Index State Management)을 통해 자동으로 인덱스 라이프 사이클을 관리
    • 인덱스가 특정 크기 또는 도큐먼스 수에 도달하면 새로운 인덱스 생성
    • 일정 주기마다 인덱스를 새로 생성하고 이전 인덱스를 보관
  • ISM은 내부적으로 rollover와 shrink 개념을 사용해 인덱스를 관리

rollover API

  • 인덱스가 특정 조건을 만족했을 때 인덱스를 생성
  • ISM 템플릿에 rollover 조건을 주면 주기적으로 rollover 조건을 체크함
  • rollover를 사용하기 위해서는 alias설정이 필요
  • alias가 가리키는 인덱스는 언제든 변경이 가능

shrink API

  • 인덱스의 primary 샤드 개수를 줄여줌
  • 샤드를 지우는 것이 아닌, 여러 개의 샤드를 merge하여 하나의 샤드로 묶는 역할을 하는 API
  • 기존 인덱스의 데이터를 샤드 개수가 더 적은 새로운 인덱스로 옮겨서 샤드 병합을 수행
  • 전제 조건
    • 인덱스는 읽기 전용 (shrink 도중 데이터가 들어오면 안됨)
    • 인덱스의 모든 primary 또는 replica 샤드가 동일한 노드에 있어야 함
    • replica 샤드를 모두 제거하면 shrink 작업이 쉬워짐
    • 인덱스가 green 상태여야 함

핫-웜-콜드(Hot-warm-cold) 아키텍처

  • 데이터 검색 빈도에 따라 핫/웜/콜드 노드에 저장
  • 로그, 메트릭 및 트랜잭션 같은 시계열 데이터에 주로 사용
  • 시계열 데이터는 한 번 인덱싱되면 업데이트될 가능성이 낮음
  • 시간이 지날수록 데이터 검색 빈도가 낮아지므로 오래된 데이터를 비용이 저렴한 스토리지로 이동시켜 비용 절감이 가능
  • 처음: 성능이 좋고 비싼 핫 노드에 인덱싱 → 나중: 비교적 느리거나 저렴한 웜 노드로 이동
  • 클라이언트 입장에서는 핫/웜/콜드인지 모르고 데이터에 접근함

핫 노드(Hot Node)

  • 활발하게 검색하고 인덱싱하는 데이터 저장
  • 디스크와 메모리 IO 성능이 중요 (SSD)
node.attr.temp: hot

웜 노드(Warm Node)

  • 자주 사용되지 않는 데이터를 핫 노드에서 옮김
  • 디스크 IO 성능은 중요하지 않지만, 대용량 데이터를 저장할 수 있도록 사이즈가 큰 디스크를 사용 (HDD)
node.attr.temp: warm

콜드 노드(Cold Node)

  • 더 이상 업데이트되지 않는 데이터를 웜 노드에서 콜드 노드로 옮김
  • 콜드 노드로 마이그레이션할 때 디스크 공간을 절약하기 위해 압축 가능
  • 검색 속도가 중요하지 않음 → 데이터를 메모리에 올리지 않고 검색 요청이 올 때마다 인덱스 파일을 디스크에서 읽도록 할 수 있음
profile
스터디를 해보자

0개의 댓글