Intro::
엘라스틱서치 공식문서 정리본입니다.
Circuit breaker settings
Elasticsearch에는 작업으로 인해 메모리 부족 오류가 발생하는 것을 방지하는 데 사용되는 여러 circuit breaker가 포함되어 있습니다. 각 breaker는 사용할 수 있는 메모리 양에 대한 제한을 지정합니다. 또한 모든 breaker에서 사용할 수 있는 총 메모리 양을 지정하는 상위 수준 breaker가 있습니다.
달리 명시된 경우를 제외하고 이러한 설정은 클러스터 업데이트 설정 API를 사용하여 라이브 클러스터에서 동적으로 업데이트할 수 있습니다.
Parent circuit breaker
상위 수준 breaker는 다음 설정으로 구성할 수 있습니다.
indices.breaker.total.use_real_memory
(Static) 부모 breaker가 실제 메모리 사용량을 고려할지(true), 아니면 자식 차단기가 예약한 양만 고려할지(false)를 결정합니다. 기본값은 true입니다.
indices.breaker.total.limit
(Dynamic) 전체 부모 breaker의 시작 제한. indices.breaker.total.use_real_memory가 false인 경우 기본값은 JVM 힙의 70%입니다. indices.breaker.total.use_real_memory가 true인 경우 기본값은 JVM 힙의 95%입니다.
Field data circuit breaker
필드 데이터 circuit breaker는 필드를 필드 데이터 캐시에 로드하는 데 필요한 힙 메모리를 추정합니다. 필드를 로드하면 캐시가 미리 정의된 메모리 제한을 초과하게 되면 회로 차단기는 작업을 중지하고 오류를 반환합니다.
indices.breaker.fielddata.limit
(Dynamic) 필드 데이터 차단기의 제한. 기본값은 JVM 힙의 40%입니다.
indices.breaker.fielddata.overhead
(Dynamic) 최종 추정치를 결정하기 위해 모든 필드 데이터 추정치에 곱하는 상수입니다. 기본값은 1.03입니다.
Request circuit breaker
request circuit breaker를 사용하면 요청별 데이터 구조(예: 요청 중 집계 계산에 사용되는 메모리)가 특정 메모리 양을 초과하지 않도록 Elasticsearch에서 차단할 수 있습니다.
indices.breaker.request.limit
(Dynamic) request circuit breaker 제한, 기본값은 JVM 힙의 60%입니다.
indices.breaker.request.overhead
(Dynamic) 최종 추정치를 결정하기 위해 모든 요청 추정치에 곱하는 상수입니다. 기본값은 1입니다.
In flight requests circuit breaker
in flight requests circuit breaker를 사용하면 Elasticsearch가 전송 또는 HTTP 수준에서 현재 활성화된 모든 수신 요청의 메모리 사용량이 노드에서 특정 메모리 양을 초과하지 않도록 제한할 수 있습니다. 메모리 사용량은 요청 자체의 콘텐츠 길이를 기준으로 합니다. 이 circuit breaker는 또한 메모리가 원시 요청을 표현하는 데 필요할 뿐만 아니라 기본 오버헤드로 반영되는 구조화된 객체로서도 필요하다는 점을 고려합니다.
network.breaker.inflight_requests.limit
(Dynamic) in flight requests circuit breaker에 대한 제한, 기본값은 JVM 힙의 100%입니다. 즉, 상위 회로 차단기에 대해 구성된 제한에 구속됩니다.
network.breaker.inflight_requests.overhead
(Dynamic) 모든 in flight requests 추정치에 최종 추정치를 결정하기 위해 곱하는 상수입니다. 기본값은 2입니다.
Script compilation circuit breaker
이전의 메모리 기반 circuit breaker와는 약간 다른 스크립트 컴파일 circuit breaker는 일정 시간 내에 인라인 스크립트 컴파일 횟수를 제한합니다.
script.max_compilations_rate
(Dynamic) 컴파일할 수 있는 특정 간격 내의 고유한 동적 스크립트 수에 대한 제한입니다. 기본값은 150/5m로, 5분마다 150개입니다.
클러스터가 정기적으로 지정된 max_compilation_rate에 도달하는 경우 스크립트 캐시의 크기가 부족할 수 있으므로 Nodes Stats를 사용하여 최근 캐시 제거 횟수, script.cache_evictions_history 및 컴파일 script.compilations_history를 검사하세요. 최근 캐시 제거 또는 컴파일 횟수가 많으면 스크립트 캐시의 크기가 부족할 수 있으므로 script.cache.max_size 설정을 통해 스크립트 캐시 크기를 두 배로 늘리는 것이 좋습니다.
Regex circuit breaker
잘못 작성된 정규식은 클러스터 안정성과 성능을 저하시킬 수 있습니다. regex circuit breaker는 Painless 스크립트에서 정규식의 사용과 복잡성을 제한합니다.
script.painless.regex.enable
(Static) Painless 스크립트에서 정규식을 활성화합니다.
limited
(기본값)정규식을 사용하지만 script.painless.regex.limit-factor 클러스터 설정을 사용하여 복잡성을 제한합니다.
true
복잡도 제한 없이 정규식을 활성화합니다. regex circuit breaker를 비활성화합니다.
false
정규식을 비활성화합니다. 정규식이 포함된 모든 Painless 스크립트는 오류를 반환합니다.
script.painless.regex.limit-factor
(Static) Painless 스크립트에서 정규식이 고려할 수 있는 문자 수를 제한합니다. Elasticsearch는 설정 값에 스크립트 입력의 문자 길이를 곱하여 이 제한을 계산합니다.
예를 들어, 입력 foobarbaz의 문자 길이는 9입니다. script.painless.regex.limit-factor가 6인 경우, foobarbaz의 정규식은 최대 54(9 * 6)개의 문자를 고려할 수 있습니다. 표현식이 이 제한을 초과하면 regex circuit breaker를 트리거하고 오류를 반환합니다.
Elasticsearch는 script.painless.regex.enabled가 제한되어 있는 경우에만 이 제한을 적용합니다.
EQL circuit breaker
시퀀스 쿼리가 실행될 때, 쿼리를 처리하는 노드는 시퀀스 매칭을 구현하는 알고리즘에 필요한 일부 구조를 메모리에 보관해야 합니다. 대량의 데이터를 처리해야 하거나 사용자가 크기 쿼리 매개변수를 설정하여 많은 양의 일치하는 시퀀스를 요청하는 경우, 이러한 구조가 차지하는 메모리가 잠재적으로 JVM의 사용 가능한 메모리를 초과할 수 있습니다. 이 경우 노드가 다운되는 메모리 부족 예외가 발생할 수 있습니다.
이를 방지하기 위해 시퀀스 쿼리를 실행하는 동안 메모리 할당을 제한하는 특수 circuit breaker가 사용됩니다. breaker가 트리거되면 org.elasticsearch.common.breaker.CircuitBreakingException이 발생하고 설명이 포함된 오류 메시지가 사용자에게 반환됩니다.
이 circuit breaker는 다음 설정을 사용하여 구성할 수 있습니다:
breaker.eql_sequence.limit
(Dynamic) EQL 시퀀스 쿼리를 실행하는 동안 메모리 사용량을 제한하는 데 사용되는 circuit breaker 제한입니다. 이 값은 JVM 힙의 백분율로 정의됩니다. 기본값은 50%입니다. 상위 회로 차단기가 50%보다 작은 값으로 설정된 경우 이 설정은 대신 해당 값을 기본값으로 사용합니다.
breaker.eql_sequence.overhead
(Dynamic) 시퀀스 쿼리 메모리 추정치에 최종 추정치를 결정하기 위해 곱하는 상수입니다. 기본값은 1입니다.
breaker.eql_sequence.type
(Static) Circuit breaker 유형. 유효한 값은 다음과 같습니다:
memory
(기본값)breaker가 EQL 시퀀스 쿼리들을 위한 메모리 사용을 제한합니다.
noop
breaker를 해제합니다.
Machine learning circuit breaker
breaker.model_inference.limit
(Dynamic) 학습된 model circuit breaker에 대한 제한입니다. 이 값은 JVM 힙의 백분율로 정의됩니다. 기본값은 50%입니다. 상위 circuit breaker가 50%보다 작은 값으로 설정된 경우 이 설정은 대신 해당 값을 기본값으로 사용합니다.
breaker.model_inference.overhead
(Dynamic) 학습된 모든 모델 추정치에 최종 추정치를 결정하기 위해 곱하는 상수입니다. 회로 차단기 설정을 참조하십시오. 기본값은 1입니다.
breaker.model_inference.type
(Static) circuit breaker의 기본 유형입니다. 유효한 옵션은 noop과 memory 두 가지입니다. noop은 circuit breaker가 과도한 메모리 사용을 방지하기 위해 아무것도 하지 않는다는 의미이고, memory는 회로 차단기가 학습된 모델이 사용하는 메모리를 추적하여 잠재적으로 메모리 부족 오류를 차단하고 방지할 수 있다는 의미입니다. 기본값은 메모리입니다.
Loading Comments...