티스토리 뷰
Elasticsearch는 애플리케이션만 잘 설치한다고 끝나는 소프트웨어가 아닙니다. 실제 운영에서는 리눅스 OS 설정이 성능과 안정성에 큰 영향을 줍니다.
특히 메모리, swap, file descriptor, thread 수, virtual memory 같은 항목은 Elasticsearch가 정상적으로 동작하는 데 직접 연결됩니다. 그래서 설치 후 elasticsearch.yml만 보는 것이 아니라, 서버 OS 레벨 설정까지 같이 점검해야 합니다.
이번 글은 바로 그 검색 의도에 맞춰 정리합니다. 즉 “Elasticsearch 운영 전에 리눅스에서 무엇을 손봐야 하는지”, “왜 swap을 꺼야 하는지”, “vm.max_map_count는 왜 중요한지”, “nofile, nproc, memlock은 어떻게 보는지”를 한 번에 정리합니다.
- Elasticsearch 운영 전에 리눅스에서 무엇을 점검해야 할까?
- 메모리, CPU, 디스크는 어느 기준으로 보는가?
- swap, nofile, memlock, max_map_count는 왜 중요한가?
- 운영용 서버라면 어떤 값을 기본적으로 확인해야 할까?
Elasticsearch는 메모리를 많이 쓰고, 파일도 많이 열고, 스레드도 많이 사용하고, 디스크와 virtual memory 설정에도 영향을 받습니다.
즉 운영 전에 리눅스 OS 설정을 손보는 이유는,
- 성능을 더 잘 뽑기 위해서이기도 하지만
- 그보다 먼저 장애 없이 안정적으로 구동하기 위해서입니다.
아주 쉽게 말하면,
- Elasticsearch 설정 = 애플리케이션 설정
- 리눅스 OS 설정 = 서버 바닥 환경 설정
이라고 볼 수 있습니다.
Elasticsearch OS 튜닝은 성능을 올리는 옵션 모음이 아니라, 운영 서버가 무너지지 않게 만드는 기본 점검표입니다.
기본 흐름은 이렇게 보면 됩니다.
서버 자원 점검
↓
swap / swappiness 조정
↓
nofile / nproc / memlock 설정
↓
vm.max_map_count 설정
↓
디스크 구조 점검
예시 1. 메모리와 JVM Heap
Elasticsearch 운영에서 가장 중요한 자원 중 하나는 메모리입니다. 기존 운영 메모 기준으로는 권장 메모리 크기 16GB~64GB를 자주 언급하며, 일반적으로 서버 전체 메모리의 절반 정도를 Elasticsearch JVM Heap으로 할당하는 접근이 많이 쓰입니다.
다만 중요한 점은,
- 메모리가 많다고 무조건 Heap을 크게 주는 게 아니라
- JVM compressed oops 제약 때문에 32GB 이하 영역을 의식해서 잡는 것이 중요하다는 점입니다.
즉 단순히 “메모리 많을수록 좋다”가 아니라, Heap과 OS 여유 메모리를 균형 있게 보는 것이 중요합니다.
예시 2. Disable swapping
Elasticsearch는 JVM 위에서 동작하기 때문에 swap이 개입되면 성능과 안정성에 악영향을 줄 수 있습니다. 그래서 swap을 끄는 설정이 매우 자주 권장됩니다.
임시 비활성화:
sudo swapoff -a
영구 비활성화:
/etc/fstab에서 swap 관련 항목 주석 처리
추가로 swappiness도 함께 낮춰두는 경우가 많습니다.
sysctl -w vm.swappiness=1
영구 적용 예시:
# /etc/sysctl.conf
vm.swappiness=1
예시 3. File Descriptors
Elasticsearch는 동시에 매우 많은 파일을 열 수 있기 때문에 nofile 설정이 중요합니다. 기존 운영 기준으로는 65536 이상을 많이 권장합니다.
현재 값 확인:
ulimit -Hn
임시 설정:
ulimit -n 65536
영구 설정 예시:
# /etc/security/limits.conf
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536
예시 4. locked-in-memory
메모리 잠금 설정은 swap 회피와 연결됩니다. 운영 기준으로는 아래 설정을 함께 보는 경우가 많습니다.
# /etc/security/limits.conf
elasticsearch hard memlock unlimited
elasticsearch soft memlock unlimited
이 설정은 bootstrap.memory_lock: true와 함께 이해해야 합니다. 즉 Elasticsearch 설정만 바꾸는 게 아니라, OS도 같이 맞춰야 실제로 의미가 있습니다.
예시 5. Number of Threads
Elasticsearch는 작업 간 스레드를 많이 사용하기 때문에 nproc 설정도 중요합니다. 기존 운영 메모 기준으로는 4096 이상, 실무적으로는 65536 수준을 많이 봅니다.
현재 값 확인:
ulimit -Hu
임시 설정:
ulimit -u 65536
영구 설정 예시:
# /etc/security/limits.conf
elasticsearch hard nproc 65536
elasticsearch soft nproc 65536
예시 6. Virtual Memory
Elasticsearch는 mmapfs와 연결되는 virtual memory 설정 때문에 vm.max_map_count를 꼭 확인해야 하는 경우가 많습니다. 기본 OS 값이 낮으면 메모리 관련 오류나 실행 문제를 유발할 수 있습니다.
권장 확인 값:
sysctl vm.max_map_count
임시 설정:
sysctl -w vm.max_map_count=262144
영구 설정 예시:
# /etc/sysctl.conf
vm.max_map_count=262144
예시 7. CPU와 디스크
CPU는 단순 클럭보다도 멀티 코어가 주는 동시성이 Elasticsearch에 유리할 수 있습니다. 디스크는 특히 로그 수집기나 인덱싱 위주 환경에서 중요합니다.
기존 운영 메모 기준으로는,
- SSD 권장
- 로그/인덱싱-heavy 환경에서는 디스크 성능 중요
- RAID 구성 시 인덱싱 성능 관점에서 RAID0 언급
같은 방향이 기록돼 있었습니다.
노드당 디스크 용량 계산 관점도 기존 메모에 남아 있던 중요 포인트입니다.
(노드 하나 당 디스크 크기) =
(보관 기간 동안의 데이터 총량) * (index.number_of_replicas + 1) / (노드 수)
즉 저장소는 단순히 “크게”가 아니라, 보관 기간 / replica 수 / 노드 수를 함께 고려해야 합니다.
- swap 비활성화와 swappiness 조정은 Elasticsearch 운영에서 매우 자주 점검되는 항목입니다.
nofile,nproc,memlock,vm.max_map_count는 설치 후 실제로 누락되기 쉬운 OS 설정입니다.- Heap만 보는 것이 아니라 OS 여유 메모리와 파일 캐시까지 같이 봐야 안정적입니다.
- 로그/인덱싱 위주 환경이라면 CPU보다도 디스크 병목과 저장소 설계가 더 크게 체감될 수 있습니다.
- Elasticsearch OS 설정은 성능보다 먼저 안정성을 위한 기본 세팅입니다.
- vm.max_map_count, nofile, nproc, memlock은 운영 전 필수 점검 항목입니다.
- Heap 크기만 보지 말고 OS 메모리와 파일 캐시도 함께 봐야 합니다.
- 디스크는 로그 적재량과 replica 수를 고려해 설계해야 합니다.
- Q. Elasticsearch는 왜 swap을 끄라고 하나요?
→ JVM 기반으로 메모리를 많이 쓰기 때문에 swap이 개입되면 성능 저하와 불안정성을 유발할 수 있기 때문입니다. - Q. `vm.max_map_count`는 왜 중요한가요?
→ Elasticsearch의 메모리 매핑 사용과 연결되기 때문에 값이 낮으면 실행 문제나 메모리 관련 오류를 일으킬 수 있습니다. - Q. 서버 메모리가 크면 Heap도 무조건 크게 잡아야 하나요?
→ 아닙니다. JVM 특성과 OS 여유 메모리를 같이 봐야 하며, 단순히 크게 잡는 것이 항상 좋은 것은 아닙니다.
Elasticsearch 운영은 단순히 설치와 config 설정만으로 끝나지 않습니다.
- swap과 메모리 정책을 어떻게 잡을지
- 파일 수와 스레드 한도를 얼마나 확보할지
- virtual memory를 어떻게 맞출지
- 디스크 구조를 어떻게 설계할지
같은 리눅스 OS 레벨 설정이 함께 받쳐줘야 안정적인 운영이 가능합니다.
즉 Elasticsearch 리눅스 환경 설정은 선택 사항이 아니라, 운영 전 반드시 점검해야 할 기본 준비 작업이라고 보는 편이 맞습니다.
Elasticsearch를 안정적으로 운영하려면 elasticsearch.yml만 보는 것이 아니라, 리눅스 OS 자원 설정까지 함께 점검해야 합니다.
※ 이 글은 Elasticsearch 운영 전 리눅스 OS 환경 설정을 쉽게 정리한 가이드입니다. 실제 운영 환경에서는 배포판 차이, systemd 설정, 보안 정책, 커널 버전, 저장소 구조까지 함께 검토해야 합니다.
'IT > ElasticSearch' 카테고리의 다른 글
| ELK Stack이란? Elasticsearch·Logstash·Kibana 역할과 차이 쉽게 정리 (0) | 2022.09.08 |
|---|---|
| Elasticsearch 클러스터 구성 및 확인 방법 | 1대 서버 멀티 노드 예제로 쉽게 정리 (0) | 2022.08.03 |
| Elasticsearch config 설정 방법 | 운영에 필요한 elasticsearch.yml 핵심 옵션 정리 (0) | 2022.08.03 |
| Elasticsearch 클러스터란? 노드·샤드·레플리카 구조 한 번에 이해하기 (0) | 2022.08.03 |
