AWS 오픈서치 관련 내역 정리

IT/EKS 2023. 5. 31. 14:26
반응형

혹시라도 읽으시는 분들은,

이거 그냥 개인 메모니까 굳이 이 글 말고 다른거 찾아보시면 됨 ㅇㅇ

 

 

인덱스

> 샤드

    > 루신 인덱스

    > 세그먼트(다큐먼트들) .. 세그먼트가 실제 디스크 

 

바로 세그먼트까지 들어가진 않고, 1초동안 버퍼에 있다가 세그먼트로 감. (디폴트 1초임. 이건 보통 좀 크게 리프레시 인터벌을 지정해서..)

검색 기준은 무조건 스토리지 세그먼트에 들어가있어야 함. 

 

> 샤드 개수 & 레플리카 개수 

  .. 샤드 = 프라이머니 샤드 (최소 3개 이상을 권장함. 아니면 데이터 노드 개수에 맞추어서 배수로. 즉 노드 3개면 3개 마스터 샤드.) 

  .. 레플리카 = 복제본 샤드 (최소 1개 이상은 무조건 있어야 함)

> 오픈서치는 마스터 샤드 최초 설정 이후 변경 불가. 그래서 엘사는 스케일아웃. 오서는 스케일업 을 권장함

 

> 샤드 고르게 배포하려면, 샤드 수를 데이터 노드 (혹 az) 배수로 구성하면 좋음.

> 가용성 높이려면 az배수 고려해서 레플리카 구성하면 좋음. 

마스터 샤드 3개. 1개의 마스터에 1개 레플리카 혹은 2개 레플리카. 대다수는 1개의 레플리카만 한다. 그리고 무조건 마스터 샤드랑은 다른 곳에 저장된다. 

   좀 더 레플리카 읽기 히트를 높이고 성능 올리려면 레플리카 올려주면 좋긴 함. 근데 대다수는 1개만 씀 ㅇㅇ

 

> 오픈서치 검색 

(인덱스 패턴)

---롤링 인덱스

 -인덱싱 기간 / 보존 기간 있고, 계속 흘러 들어오는경우.

-올드 인덱스는 보유 기간 따라, 웜/콜드 계층으로 마이그레이션 혹은 삭제 가능. 

ex) ks-log-2022-07

 

---롱텀 retention 인덱스. 

같은 인덱스에 소스 데이터 저장. 문서 업뎃/삭제 필요한 경우가 많을때

ex) movies, websites,  (날짜별 인덱스가 없음)

 

(오픈서치 인덱스 사이즈 관리)

---사이즈 기반 로테이션

크기 추정 불가.

삭제 요구사항 없음.

동일 샤드 크기 유지.

ex) index-a-000, index-a-001

 

---기간(시계열) 기반 로테이션 

크기 추정 가능

삭제 요구사항 있음.

기간 기준 검색 요구사항 있음.

ex) index-a-2022-09-01, index-b-2022-09-02

 

 

(인덱스 로테이션 빈도 따른 주의사항)

매일마다 일정 데이터 흐름 속도/양 으로 들어오더라도, 빈도에 따라 샤드 구성 달라진다.

일 데이터량 30기가, 샤드 사이즈 50기가로 가정한다면,

 

daily rotate 

마스터 샤드 : 30기가 * 1.1/50기가 = 0.66 > 1샤드

weekly rorate 

마스터샤드 수 : 30기가 * 1.1 * 7일 / 50기가 = 4.62 > 5개 샤드

monthly rotate

마스터샤드 수 : 30기가 * 1.1 * 31일 / 50기가 = 20.46 → 21개 샤드

>>> 이거 왜 1.1을 곱하지? 

>>> 스파이크 / 에러 로그 대량 발생으로 달라지게 된다면, 샤드를 따로 만드는가? 

 

 

 

-----------

(도메인 구성)

마스터 노드 역할 = 인덱싱 / 헬스 / 보존기간 등 (3개 최소 무조건임)

데이터 노드 = 검색 전용 (캐싱 가능). ec2 사이즈마다 스토리지 크기 제한.

울트라 웜 노드 = 저장 노드. 이거 ec2 사이즈마다 스토리지 크기도 제한됨. 

콜드 스토리지 = 아카이브

ALB = 내부적으로 통신 시 내장됨. 

opensearch 내부적으로 유저 생성 / 권한 가능. (iam) .. 쿠버랑 비슷. 

 

---------

(도메인 구성 예측)

스토리지 계층 

