개발/Elasticsearch

Elasticsearch OS 환경 설정

개발 호사가 2023. 4. 1. 10:03

Elasticsearch 시스템 설정의 이유

Elasitcsearch나 Solr같은 검색엔진의 경우 OS 리소스를 적극적으로 활용하면서 성능을 최대로 올립니다. Elasticsearch의 코어인 Lucene은 색인 할 때 데이터 저장을 세그먼트 파일 단위로 하게 됩니다. 색인 데이터가 많아지게 되면 동시에 Read 해야하는 파일의 갯수가 매우 많아집니다. 이렇게 되면 디스크에서 File IO에 비용이 많이 들게 됩니다.

 

이를 피하기 위해서 OS 레벨에서 mmap을 사용하여 파일을 메모리에 로드해서 성능을 끌어 올립니다. mmap은 OS 파일의 물리적 메모리에 매핑하고 파일 접근을 메모리 접근으로 대체하는 기술입니다. 이를 통해 디스크에서 데이터를 읽어들이는 비용을 피하고, 메모리에서 데이터를 접근 할 수 있게 돼 빠른 데이터 엑세스가 가능합니다.

 

추가로 위와 같은 이유 때문에 Elasticsearch 자체적으로 network.host 세팅을 보고 Production 환경이라고 인식하게 되면 Exception을 발생 시켜 Elasticsearch가 구동 되지 않습니다.

 

시스템 설정

1. ulimit 설정

Linux ulimit (user limit)는 리눅스 시스템에서 사용자 프로세스가 사용할 수 있는 자원의 제한을 설정하는 명령어입니다. 이를 통해 사용자 프로세스의 자원 사용량을 제한하고, 시스템 전체의 안정성과 보안을 유지할 수 있습니다.

ES를 정상 실행 시키기 위해서는 os 상에서 nofile 을 65535이상으로 해주어야 합니다. Lucene의 경우 segment 단위로 파일이 저장되기 떄문에 열어야 하는 파일 개수도 매우 많습니다. 그래서 max number of open files 의 값을 최소 65535(2^16) 이상 으로 세팅해줍니다.

ulimit -n 65535 

 

2. swappiness 설정

Swap 메모리 설정입니다. Elasticsearch 사용중 JVM 힙메모리의 일부가 스왑메모리인 하드 디스크 영역으로 스왑되는 순간 엄청난 성능 저하가 일어나게 됩니다. 그래서 스왑은 되도록 꺼 주도록 합니다.

swapoff -a 를 통해 스왑메모리를 사용 안하도록 할 수 있고, vm.swappiness 값 조정을 통해 스왑메모리의 사용비율을 조절할수도 있습니다. vm.swappiness=1 은 평소에 스왑 사용을 안하다가 물리메모리가 가득 차면 시스템 오류 대신 스왑 메모리를 사용하는 옵션입니다.

Elasticsearch 단독 사용 시스템에서는 스왑을 꺼 주도록 하고 다른 애플리케이션과 함께 사용하는 서버에서는 스와핑 최소화를 해줍니다.

sudo sysctl vm.swappiness=1

 

3. Virtual memory mmap 설정

Elasticsearch는 mmapfs 을 기본적으로 사용하여 인덱스를 저장합니다.

mmap 는 보통 linux의 기본값은 65,530 입니다. 최대 값인 262,144값으로 변경 합니다.

sysctl -w vm . max_map_count = 262144

 

4.  nproc (max number of processes) 카운트

linux OS 기본 유저 nproc는 1024개 입니다.

적절하게 최대 스레드의 수를 올려줄 필요가 있습니다.

nproc를 최대로 올려줄 필요가 있습니다.

ulimit -u 4096

 

참조문서

https://www.elastic.co/guide/en/elasticsearch/reference/8.6/system-config.html

 

Important system configuration | Elasticsearch Guide [8.6] | Elastic

Important system configurationedit Ideally, Elasticsearch should run alone on a server and use all of the resources available to it. In order to do so, you need to configure your operating system to allow the user running Elasticsearch to access more resou

www.elastic.co

엘라스틱서치 실무가이드 책

반응형

'개발 > Elasticsearch' 카테고리의 다른 글

Elasticsearch IntelliJ 에서 디버깅 하는방법  (0) 2023.04.08