본문 바로가기

elasticsearch

elasticsearch module (엘라스틱서치 모듈에 대해서)

반응형

* 원문링크

엘라스틱서치에는 다양한 기능을 담당하는 모듈들이 있고 각 모듈은 아래와 같은 설정이 있다.

 

- static : 이 설정은 node level 에서 설정이 되야 하는 부분으로 elasticsearch.yml 파일에서 설정하거나 환경변수 또는 노드를 시작할 때 command line 옵션으로 설정도 가능하다. 이 옵션은 클러스터에 묶여 있는 모든 노드에 설정이 되어야 한다.

- dynamic : 이 설정은 실행중인 클러스터에 동적으로 업데이트가 가능한 것으로 cluster-update-settings API 로 변경 간능하다.

 

모듈들의 종류는 다양하게 있으나 그 리스트들은 위 원문 링크를 통해서 확인하기 바라며, 모듈 중 이번에 확인할 모듈은 Thread Pool 이다.

Thread Pool

노드는 쓰레드 메모리 소비의 관리를 향상시키기 위환 몇 개의 쓰레드 풀을 가지고 있다. 이 풀들은 요청들을 실패시키는 대신 연기 시키기 위한 큐들을 가지고 있다. 아래와 같은 쓰레드 풀에 중요한 것들은 아래와 같다.

 

* generic : 일반 용도(예: background node discovery) 쓰레드 풀 타입은 cached 다.

* index : 인덱싱/삭제 용도. available_processors 사이즈의 fixed 타입, queue_size 는 200이다.

* search : count/search 용도. fixed 타입, int((# of available_processors*3)/2)+1 사이즈, queue_size 는 1000이다.

* suggest : suggest 용도. fixed 타입, available_processors 사이즈, queue_size는 1000

* get : get 용도. fixed 타입, available_processors 사이즈, queue_size는 1000

* bulk : bulk 용도. fixed 타입, available_processors 사이즈, queue_size는 50

* percolate : 거르는(?) 용도. fixed 타입, available_processors 사이즈, queue_size 는 1000

* snapshot : 스냅샷/복원 용도. scaling 타입, keep-alive 5m이고 min(5, (available_processors)/2) 사이즈

* warmer : segment warm-up 용도. scaling 타입 keep-alive 5m 이고 min(5, (available_processors)/2) 사이즈

* refresth : refresh 용도. scaling 타입 keep-alive 5m min(10, (available_processors)/2) 사이즈

* listener : 주로 java client 실행용으로 listener threaded 가 true 로 설정 되었을 때 사용되는 용도. scaling 타입, 기본 사이즈는 min(10, (available_processors)/2)

 

특정 쓰레드 풀의 변경은 특정 타입 파라미터를 셋팅함으로써 가능하고 아래는 index 쓰레드 풀에 더 많은 쓰레드를 설정한 예다.

threadpool:

index:

size: 30

 

근데 위 설정으로 설정은 안하고 threadpool.index.size : 30 이렇게 하고 있다.

쓰레드 풀 설정은 Cluster Update Settings 를 이용해서 동적으로 업데이트 가능하다.

 

 

그럼 위에서 말한 쓰레드 풀의 타입은 뭘까?

쓰레드 풀 타입

cached

cached 쓰레드 풀은 제한이 없는 쓰레드 풀로써 지연되는 요청이 있을 경우 제한 없이 쓰레드를 만든다. 이 쓰레드 풀은 blocking 이나 being rejected 로 부터 들어오는 요청을 막는데 사용된다. 미사용되는 쓰레드는 keep alive 시간(기본 5분) 이후 종료 되다. cached 쓰레드 풀은 generic에서 사용된다.

keep_alive 파라미터는 유휴상태의 쓰레드가 얼마나 오랫동안  유지되는에 대한 값이다. ( threadpool.generic.keep_alive : 2m )

fixed

요청을 처리하기 위한 고정된 쓰레드 사이즈를 처리하는 쓰레드 풀로써 처리되지 않는 쓰레드를  위한 큐도 포함하고 있다.

size 파라미터는 쓰레드의 수로써 기본적으로 core 의 5배 정도로 설정 되어 있다.

queue_size 는 실행할 수 있는 쓰레드가 없을 때 연기 되는 요청의 queue 사이즈 값이다.  기본이 -1 ( 무제한)로 설정되어 있다. 큐가 꽉 찼을 경우 들어오는 요청은 처리가 안 된다. ( threadpool.index.size: 30, threadpool.index.queue_size : 1000)

scaling

동적인 쓰레드처리가 가능한 쓰레드 풀로써, 부하에 비례하여 변경이 되며, 1과 size 값 사이에서 변경 된다.

keep_alive 파라미터는 유휴상태의 쓰레드가 얼마나 오랫동안  유지되는에 대한 값이다. ( threadpool.warmer.size: 8, threadpool.warmer.keep_alive: 2m)

processors setting

processors 의 수는 자동으로 감지되어 설정이 되고, thread pool 도 이 값에 의해 자동으로 설정 된다. 가끔, 프로세서 수가 잘못 감지 될 수도 있는데 이럴 경우 processors 값을 설정함으로써 명확하게 설정 할 수 있다. 자동으로 감지된 프로세서의 수는 nodes info API 의 os flag 를 사용하여 확인 가능하다.

반응형