b

엘라스틱서치 Cluster update settings API 에서 사용 불가능 한 경우 본문

카테고리 없음

엘라스틱서치 Cluster update settings API 에서 사용 불가능 한 경우

dev.bistro 2019. 12. 11. 20:25

문서 :  https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

 

Cluster update settings API | Elasticsearch Reference [7.5] | Elastic

Updates cluster-wide settings. With specifications in the request body, this API call can update cluster settings. Updates to settings can be persistent, meaning they apply across restarts, or transient, where they don’t survive a full cluster restart. You

www.elastic.co

 

엘라스틱 클러스터의 설정을 모든 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)

 

 

 

Comments