개발하는 두부

CentOS에서 Elasticsearch 운영 환경 설정하기

by 뚜부니

00. 실습 환경

  • CentOS 7.9
  • Elasticsearch 7.10.2
  • 서버 사양 : CPU 16 cores RAM 64GB Memory 2TB

Elasticsearch는 rpm을 사용해 설치하였으며, Elasticsearch는 Cluster 구축이 되어 있는 상태입니다.
여기서는 Elasticsearch 설치 및 Cluster 구축 관련 설명은 생략합니다.

01. 힙 메모리 설정 변경

/etc/elasticsearch/jvm.options 파일을 열고 현재 사용 중인 환경에 맞게 Xms, Xmx 설정을 변경합니다.

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms26g
-Xmx26g

힙 메모리를 설정할 때 아래 세 가지에 주의하여 설정해 주세요.

  1. Xms와 Xmx 수치는 동일하게 할당한다.
  2. 힙 크기는 최대 시스템 물리 메모리의 절반으로 설정한다.
  3. 힙 크기는 최대 30 ~ 31GB 수준을 넘기지 않는다.

Elasticsearch 공식 문서에서는 대부분의 시스템은 26GB가 안전하다고 되어 있어 26GB로 설정하였습니다. 참고로, 자바에는 힙 메모리를 좀 더 빠르고 효율적으로 사용할 수 있도록 Compressed Ordinary Object Pointers 기술이 적용되어 있으며, 일반적으로 힙 크기가 32GB를 넘기면 비활성화됩니다.

02. 메모리 스왑 기능 비활성화

/etc/elasticsearch/elasticsearch.yml 파일을 열고 주석되어 있는 아래 설정에 대해 주석 해제합니다.

bootstrap.memory_lock: true

bootstrap.memory_lock 설정은 노드 실행 시 시스템의 물리 메모리를 미리 할당받아 스왑 영역을 사용하지 않도록 방어하는 설정입니다. 메모리 부족으로 인해 디스크의 스왑 영역을 참조할 경우 심각한 성능 저하가 발생할 수 있기에 필수적으로 설정해주어야 합니다. bootstrap.memory_lock 설정을 하기 위해서는 추가적인 설정이 필요하며, 아래에서 이어 설명하도록 하겠습니다.

먼저, 리눅스의 시스템 수준에서 걸려 있는 제한들을 해제해야 합니다. /etc/security/limits.conf 파일을 다음과 같이 설정해 주세요.

elasticsearch - nofile 65535
elasticsearch - nproc 4096
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
  • elasticsearch : 엘라스틱서치를 실행하는 사용자 계정
  • nofile : 최대 파일 디스크립터 수(최대로 열 수 있는 파일 수). 샤드가 늘어남에 따라 파일 디스크립터 수가 증가하여 문제가 발생하기도 하므로 최소 65536으로 설정할 것을 권장.
  • nproc : 최대 프로세스 수
  • memlock : 메모리 내 주소 공간의 최대 크기. 여기서는 무제한으로 설정

그다음 /etc/systemd/system.conf 파일과 /etc/systemd/user.conf 파일의 DefaultLimitNOFILE 값을 변경합니다.

DefaultLimitNOFILE=65536

이제 서버를 재실행해줍니다.

그 다음 아래 명령어를 통해 최대 가상 메모리 개수를 변경합니다.

sudo sysctl -w vm.max_map_count=262144

그 다음 /etc/systemd/system/elasticsearch.service.d/elasticsearch.conf 파일을 열고 아래 설정을 추가합니다.

[Service]
LimitMEMLOCK=infinity
LimitNPROC=4096
LimitNOFILE=65536

설정이 적용될 수 있도록 아래 두 개의 명령어를 실행합니다.

sudo /bin/systemctl daemon-reload

sudo /bin/systemctl enable elasticsearch.service

설정은 ulimit -a 명령어를 통해 확인할 수 있습니다.


참고

블로그의 정보

개발하는 두부

뚜부니

활동하기