글
AWS 오픈서치 관련 내역 정리
혹시라도 읽으시는 분들은,
이거 그냥 개인 메모니까 굳이 이 글 말고 다른거 찾아보시면 됨 ㅇㅇ
인덱스
> 샤드
> 루신 인덱스
> 세그먼트(다큐먼트들) .. 세그먼트가 실제 디스크
바로 세그먼트까지 들어가진 않고, 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 |