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이에요.