진지한 개발자

OpenSearch Service 클러스터에서의 인덱싱 성능 개선 본문

IT/AWS

OpenSearch Service 클러스터에서의 인덱싱 성능 개선

제이_엔 2024. 2. 17. 23:25
728x90

각 노드의 적절한 샤드수 확인하기

  • 샤드가 수집하려는 인덱스의 데이터 노드에 고르게 분산되어 있는지 확인합니다.
  • 샤드가 고르게 분산되었는지 확인하는 공식
인덱스의 샤드 수 = 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가 커지면 트랜스로그를 완료하는 데 걸리는 시간도 증가함. 샤드가 실패하면 트랜스로그가 더 크기 때문에 복구에 더 많은 시간이 걸림.

  1. 현재 플러시 작업통계 조회
curl -XPOST "<os-endpoint>/<index-name>/_stats/flush?pretty"
  1. 적절한 플러시 임계값 크기로 상향 설정
$ curl -XPUT "<os-endpoint>/<index-name>/_settings?pretty" -d "{"index":{"translog.flush_threshold_size" : "1024MB"}}"
  1. _stats API 작업을 다시 실행하면 플러시 활동이 변경되었는지 확인
curl -XPOST "<os-endpoint>/<index-name>/_stats/flush?pretty"
- 참고: 현재의 인덱스에 대해서만 index.translog.flush_threshold_size를 늘리는 것이 좋음. 결과를 확인한 후, 변경 사항을 인덱스 템플릿에 적용해보는 것 권장
728x90

'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