728x90
엘라스틱서치는 부트스트랩 과정이 있어, 노드를 최초 실행 시 부트스트랩 체크 과정을 거친다.
부트스트랩 과정이 필요한 이유
- 엘라스틱서치를 처음 운영할 때는 데이터가 적어 최적화 여부 차이가 크지 않지만, 데이터가 누적되고 클러스터가 커질수록 다양한 문제를 경험하게 된다.
- 과거에는 로그를 출력하는 방식으로 잘못된 설정 정보나, 리소스 할당 문제를 알려주었으나, 현재는 부트스트랩 체크 과정을 통해 이를 확인할 수 있다.
- 해당 설정이 잘못될 경우 엘라스틱서치를 강제 종료해 필수 설정이 완료되어야만 엘라스틱서치가 실행되도록 강제한다.
- 간단한 테스트를 위해 재설치시에도 해당 과정을 실행해야 하는 문제를 해결하기 위해 DEV/운영 모드를 지원한다.
개발 모드
vi ./elasticsearch.yml
network.host: localhost
- 엘라스틱서치 노드를 실행할 때 IP 주소가 루프백으로 설정된 경우 개발모드로 실행된다.
- 개발 모드로 실행 시 부트스트랩 체크 과정이 무시된다.
- 개발 모드 시, 로컬에서 동작하기 때문에 다른 노드와 클러스터 구성이 불가능하다
운영 모드
- 운영 모드는 엘라스틱서치 부트스트랩 체크 과정을 필수로 거친다.
- 다른 노드와 클러스터 구성이 가능하다.
- 실제 서비스 적용하는 엘라스틱서치 노드가 1대라면, 엘라스틱서치가 개발 모드로 판단해 부트스트랩 과정을 무시한다.
- 1대라도 부트스트랩 체크 과정을 강제하려면, JVM 옵션으로 -Des.enforce.bootstrap.checks=true 설정이 필요하다.
부트스트랩 체크 과정 따라가기
1) Heap 크기 체크
- JVM의 기본 힙 크기와 최대 힙 크기가 같은지 검사한다.
2) 파일 디스크립터 체크
- 엘라스틱서치가 사용할 파일 디스크립터가 충분히 존재하는지 검사한다.
3) 메모리 락 체크
- 엘라스틱서치에 할당된 힙 메모리의 Memory Lock 여부를 체크한다.
- GC가 수행될 때, 힙을 구성하는 메모리 페이지 조각 중 하나라도 디스크에 있다면 메모리로 스왑 인 작업을 해야하고 이는 JVM 애플리케이션에 큰 부담을 준다. 엘라스틱서치는 힙에 할당된 메모리는 스와핑 대상이 되지 않도록 Memory Lock을 이용해 잠그도록 안내하고 있다.
4) 최대 스레드 수 체크
- 애플리케이션이 생성할 수 있는 최대 스레드 수를 검사
5) 최대 가상 메모리 크기 체크
- 리눅스가 생성하는 애플리케이션의 가상 메모리 크기가 무제한으로 설정되어 있는지 검사한다.
- mmap은 커널 레벨의 메모리를 직접 할당 받아 애플리케이션의 가상 메모리 주소에 매핑해서 동작하기 때문에 가상 메모리에 크기가 없는게 유리, 엘라스틱서치는 이를 무제한으로 설정하도록 안내한다
6) 최대 파일 크기 체크
- 리눅스가 생성한 애플리케이션이 만들 수 있는 최대 파일 크기가 무제한으로 설정돼 있는지 검사한다.
- 엘라스틱서치의 최대 파일 크기를 설정할 경우 데이터가 유실되거나, 엘라스틱서치가 이상 동작할 수 있어, 최대 파일 크기를 무제한 설정하도록 권장한다.
7) mmap 카운트 체크
- 리눅스가 생성한 애플리케이션이 가질수 있는 최대 mmap 카운트를 검사한다.
8) 클라이언트 JVM 체크
- 엘라스틱서치가 Server JVM으로 실행됐는지 검사한다.
9) Serial Collector 사용 여부 체크
- 엘라스틱서치를 실행할 때 Serial GC를 사용하지 않도록 사용여부 검사한다(엘라스틱서치 같이 대용량 힙 메모리를 사용하는 애플리케이션은 절대 Serial GC를 사용해서는 안되기 때문)
10) 시스템 콜 필터 체크
- 엘라스틱서치를 실행했을때 시스템 콜 필터가 사용되고 있는지를 검사한다.
- 운영체제 특성상 시스템 콜 필터를 지원하지 않는 경우도 있기 때문에 elasticsearch.yml에 bootstrap.system.call_filter 옵션을 false로 설정해 시스템콜 필터가 설치돼 있는지 확인하는 과정을 무시할 수 있다.
11) onError, onOutOfMemoryError 체크
- 시스템콜 필터를 사용할 경우 onError, onOutOfMemoryError 옵션이 설정돼 있는지 여부를 검사한다.
- JVM의 -XX:OnError , -XX:OnOutOfMemoryError 옵션은 시스템 콜 옵션이 설정돼 있으면 사용이 불가능하다.
12)Early-access 체크
- 엘라스틱서치가 테스트 버전의 JVM을 사용하고 있는지 여부를 검사한다
13) G1GC 체크
- 엘라스틱서치를 실행할 때 G1GC를 사용할 경우 해당 JVM이 JDK 8u40 이후 버전인지 검사한다.
14) AllPermission 체크
- java.security.AllPermission이 적용되었는지 여부를 검사한다.
728x90
'Elastic Search' 카테고리의 다른 글
| Ch12. 안정적인 클러스터 운영 노하우 - 클러스터 관리 API (0) | 2025.10.21 |
|---|---|
| Ch12. 안정적인 클러스터 운영 노하우 - 마스터 노드와 데이터 노드 분리 (0) | 2025.10.21 |
| Ch11. 장애 방지를 위한 실시간 모니터링 - Cat API를 이용해 콘솔에서 모니터링 하기 (0) | 2025.10.15 |
| Ch11. 장애 방지를 위한 실시간 모니터링 - 클러스터에 대한 실시간 모니터링 (0) | 2025.10.15 |
| Ch11. 장애 방지를 위한 실시간 모니터링 - 물리적인 클러스터 상태 정보 조회 (0) | 2025.10.15 |