(핫 / 울트라 웜 / 콜드 스토리지)

핫 (데이터노드) : 인스턴스 + 데이터볼륨 (비쌈, 래이턴시 낮음) 

울트라 웜 : 인스턴스 + 캐시 + s3 

콜드 : 울트라 웜에서 액세스 할 수 있는 인덱스 저장영역. 콜드에서 인덱스 검색 불가.

 

--스토리지 크기 예측하기 

핫 = 소스 데이터 크기 * (1 + 오버헤드 0.1 10%) * (1 + 레플리카 샤드) / (1 - os예약공간% 0.05) / (1- 아마존 어픈서치 서비스의 오버헤드% 0.2)

울트라 웜 = 소스 데이터 크기 * (1 + 오버헤드) 

콜드 = 소스 데이터 크기 * (1 + 오버헤드) 

 

--샤드 개수 맞추기 

작은 크기의 샤드가 너무 많으면, 검색 성능 저하. 높은 힙 사용률 문제 발생.

큰 크기 샤드도 검색 성능 저하.

  롱 텀 리텐션 인덱스 : 10~30기가 

  롤링 인덱스 : 10~50 기가 

인덱스 생성 후 샤드 수 수정 불가.

롱 텀 리텐션 인덱스 : 향후 데이터 증설 고려 필요 

롤링 인덱스 : 향후 데이터 증가 고려 불필요.

 

샤드당 검색 메모리를 할당.  그래서 작으면 메모리 성능 저하.

샤드 크면 볼륨 하나에서만 스루풋 왔다갔다. 볼륨쪽에서 성능 저하. 

 

(예제)

매일마다 200기가 씩 들어오는 로그 데이터

각 샤드 크기는 30기가 설정했음.

롤링빈도 = 50기가 초과이므로 매일 롤링

3az에 3개의 데이터 노드가 분산되어 배포. 

 

프라이머리 샤드 수 = (소스데이터크기 + room for growth) * (1 + 오버헤드 0.1) / 30기가 샤드크기  * 1일 = 7

  7이니까 데이터노드 개수 배수로. 6 아니면 9로 마스터 샤드 개수 설정. 

 

레플리카 = 6*2 (6은 마스터 샤드 개수)

 

-------------

샤드/스토리지 기반 스펙 예상하기 

  • (일반) 액티브 샤드 당 1.5 vcpu 할당.
  • (고부하) 2v cpu. 스토리지 100기가 당. 이 경우 샤드 크기가 50기가 정도 되어야함

> 액티브 샤드?

  -인덱싱 요청과 빈번한 검색 요청 처리하는 샤드

    -인덱싱 요청 : 직접 인덱싱 하는데 사용하는 마스터 샤드 + 레플리카 샤드 수 

    -검색 요청 : 마스터 샤드 수만 포함 

 

r타입 = 메모리타입. 데이터 내리는거보다 실시간 조회에 좀 더 힘을 실을 때 

gp3 스토리지를 추천함. 

 

---------

검색 성능 최적화 

..인스턴스 스토어..

많은 양 데이터 검색/집계 시, 높은 io가 필요함

 

!!!중첩 필드 유형은 가능한 피해야함. (nested json)

nested json을 오픈서치가 다 풀어서 인덱싱하기때문에..

 

!!!조인 필드 피하셈. 

1:N 관계 구조.

 

--------

인덱싱 최적화

 

.. 벌크 api 이용해서 한방에 저장하자 ㅇㅇ (3~5메가 정도 될거임)

 

------

리프레시 인터벌.

jvm heap : 인덱싱 버퍼 (48메가 < 10% 힙)

> (리프레시) >파일시스템 캐시 (페이지 캐시임) : 세그먼트데이터.

> (플러시) > 디스크 (세그먼트 저장)

 

 

-------

(오토 튜닝)

..유지 관리 기간 중 블루.그린 배포로 반영됨. 

jvm 셋팅 (힙 크기 최대 128기가까지) 

GC

 

-------

엘사 analyzer , 형태소분석기(은전한닢)  설치해보기 ㅇㅇ 

반응형

'IT > EKS' 카테고리의 다른 글

쿠버네티스 Nginx 인그레스 with GRPC  (0) 2023.06.22
쿠버네티스 nginx 인그레스 http 바디 크기  (0) 2023.06.07
Locust 성능테스트 (feat. K8S)  (0) 2023.05.24
로커스트 후기  (0) 2022.12.27
아르고CD AD연동 과정  (0) 2022.11.24

설정

트랙백

댓글