일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- play framework
- 한빛미디어
- aws
- Logstash
- statestore
- Slick
- kafkastream
- schema registry
- spring-cloud-stream
- spring-kafka
- RabbitMQ
- confluent
- 플레이 프레임워크
- scala
- enablekafkastreams
- avo
- kafka interactive query
- kafkastreams
- coursera
- gradle
- Elk
- 카프카
- scala 2.10
- kafka streams
- reactive
- Elasticsearch
- spring-batch
- Spring
- Kafka
- springboot
- Today
- Total
b
엘라스틱서치 Cluster update settings API 에서 사용 불가능 한 경우 본문
문서 : https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html
엘라스틱 클러스터의 설정을 모든 node의 elasticsearch.yml을 변경 하는 방법도 있지만, 몇몇 케이스에서느 좀 더 쉬게 변경 하는 방법이 있다. 위의 문서처럼 `PUT /_cluster/settings` 를 이용하는 방법이다.
크게 transient update 와 persistent update 방법이 있는데 우선순위느 transient > persistent > elasticsearch.yml 이다.
그리고 transient 는 clusster를 재시작할 때 reset 이 되는 반면 persistent 는 영구적이다. 즉 persistent 를 쓸수있다면 이게 모든 node의 yml 을 수정하는 것보다는 편하다.
하지만 모든 경우에 persistent update 를 이용 할 수 있는 것은 아니다.
PUT /_cluster/settings
{
"persistent" : {
"thread_pool.write.queue_size" : 500
}
}
--> 결과
{
"error": {
"root_cause": [
{
"type": "remote_transport_exception",
"reason": "[hostname01][IPv4:9300][cluster:admin/settings/update]"
}
],
"type": "illegal_argument_exception",
"reason": "persistent setting [thread_pool.write.queue_size], not dynamically updateable"
},
"status": 400
}
처럼 옵션에 따라 적용 불가능한 경우도 있다. https://github.com/elastic/elasticsearch/blob/v7.5.0/server/src/main/java/org/elasticsearch/common/settings/Setting.java#L104 처럼 Dynamic Propety 만 가능한것으로 보인다. 실제 체크 하는 부분에서는 Final 이 아니면 Exception 을 발생시킨다.
https://github.com/elastic/elasticsearch/blob/v7.5.0/server/src/main/java/org/elasticsearch/common/settings/AbstractScopedSettings.java#L778
위에서 테스트를 한 search thread pool 은
- builders.put(Names.WRITE, new FixedExecutorBuilder(settings, Names.WRITE, availableProcessors, 200)); - 에서 시작된다. ExecutorService newFixed를 이용해서 고정 size의 pool을 생성하는 부분은 찾았지만.. Property.Final 으로 셋팅하는 곳은 찾지 못했다.이게 없으면 Property.Dynamic & else 영역이 있을 것 같았는데 ... 좀 더 봐야 할 것 같다. (TODO)