본문 바로가기
WIKI 기술 지식 베이스

Cluster settings for indexes

원문 보기 위키 갱신

출처: 문서

본문

인덱스 클러스터 설정

다음 클러스터 설정은 클러스터의 모든 인덱스에 적용돼요. 개별 인덱스에 적용되는 설정은 인덱스 설정을 참고하세요.

이 설정을 적용하는 방법을 알아보려면 OpenSearch 구성을 참고하세요.

정적 설정

OpenSearch는 인덱스에 대해 다음과 같은 정적 클러스터 설정을 지원해요:

  • indices.cache.cleanup_interval (Static, time unit): 지정한 간격마다 캐시에서 만료된 항목을 정리하는 반복 백그라운드 작업을 예약해요. 기본값은 1m(1분)이에요. 자세한 내용은 인덱스 요청 캐시를 참고하세요.

  • indices.requests.cache.size (Static, string): 힙 크기에 대한 백분율로 캐시 크기를 나타내요(예: 힙의 1%를 사용하려면 1%를 지정해요). 기본값은 1%예요. 자세한 내용은 인덱스 요청 캐시를 참고하세요.

  • indices.analysis.hunspell.dictionary.ignore_case (Static, Boolean): 모든 로케일에 대해 Hunspell 사전 매칭이 대소문자를 전역적으로 무시할지 여부를 제어해요. 활성화하면 사전 매칭이 대소문자를 구분하지 않아요. 이 설정은 여러 수준에서 구성할 수 있어요. 노드 수준(이 설정), indices.analysis.hunspell.dictionary.<locale>.ignore_case를 사용한 로케일별 설정(예: indices.analysis.hunspell.dictionary.en_US.ignore_case), 또는 각 사전 디렉터리 안의 사전별 settings.yml 파일이 그 대상이에요. 로케일별 설정과 사전별 설정이 전역 설정을 재정의해요. 기본값은 false예요.

  • indices.analysis.hunspell.dictionary.lazy (Static, Boolean): Hunspell 사전을 언제 로드할지 제어해요. true이면 사전 로드가 실제로 사전이 사용될 때까지 지연돼서 시작 시간은 줄어들지만 첫 사용 시 지연 시간이 늘어날 수 있어요. false이면 노드가 시작될 때 사전 디렉터리를 확인하고 모든 사전을 자동으로 로드해요. 기본값은 false예요.

  • indices.analysis.hunspell.dictionary.<locale>.strict_affix_parsing (Static, Boolean): Hunspell 접사(affix) 규칙 파일을 읽는 동안 발생한 오류가 예외를 일으킬지, 조용히 무시될지 제어해요. true로 설정하면 접사 파일의 파싱 오류가 예외를 던져서 사전 로드를 막아요. false로 설정하면 파싱 오류가 무시되고 사전은 계속 로드돼요. <locale>을 특정 로케일 코드로 바꾸면 로케일별로 이 설정을 구성할 수 있어요(예: indices.analysis.hunspell.dictionary.en_US.strict_affix_parsing). 기본값은 true예요.

  • indices.memory.index_buffer_size (Static, string): 노드의 모든 샤드에 걸쳐 인덱싱 작업에 할당되는 힙 메모리 양을 제어해요. 백분율(예: 10%)이나 바이트 크기 값(예: 512mb)을 받아요. 이 버퍼는 모든 샤드가 공유하며, 디스크에 쓰기 전에 인덱싱 작업을 일괄 처리하는 데 사용돼요. 기본값은 전체 힙의 10%예요.

  • indices.memory.min_index_buffer_size (Static, byte unit): indices.memory.index_buffer_size를 백분율로 지정한 경우 인덱싱 버퍼의 절대 최소 크기를 설정해요. 이 덕분에 힙 메모리가 적은 노드에서도 인덱싱 버퍼가 너무 작아지지 않아요. 기본값은 48mb예요.

  • indices.memory.max_index_buffer_size (Static, byte unit): indices.memory.index_buffer_size를 백분율로 지정한 경우 인덱싱 버퍼의 절대 최대 크기를 설정해요. 힙이 큰 노드에서 인덱싱 버퍼가 너무 많은 메모리를 소비하지 않도록 막아줘요. 기본값은 무제한(제한 없음)이에요.

  • indices.queries.cache.size (Static, string): 각 데이터 노드에서 쿼리 캐시(필터 캐시)에 할당되는 메모리 크기를 제어해요. 쿼리 캐시는 자주 사용되는 필터의 결과를 저장해서 검색 성능을 높여줘요. 백분율 값(예: 5%)이나 정확한 바이트 값(예: 512mb)을 받아요. 기본값은 힙 메모리의 10%예요.

  • indices.queries.cache.all_segments (Static, Boolean): 모든 세그먼트에 대해 쿼리를 캐시할지, 자주 접근되는 세그먼트에만 캐시할지 여부예요.

  • indices.queries.cache.count (Static, integer): 캐시할 쿼리의 최대 개수예요.

  • index.store.hybrid.nio.extensions (Static, list): 전문가용 설정이에요. 메모리 매핑 대신 NIO로 로드할 Lucene 파일 확장자예요. 기본값에는 segments_N, write.lock, si, cfe 같은 일반적인 확장자가 포함돼요.

  • indexing_pressure.memory.limit (Static, byte size): 과도한 인덱싱 워크로드 중에 메모리가 고갈되지 않도록 인덱싱 작업의 메모리 제한을 제어해요. 인덱싱 작업이 이 임계값을 초과하면 클러스터 안정성을 보호하기 위해 거부되거나 스로틀될 수 있어요. 백분율 값(예: 힙의 10%)이나 바이트 크기 값(예: 512mb)을 받아요. 기본값은 전체 힙 메모리의 10%예요.

  • indices.query.query_string.allowLeadingWildcard (Static, Boolean): query string 쿼리에서 선행 와일드카드를 허용할지 제어해요. 활성화하면 *term이나 ?term 같은 쿼리가 허용되지만, 인덱스의 모든 용어를 스캔해야 하기 때문에 성능에 영향을 줄 수 있어요. 비활성화하면 쿼리 성능을 높이기 위해 선행 와일드카드 쿼리가 거부돼요. 기본값은 true예요.

  • indices.query.query_string.analyze_wildcard (Static, Boolean): query string 쿼리의 와일드카드 용어가 구성된 애널라이저로 분석될지 제어해요. 활성화하면 와일드카드 쿼리가 분석(토큰화, 필터링)을 거치기 때문에 매칭이 개선될 수 있지만 성능에 영향을 줄 수 있어요. 비활성화하면 와일드카드 용어가 분석 없이 그대로 사용돼요. 기본값은 false예요.

  • indices.time_series_index.default_index_merge_policy (Static, string): 클러스터 전체의 time series 인덱스에 대한 기본 병합 정책을 설정해요. 이 설정은 time-series 데이터에 대해 Lucene 세그먼트가 병합되는 방식을 제어하며, 인덱싱 성능과 저장 효율에 큰 영향을 줄 수 있어요. 유효한 값으로는 default, tiered, log_byte_size가 있어요. 기본값은 default예요.

  • cluster.remote_store.translog.path.prefix (Static, string): remote store가 활성화된 클러스터에서 translog 데이터의 고정 경로 접두사를 제어해요. 이 설정은 cluster.remote_store.index.path.type 설정이 HASHED_PREFIX 또는 HASHED_INFIX일 때만 적용돼요. 기본값은 빈 문자열인 ""예요.

  • cluster.remote_store.segments.path.prefix (Static, string): remote store가 활성화된 클러스터에서 세그먼트 데이터의 고정 경로 접두사를 제어해요. 이 설정은 cluster.remote_store.index.path.type 설정이 HASHED_PREFIX 또는 HASHED_INFIX일 때만 적용돼요. 기본값은 빈 문자열인 ""예요.

  • cluster.snapshot.shard.path.prefix (Static, string): 스냅샷 샤드 수준 blob의 고정 경로 접두사를 제어해요. 이 설정은 리포지토리의 shard_path_type 설정이 HASHED_PREFIX 또는 HASHED_INFIX일 때만 적용돼요. 기본값은 빈 문자열인 ""예요.

