클러스터 설정 API
클러스터 설정 API (Cluster Settings API)
클러스터 전체에 적용되는 설정을 조회하거나 수정하고 싶으시죠? 클러스터 설정 API가 OpenSearch 클러스터의 모든 노드에 적용되는 클러스터 차원의 설정을 검색하거나 수정해요. 이 API로 업데이트한 설정은 opensearch.yml 설정 파일에 정의된 것보다 우선해요.
출처: 문서
본문
1.0에서 도입
클러스터 설정 API는 OpenSearch 클러스터의 모든 노드에 적용되는 클러스터 차원의 설정을 검색하거나 수정해요. 이 API를 통해 업데이트된 설정은 opensearch.yml 설정 파일에 정의된 것보다 우선해요.
클러스터 설정 API를 다음 용도로 사용해요.
- 개별 노드 구성 파일에 접근하지 않고 클러스터가 어떻게 구성됐는지 이해하기 위해 현재 클러스터 구성을 검색할 때
- 클러스터 재시작 없이 샤드 할당 설정이나 복구 속도 수정과 같은 클러스터 동작을 동적으로 조정할 때
- 클러스터의 모든 노드에서 일관되어야 하는 설정을 관리해 균일한 동작을 보장할 때
- 클러스터 재시작 후에도 유지되지 않는 transient 설정을 사용해 테스트나 문제 해결을 위해 설정을 일시적으로 변경할 때
이 API를 사용해 클러스터 차원 설정을 관리하는 것이 구성 파일을 수동으로 편집하는 것보다 선호되는데, 그 이유는 모든 노드에 걸친 일관성을 보장하고 재시작 없이 동적 업데이트를 허용하기 때문이에요.
클러스터 설정을 업데이트할 때 변경 사항이 영구적(persistent, 클러스터 재시작 후에도 유지)이어야 하는지, 일시적(transient, 재시작 후 소거)이어야 하는지 지정할 수 있어요. persistent/transient 설정, 설정 우선순위, 설정 재설정에 대한 자세한 내용은 Configuring OpenSearch를 참고하세요.
엔드포인트
GET /_cluster/settings
PUT /_cluster/settings
쿼리 파라미터
다음 표는 사용 가능한 쿼리 파라미터예요. 모든 쿼리 파라미터는 선택적이에요.
| Parameter | Data type | Description |
|---|---|---|
| cluster_manager_timeout | String | cluster manager 노드의 응답을 기다리는 시간이에요. 지원되는 시간 단위에 대한 자세한 내용은 Common parameters를 참고하세요. (기본값: 30s) |
| flat_settings | Boolean | 설정을 평평한 형태로 반환할지 여부예요. 특히 심하게 중첩된 설정에 대해 가독성이 좋아질 수 있어요. 예를 들어 "cluster": { "max_shards_per_node": 500 }의 평평한 형태는 "cluster.max_shards_per_node": "500"이에요. (기본값: false) |
| include_defaults | Boolean | GET 전용이에요. true면 로컬 노드의 기본 클러스터 설정을 반환해요. (기본값: false) |
| timeout | String | PUT 전용이에요. 지속 시간이에요. 단위는 nanos, micros, ms(밀리초), s(초), m(분), h(시간), d(일)이 될 수 있어요. 단위 없는 0과 미지정 값을 나타내는 -1도 받아요. (기본값: 30s) |
| master_timeout DEPRECATED | String | (2.0 이후 deprecated: 포용적인 언어를 위해 cluster_manager_timeout을 사용하세요.) 지속 시간이에요. 단위는 nanos, micros, ms(밀리초), s(초), m(분), h(시간), d(일)이 될 수 있어요. 단위 없는 0과 미지정 값을 나타내는 -1도 받아요. |
요청 본문 필드
GET 연산에는 요청 본문이 없어요. 다음 표는 PUT 연산의 요청 본문 필드를 나열해요.
| Field | Data type | Description |
|---|---|---|
| persistent | Object | 전체 클러스터 재시작 후에도 유지되는 설정이에요. 이 설정들은 클러스터 상태에 기록되며 명시적으로 변경될 때까지 유지돼요. |
| transient | Object | 다음 전체 클러스터 재시작까지만 적용되는 설정이에요. 테스트나 문제 해결 중 임시 구성 변경에 유용해요. |
persistent 또는 transient 객체 안에서 업데이트하려는 설정을 키-값 쌍으로 지정해요. 예를 들어:
{
"persistent": {
"cluster.max_shards_per_node": 500
}
}
모든 클러스터 설정이 클러스터 설정 API로 동적으로 업데이트될 수 있는 것은 아니에요. API를 통해 static 설정을 구성하려고 하면 "setting [cluster.some.setting], not dynamically updateable" 오류 메시지를 받게 돼요. static 설정은 opensearch.yml 파일에 구성해야 하며 노드 재시작이 필요해요.
사용 가능한 모든 클러스터 설정의 포괄적인 목록은 Configuring OpenSearch를 참고하세요.
예시: 현재 클러스터 설정 검색하기
기본값 없이 현재 클러스터 설정을 보려면 GET 요청을 보내요.
GET /_cluster/settings
예시 응답
응답은 명시적으로 구성된 persistent 및 transient 설정을 보여줘요. 빈 객체는 해당 유형의 설정이 설정되지 않았음을 나타내요.
{
"persistent": {
"cluster": {
"routing": {
"allocation": {
"load_awareness": {
"flat_skew": "2"
}
},
},
"max_voting_config_exclusions": "10",
"metadata": {
"key": "10s"
},
"auto_shrink_voting_configuration": "true",
"blocks": {
"create_index": "false",
"create_index.auto_release": "true"
},
"thread_pool": {
"generic": {
"max": "5"
}
},
"max_shards_per_node": "500",
"remote": {
"my_remote_cluster": {
"seeds": [
"127.0.0.1:9300"
]
},
"opensearch-cluster": {
"mode": "proxy"
},
},
"no_cluster_manager_block": "write"
},
"indices": {
"mapping": {
"max_in_flight_updates": "10"
}
},
"plugins": {
"ml_commons": {
"only_run_on_ml_node": "false",
"mcp_server_enabled": "true",
"native_memory_threshold": "99"
}
},
"search_backpressure": {
"mode": "monitor_only"
},
"action": {
"auto_create_index": "true"
},
"wlm": {
"workload_group": {
"mode": "disabled",
"duress_streak": "10"
}
},
"admission_control": {
"cluster": {
"admin": {
"cpu_usage": {
"limit": "4"
}
}
}
},
"script": {
"context": {
"field": {
"max_compilations_rate": "75/5m",
"cache_expire": "0ms",
"cache_max_size": "100"
},
"search": {
"max_compilations_rate": "75/5m",
"cache_expire": "0ms",
"cache_max_size": "100"
},
"ingest": {
"max_compilations_rate": "75/5m",
"cache_expire": "0ms",
"cache_max_size": "100"
}
}
}
},
"transient": {
"cluster": {
"max_shards_per_node": "1000"
}
}
}
예시: 기본 설정 포함하기
기본 설정을 포함해 모든 클러스터 설정을 검색하려면 include_defaults 파라미터를 사용해요.
GET /_cluster/settings?include_defaults=true
예시 응답
응답에 모든 기본 클러스터 설정을 포함하는 defaults 객체가 포함돼요(간결함을 위해 잘렸어요). 이는 변경하기 전에 설정 이름과 기본값을 파악하는 데 유용해요.
{
"persistent" : {
},
"transient" : {
},
"defaults" : {
"task_resource_tracking" : {
"enabled" : "true"
},
"cluster" : {
"metadata" : {
"perf_analyzer" : {
"collectors" : {
"mode" : "0"
},
"state" : "0",
"config" : {
"overrides" : ""
},
"pa_node_stats_setting" : "1"
}
},
"no_master_block" : "metadata_write",
"persistent_tasks" : {
"allocation" : {
"enable" : "all",
"recheck_interval" : "30s"
}
},
"initial_cluster_manager_nodes" : [
"opensearch-node1"
]
}
}
}
예시: flat settings 형식 사용하기
중첩된 설정의 가독성을 높이는 평평한 형식으로 설정을 반환하려면 flat_settings 파라미터를 사용해요.
GET /_cluster/settings?flat_settings=true
예시 응답
{
"persistent": {
"action.auto_create_index" : "true",
"admission_control.cluster.admin.cpu_usage.limit" : "4",
"cluster.auto_shrink_voting_configuration" : "true",
"cluster.blocks.create_index" : "false",
"cluster.blocks.create_index.auto_release" : "true",
"cluster.max_shards_per_node" : "500",
"cluster.max_voting_config_exclusions" : "10",
"cluster.metadata.key" : "10s",
"cluster.no_cluster_manager_block" : "write",
"cluster.remote.my_remote_cluster.seeds" : [
"127.0.0.1:9300"
],
"cluster.remote.opensearch-cluster.mode" : "proxy",
"cluster.routing.allocation.load_awareness.flat_skew" : "2",
"cluster.thread_pool.generic.max" : "5",
"indices.mapping.max_in_flight_updates" : "10",
"plugins.ml_commons.mcp_server_enabled" : "true",
"plugins.ml_commons.native_memory_threshold" : "99",
"plugins.ml_commons.only_run_on_ml_node" : "false",
"script.context.field.cache_expire" : "0ms",
"script.context.field.cache_max_size" : "100",
"script.context.field.max_compilations_rate" : "75/5m",
"script.context.ingest.cache_expire" : "0ms",
"script.context.ingest.cache_max_size" : "100",
"script.context.ingest.max_compilations_rate" : "75/5m",
"script.context.search.cache_expire" : "0ms",
"script.context.search.cache_max_size" : "100",
"script.context.search.max_compilations_rate" : "75/5m",
"search_backpressure.mode" : "monitor_only",
"wlm.workload_group.duress_streak" : "10",
"wlm.workload_group.mode" : "disabled"
},
"transient": {
"cluster.max_shards_per_node" : "1000"
}
}
예시: persistent 설정 업데이트하기
클러스터 재시작 후에도 유지되는 설정을 업데이트하려면 persistent 객체에 포함해요.
PUT /_cluster/settings
{
"persistent": {
"cluster.max_shards_per_node": 500
}
}
예시 응답
acknowledged 필드는 설정이 성공적으로 업데이트됐음을 나타내요. 응답에 업데이트된 설정이 포함돼요.
{
"acknowledged" : true,
"persistent" : {
"cluster" : {
"max_shards_per_node" : "500"
}
},
"transient" : {
}
}
예시: transient 설정 업데이트하기
설정을 일시적으로(다음 전체 클러스터 재시작까지) 업데이트하려면 transient 객체에 포함해요.
PUT /_cluster/settings
{
"transient": {
"indices.recovery.max_bytes_per_sec": "20mb"
}
}
예시 응답
acknowledged 필드는 설정이 성공적으로 업데이트됐음을 나타내요. 응답에 업데이트된 설정이 포함돼요.
{
"acknowledged" : true,
"persistent" : {
},
"transient" : {
"indices" : {
"recovery" : {
"max_bytes_per_sec" : "20mb"
}
}
}
}
예시: 설정 재설정하기
설정을 기본값으로 재설정하려면 null을 할당해요.
PUT /_cluster/settings
{
"transient": {
"indices.recovery.max_bytes_per_sec": null
}
}
예시 응답
{
"acknowledged" : true,
"persistent" : {
},
"transient" : {
}
}
예시: 와일드카드로 여러 설정 재설정하기
여러 관련 설정을 한 번에 재설정하려면 와일드카드 패턴을 사용해요.
PUT /_cluster/settings
{
"persistent": {
"indices.recovery.*": null
}
}
예시 응답
설정이 재설정되면 응답에 더 이상 나타나지 않아요. 이제 설정은 우선순위 순서의 다음 값을 사용해요.
{
"acknowledged" : true,
"persistent" : {
},
"transient" : {
}
}
응답 필드
다음 표는 응답 필드를 나열해요.
| Field | Data type | Description |
|---|---|---|
| acknowledged | Boolean | 설정 업데이트가 클러스터에 성공적으로 적용됐는지 여부를 나타내요. PUT 응답에만 존재해요. |
| persistent | Object | 명시적으로 구성된 모든 persistent 클러스터 설정을 포함해요. 이 객체의 설정은 전체 클러스터 재시작 후에도 유지돼요. |
| transient | Object | 명시적으로 구성된 모든 transient 클러스터 설정을 포함해요. 이 객체의 설정은 전체 클러스터 재시작 후 소거돼요. |
| defaults | Object | 기본값과 함께 모든 기본 클러스터 설정을 포함해요. GET 요청에서 include_defaults 파라미터가 true로 설정된 경우에만 존재해요. |
보안
Security 플러그인을 사용한다면 적절한 권한이 있는지 확인해야 해요: cluster:admin/settings/update.
관련 문서
- transient 설정, persistent 설정, 설정 우선순위에 대한 자세한 내용은 Configuring OpenSearch를 참고하세요.
더 알아보기 (Learn more)
- static 설정은 재시작 없이 변경할 수 없고
opensearch.yml에서 수정해야 해요. flat_settings=true로 중첩 설정의 가독성을 높이고,include_defaults=true로 기본값을 함께 볼 수 있어요.