Amazon OpenSearch Service 클러스터에서 인덱싱 성능을 개선하려면 어떻게 해야 합니까?

4분 분량
0

Amazon OpenSearch Service에서 수집 처리량을 극대화할 수 있도록 인덱싱 작업을 최적화하고 싶습니다. 어떻게 해야 합니까?

해결 방법

샤드가 수집하려는 인덱스의 데이터 노드에 고르게 분산되어 있는지 확인합니다.

다음 공식을 사용하여 샤드가 고르게 분산되었는지 확인합니다.

인덱스의 샤드 수 = k*(데이터 노드 수). 여기서 k는 노드당 샤드 수

예를 들어 인덱스에 샤드 24개가 있고 데이터 노드가 8개인 경우, OpenSearch Service에서 각 노드에 샤드 3개를 할당합니다. 자세한 내용은 Amazon OpenSearch Service 시작하기: 얼마나 많은 샤드가 필요합니까?를 참조하세요.

refresh_interval을 60초 이상으로 늘림

문서를 검색할 수 있도록 OpenSearch Service 인덱스를 새로 고칩니다. 인덱스를 새로 고치려면 스레드 인덱싱에 사용한 것과 동일한 리소스가 필요합니다.

기본 새로 고침 간격은 1초입니다. 새로 고침 간격을 늘리면 데이터 노드가 API 호출 횟수를 줄입니다. 새로 고침 간격은 새로 고침 간격의 길이에 따라 더 짧거나 빠를 수 있습니다. 429 오류가 발생하지 않도록 하려면 새로 고침 간격을 높이는 것이 좋습니다.

참고: 기본 새로 고침 간격은 지난 30초 이내에 하나 이상의 검색 요청을 수신한 인덱스의 경우 1초입니다. 업데이트된 기본 간격에 대한 자세한 내용은 Elasticsearch 웹사이트에서 _refresh API version 7.x을 참조하세요.

복제본 수를 0으로 변경

큰 인덱싱 작업이 예상되는 경우 index.number_of_replicas 값을 ‘0’으로 설정합니다. 각 복제본은 인덱싱 프로세스를 복제합니다. 따라서 복제본을 비활성화하면 클러스터 성능이 개선됩니다. 큰 인덱싱 작업이 완료되면 복제된 인덱스를 다시 활성화합니다.

중요: 복제본이 비활성화되어 있는 동안 노드에 장애가 발생하면 데이터가 손실될 수 있습니다. 짧은 시간 동안 데이터 손실을 허용할 수 있는 경우에만 복제본을 비활성화합니다.

최적의 대량 요청 크기를 찾기 위한 실험

5~15MiB의 대량 요청 크기로 시작합니다. 그런 다음, 인덱싱 성능이 더 이상 개선되지 않을 때까지 요청 크기를 서서히 늘립니다. 자세한 내용은 Elasticsearch 웹사이트에서 대량 요청 사용 및 크기 조정을 참조하세요.

참고: 일부 인스턴스 유형은 대량 요청이 10MiB로 제한됩니다. 자세한 내용은 네트워크 제한을 참조하세요.

SSD 인스턴스 스토어 볼륨이 있는 인스턴스 유형(예: I3) 사용

I3 인스턴스는 고속 로컬 메모리 익스프레스(NVMe) 스토리지를 제공합니다. I3 인스턴스는 범용 SSD(gp2) Amazon Elastic Block Store(Amazon EBS) 볼륨을 사용하는 인스턴스보다 뛰어난 수집 성능을 제공합니다. 자세한 내용은 페타바이트 규모의 Amazon OpenSearch Service를 참조하십시오.

응답 크기를 줄임

OpenSearch Service 응답의 크기를 줄이려면 filter_path 파라미터를 사용하여 불필요한 필드를 제외하세요. 실패한 요청을 식별하거나 다시 시도하는 데 필요한 필드는 필터링하지 마세요. 이러한 필드는 클라이언트에 따라 다를 수 있습니다.

다음 예시에서는 index-name, type-nametook 필드가 응답에서 제외됩니다.

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가 커지면 트랜스로그를 완료하는 데 걸리는 시간도 증가합니다. 샤드가 실패하면 트랜스로그가 더 크기 때문에 복구에 더 많은 시간이 걸립니다.

index.translog.flush_threshold_size를 늘리기 전에 다음 API 작업을 호출하여 현재 플러시 작업 통계를 가져옵니다.

curl -XPOST "os-endpoint/index-name/_stats/flush?pretty"

os-endpointindex-name을 해당 변수로 바꿉니다.

출력에서 플러시 수와 총 시간을 기록해 둡니다. 다음 예제 출력에서는 플러시가 124개로, 17,690ms가 걸린 것으로 나타났습니다.

{
     "flush": {
          "total": 124,
          "total_time_in_millis": 17690
     }
}

플러시 임계값 크기를 늘리려면 다음 API 작업을 호출합니다.

$ curl -XPUT "os-endpoint/index-name/_settings?pretty" -d "{"index":{"translog.flush_threshold_size" : "1024MB"}}"

이 예제에서는 플러시 임계값 크기가 1,024MB로 설정되어 있으며, 이는 32GB 이상의 메모리가 있는 인스턴스에 적합합니다.

참고: OpenSearch Service 도메인에 적절한 임계값 크기를 선택하세요.

_stats API 작업을 다시 실행하면 플러시 활동이 변경되었는지 확인하세요.

$ curl _XGET "os-endpoint/index-name/_stats/flush?pretty"

참고: 현재의 인덱스에 대해서만 index.translog.flush_threshold_size를 늘리는 것이 좋습니다. 결과를 확인한 후, 변경 사항을 인덱스 템플릿에 적용하세요.


관련 정보

Amazon OpenSearch Service 모범 사례

AWS 공식
AWS 공식업데이트됨 3년 전
댓글 없음