동적 설정

OpenSearch는 인덱스에 대해 다음과 같은 동적 클러스터 설정을 지원해요:

  • action.auto_create_index (Dynamic, Boolean): 인덱스가 아직 존재하지 않으면 자동으로 인덱스를 생성해요. 설정되어 있는 인덱스 템플릿도 함께 적용해요. 기본값은 true예요.

  • action.destructive_requires_name (Dynamic, Boolean): true이면 인덱스를 삭제할 때 인덱스 이름을 반드시 지정해야 해요. 모든 인덱스를 한 번에 삭제하거나 와일드카드를 사용할 수 없어요. 기본값은 false예요.

  • cluster.default.index.refresh_interval (Dynamic, time unit): index.refresh_interval 설정이 제공되지 않을 때의 리프레시 간격을 설정해요. 클러스터의 모든 인덱스에 기본 리프레시 간격을 적용하고 searchIdle 설정을 지원하고 싶을 때 유용해요. cluster.minimum.index.refresh_interval 설정보다 낮게 간격을 설정할 수는 없어요.

  • cluster.minimum.index.refresh_interval (Dynamic, time unit): 최소 리프레시 간격을 설정하고 클러스터의 모든 인덱스에 적용해요. cluster.default.index.refresh_interval 설정은 이 설정의 값보다 높아야 해요. 인덱스 생성 시 index.refresh_interval 설정이 설정된 최솟값보다 낮으면 인덱스 생성이 실패해요.

  • cluster.indices.close.enable (Dynamic, Boolean): OpenSearch에서 열려 있는 인덱스를 닫을 수 있도록 해줘요. 기본값은 true예요.

  • indices.recovery.max_bytes_per_sec (Dynamic, string): 각 노드의 인바운드/아웃바운드 복구 트래픽 총량을 제한해요. 피어 복구와 스냅샷 복구에 모두 적용돼요. 기본값은 40mb예요. 복구 트래픽 값을 0mb 이하로 설정하면 속도 제한이 비활성화되어 복구 데이터가 가능한 최고 속도로 전송돼요.

  • indices.recovery.max_concurrent_file_chunks (Dynamic, integer): 각 복구 작업에서 병렬로 전송되는 파일 청크 수예요. 기본값은 2예요.

  • indices.recovery.max_concurrent_operations (Dynamic, integer): 각 복구에서 병렬로 전송되는 작업 수예요. 기본값은 1이에요.

  • indices.recovery.max_concurrent_remote_store_streams (Dynamic, integer): 원격 스토어 인덱스를 복구할 때 병렬로 열 수 있는 원격 리포지토리 스트림 수예요. 기본값은 20이에요.

  • indices.replication.max_bytes_per_sec (Dynamic, string): 각 노드의 인바운드/아웃바운드 복제 트래픽 총량을 제한해요. 설정 값에 값이 지정되지 않으면 기본값이 40 Mb인 indices.recovery.max_bytes_per_sec 설정이 사용돼요. 복제 트래픽 값을 0 Mb 이하로 설정하면 속도 제한이 비활성화되어 복제 데이터가 가능한 최고 속도로 전송돼요.

  • indices.fielddata.cache.size (Dynamic, string): 필드 데이터 캐시의 최대 크기예요. 절대값(예: 8GB)이나 노드 힙의 백분율(예: 50%)로 지정할 수 있어요. 이 설정은 동적이에요. 이 설정을 지정하지 않으면 최대 크기는 35%예요. 이 값은 indices.breaker.fielddata.limit보다 작아야 해요. 자세한 내용은 필드 데이터 서킷 브레이커를 참고하세요.

  • indices.query.bool.max_clause_count (Dynamic, integer): 동시에 검색할 수 있는 필드와 텀 곱의 최댓값을 정의해요. OpenSearch 2.16 이전에는 이 정적 설정을 적용하려면 클러스터 재시작이 필요했어요. 이제는 동적 설정이 되었지만, 기존 검색 스레드 풀은 처음에 이전 정적 값을 사용할 수 있어서 TooManyClauses 예외가 발생할 수 있어요. 새로 생성된 스레드 풀은 업데이트된 값을 사용해요. 기본값은 1024예요.

  • cluster.remote_store.index.path.type (Dynamic, string): 원격 스토어에 저장되는 데이터의 경로 전략이에요. 이 설정은 원격 스토어가 활성화된 클러스터에서만 유효해요. 이 설정은 다음 값을 지원해요:

    • fixed: 데이터를 <repository_base_path>/<index_uuid>/<shard_id>/ 경로 구조에 저장해요.
    • hashed_prefix: 데이터를 hash(<shard-data-idenitifer>)/<repository_base_path>/<index_uuid>/<shard_id>/ 경로 구조에 저장해요.
    • hashed_infix: 데이터를 <repository_base_path>/hash(<shard-data-idenitifer>)/<index_uuid>/<shard_id>/ 경로 구조에 저장해요. shard-data-idenitifer는 index_uuid, shard_id, 데이터의 종류(translog, segments), 데이터의 타입(data, metadata, lock_files)에 따라 결정돼요. 기본값은 fixed예요.
  • cluster.remote_store.index.path.hash_algorithm (Dynamic, string): cluster.remote_store.index.path.type이 hashed_prefix나 hashed_infix로 설정된 경우 해시 값을 도출하는 데 사용되는 해시 함수예요. 이 설정은 원격 스토어가 활성화된 클러스터에서만 유효해요. 이 설정은 다음 값을 지원해요:

    • fnv_1a_base64: FNV1a 해시 함수를 사용해 url-safe한 20비트 Base64 인코딩 해시 값을 생성해요.
    • fnv_1a_composite_1: FNV1a 해시 함수를 사용해 대부분의 원격 스토어 옵션에서 확장성이 좋은 커스텀 인코딩 해시 값을 생성해요. FNV1a 함수는 64비트 값을 생성해요. 커스텀 인코딩은 최상위 6비트로 URL-safe한 Base64 문자를 만들고, 그다음 14비트로 바이너리 문자열을 만들어요. 기본값은 fnv_1a_composite_1이에요.
  • cluster.remote_store.translog.transfer_timeout (Dynamic, time unit): 원격 스토어로 동기화하는 동안 translog와 체크포인트 파일을 업로드할 때의 타임아웃 값을 제어해요. 이 설정은 원격 스토어가 활성화된 클러스터에만 적용돼요. 기본값은 30s예요.

  • cluster.remote_store.index.segment_metadata.retention.max_count (Dynamic, integer): 원격 스토어의 세그먼트 리포지토리에 보관할 메타데이터 파일의 최소 개수를 제어해요. 1 미만의 값은 오래된 세그먼트 메타데이터 파일의 삭제를 비활성화해요. 기본값은 10이에요.

  • cluster.remote_store.segment.transfer_timeout (Dynamic, time unit): 리프레시 이후 모든 새 세그먼트가 원격 스토어에 업데이트되기를 기다리는 최대 시간을 제어해요. 지정된 시간 안에 업로드가 완료되지 않으면 SegmentUploadFailedException 오류가 발생해요. 기본값은 30m이고, 최소 제약은 10m이에요.

  • cluster.default_number_of_replicas (Dynamic, integer): 클러스터에 있는 인덱스의 기본 복제본 수를 제어해요. 인덱스 레벨의 index.number_of_replicas 설정이 구성되지 않으면 이 값을 기본값으로 사용해요. 기본값은 1이에요.

더 알아보기 (Learn more)