시작하며

Elasticsearch를 실제 운영 환경에서 안정적으로 운영하기 위해서는 노드 구성 계획, 하드웨어 산정, JVM 설정, 보안 설정 등 여러 가지를 고려해야 한다. 이 글에서는 실운영환경 구성 시 핵심적으로 검토해야 할 항목들을 정리한다.

실운영환경 구성

운영 노드 구성

마스터 노드와 데이터 노드 최소 구성

마스터 노드는 최소 3개를 구성해야 한다. 하나의 마스터 노드가 다운되었을 때 스플릿 브레인 없이 서비스가 지속되게 하기 위한 최소한의 구성이다.

데이터 노드는 replica를 활용하기 위해 최소 2대 이상 확보해야 한다.

미러링 정책 권장 여부

Elasticsearch는 미러링 정책을 권장하지 않는다. 데이터 손실에 대비한 replica, snapshot과 같은 소프트웨어적인 백업이 충분히 준비되어 있으므로, 미러링으로 인해 발생할 수 있는 성능 저하나 장애 요인이 더 큰 문제가 될 수 있다.

하드웨어 산정

Elasticsearch는 분산/병렬처리에 특화되어 있어 단일 노드의 하드웨어가 굉장히 좋을 필요는 없지만, 낮은 사양의 하드웨어는 병목이 될 수 있기 때문에 중간 정도의 하드웨어를 권장한다.

  • 메모리: Elasticsearch에서 가장 먼저 고갈되어 문제가 되는 리소스는 메모리다. 검색 성능을 위해 샤드 유지, 검색과 집계, 인덱싱, 코디네이팅 등 전반적인 영역에서 많은 메모리를 사용하게 된다. 가장 이상적인 메모리는 64GB다.
  • CPU: ES는 분산/병렬처리에 최적화된 제품이기 때문에 단일 코어의 성능보다는 다중 코어를 권장한다.
  • 디스크: SSD를 권장하며, HDD의 경우 RPM이 빠른 제품을 권장한다. 네트워크 저장소는 되도록 피하고 최대한 빠른 디스크 성능을 선택한다. RAID의 경우 RAID 0을 이용해 디스크 성능 향상을 도모하는 것은 좋지만 기타 미러링 정책은 선택하지 않는 편이 좋다.
  • 하드웨어 통일: 총 응답 시간은 가장 느린 노드가 코디네이팅 노드로 전달한 시간 + α 만큼이 될 확률이 높다. 따라서 하드웨어 성능은 되도록 통일하는 것이 중요하다. 혼합해 사용하는 경우에는 핫 노드, 웜 노드, 콜드 노드로 구분해 서로 다른 타입의 노드끼리는 동일 인덱스를 공유하지 않게 한다.
  • 스냅샷 처리: 모든 노드에서 접근 가능하도록 네트워크 공유 드라이브(NAS)를 구성한다. 스냅샷 생성 시 각 노드에서 스냅샷 저장소로 파일 복사가 직접 일어나기 때문이다.

JVM 설정 주의사항

운영 리눅스 JVM 설정 시 주의해야 할 3가지는 다음과 같다.

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

보안 기능 설정

과거에는 Elasticsearch의 보안 기능 활성화를 위해 별도 프록시 구성을 해야 했지만, 현재는 베이직 라이선스에서도 보안 기능을 사용할 수 있다.

config/elasticsearch.yml에 아래 설정을 추가하면 보안 기능이 활성화된다.

xpack.security.enabled: true

정리하며

Elasticsearch 실운영환경에서는 마스터 노드 3대 이상, 데이터 노드 2대 이상을 기본 구성으로 삼아야 한다. 하드웨어는 메모리 64GB 수준을 목표로 하고, SSD 디스크를 사용하며 가능하면 노드 간 사양을 통일한다. JVM 힙 설정 시 Xms와 Xmx를 동일하게 맞추고 최대 30~31GB를 초과하지 않도록 관리한다. 보안 기능은 xpack.security.enabled 설정을 통해 활성화할 수 있다.