일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Resolver
- 금융소득
- command
- 리소스
- kubectl
- 세금계산서
- serverless
- 정책자금
- 경매
- node
- 인덱싱
- 신탁공매
- Kubernetes
- 매입불공제
- AWS
- 농지연금
- 산지연금
- 공매
- lambda
- S3
- route53
- 외국납부세액공제
- python
- OpenSearch
- 성능개선
- 임업후계자
- boto3
- Filter
- pod
- 양도소득세
- Today
- Total
진지한 개발자
OpenSearch Service 클러스터에서의 인덱싱 성능 개선 본문
각 노드의 적절한 샤드수 확인하기
- 샤드가 수집하려는 인덱스의 데이터 노드에 고르게 분산되어 있는지 확인합니다.
- 샤드가 고르게 분산되었는지 확인하는 공식
인덱스의 샤드 수 = k*(데이터 노드 수). 여기서 k는 노드당 샤드 수
- 예를 들어 인덱스에 샤드 24개가 있고 데이터 노드가 8개인 경우, OpenSearch Service에서 각 노드에 샤드 3개를 할당
refresh_interval을 60초 이상으로 늘림
문서를 검색할 수 있도록 OpenSearch Service 인덱스를 새로 고침. 인덱스를 새로 고치려면 스레드 인덱싱에 사용한 것과 동일한 리소스가 필요함.
기본 새로 고침 간격은 1초. 새로 고침 간격을 늘리면 데이터 노드가 API 호출 횟수를 줄임. 새로 고침 간격은 새로 고침 간격의 길이에 따라 더 짧거나 빠를 수 있음. 429 오류가 발생하지 않도록 하려면 새로 고침 간격을 높이는 것이 좋음.
- 참고: 기본 새로 고침 간격은 지난 30초 이내에 하나 이상의 검색 요청을 수신한 인덱스의 경우 1초입니다.
복제본 수를 0으로 변경
큰 인덱싱 작업이 예상되는 경우 index.number_of_replicas 값을 ‘0’으로 설정. 각 복제본은 인덱싱 프로세스를 복제함. 따라서 복제본을 비활성화하면 클러스터 성능이 개선됨. 큰 인덱싱 작업이 완료되면 복제된 인덱스를 다시 활성화함.
중요: 복제본이 비활성화되어 있는 동안 노드에 장애가 발생하면 데이터가 손실될 수 있음. 짧은 시간 동안 데이터 손실을 허용할 수 있는 경우에만 복제본을 비활성화함
최적의 대량 요청 크기를 찾기 위한 실험
- 5~15MiB의 대량 요청 크기로 시작하여 인덱싱 성능이 더 이상 개선되지 않을 때까지 요청 크기를 서서히 늘리며 테스트
응답 크기를 줄임
- OpenSearch Service 응답의 크기를 줄이려면 filter_path 파라미터를 사용하여 불필요한 필드를 제외
curl -XPOST "es-endpoint/index-name/type-name/_bulk?pretty&filter_path=-took,-items.index._index,-items.index._type" -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "test2", "_id" : "1" } }
{ "user" : "testuser" }
{ "update" : {"_id" : "1", "_index" : "test2"} }
{ "doc" : {"user" : "example"} }
index.translog.flush_threshold_size 값을 늘림
기본적으로 index.translog.flush_threshold_size는는 512MB로 설정됨. 즉, translog가 512MB에 도달하면 플러시됨.
인덱싱 로드의 가중치는 트랜스로그의 빈도에 따라 결정됨. index.translog.flush_threshold_size를 늘리면 노드가 트랜스로그 작업을 실행하는 빈도가 낮아짐.
OpenSearch Service 플러시는 리소스를 많이 사용하는 작업이기 때문에 트랜스로그의 빈도를 줄이면 인덱싱 성능이 개선됨
플러시 임계값 크기를 늘리면 OpenSearch Service 클러스터가 여러 개의 작은 세그먼트 대신 적은 수의 큰 세그먼트도 생성함. 큰 세그먼트는 병합 빈도가 낮고 병합하는 대신 인덱싱에 더 많은 스레드가 사용됨
참고: index.translog.flush_threshold_size가 커지면 트랜스로그를 완료하는 데 걸리는 시간도 증가함. 샤드가 실패하면 트랜스로그가 더 크기 때문에 복구에 더 많은 시간이 걸림.
- 현재 플러시 작업통계 조회
curl -XPOST "<os-endpoint>/<index-name>/_stats/flush?pretty"
- 적절한 플러시 임계값 크기로 상향 설정
$ curl -XPUT "<os-endpoint>/<index-name>/_settings?pretty" -d "{"index":{"translog.flush_threshold_size" : "1024MB"}}"
- _stats API 작업을 다시 실행하면 플러시 활동이 변경되었는지 확인
curl -XPOST "<os-endpoint>/<index-name>/_stats/flush?pretty"
- 참고: 현재의 인덱스에 대해서만 index.translog.flush_threshold_size를 늘리는 것이 좋음. 결과를 확인한 후, 변경 사항을 인덱스 템플릿에 적용해보는 것 권장
'IT > AWS' 카테고리의 다른 글
OpenSearch Service 클러스터의 검색 대기 시간 급증 문제를 해결 (0) | 2024.02.17 |
---|---|
NLB load balancing (0) | 2024.02.17 |
AWS VPN (0) | 2024.02.17 |
Lambda (1) | 2024.02.08 |
Lambda (0) | 2024.01.24 |