개발용 첫 Elasticsearch 클러스터 설정 방법

로컬 개발 환경에 맞게 기본 단일 노드 또는 다중 노드 Elasticsearch 클러스터를 신속하게 배포하고 구성하는 필수 단계를 알아봅니다. 이 가이드에서는 바이너리 다운로드, 테스트를 위해 보안을 비활성화하도록 `elasticsearch.yml` 구성, 노드 시작, 간단한 명령줄 확인 도구를 사용한 클러스터 상태 확인 방법을 다룹니다.

44 조회수

개발용 첫 Elasticsearch 클러스터 설정 방법

Elasticsearch는 분산 특성 때문에 시작이 어렵게 느껴질 수 있지만, 로컬 개발을 위한 기본적인 클러스터 설정은 간단합니다. 이 가이드는 간단한 단일 노드 설정이든, 좀 더 실제 환경에 가까운 다중 노드 환경이든, 기능적인 Elasticsearch 클러스터를 빠르게 배포하고 구성하는 데 필요한 필수 단계를 안내할 것입니다. 이 초기 구성을 이해하는 것은 Elasticsearch의 강력한 검색 및 분석 기능을 사용하여 데이터를 원활하게 인덱싱, 쿼리 및 탐색하는 데 중요합니다.

우리는 개발 환경에 필요한 핵심 구성 요소에 중점을 두어, 프로덕션 고려 사항으로 넘어가기 전에 견고한 기반을 다질 수 있도록 할 것입니다.

전제 조건

시작하기 전에 다음 전제 조건이 충족되었는지 확인하세요.

  1. Java Development Kit (JDK): Elasticsearch는 시스템에 호환되는 JDK가 설치되어 있어야 합니다. Elasticsearch 버전 7.x 이상은 일반적으로 JDK 11 이상을 필요로 합니다.
  2. Elasticsearch 다운로드: 공식 Elastic 웹사이트에서 원하는 Elasticsearch 버전의 바이너리 배포판을 다운로드하세요.
  3. 시스템 리소스: 기본적인 개발 테스트에는 일반적으로 2GB RAM으로 충분하지만, 다중 노드 테스트에는 더 많은 용량이 권장됩니다.

1단계: Elasticsearch 다운로드 및 압축 해제

다운로드한 파일(일반적으로 .zip 또는 .tar.gz 파일)을 클러스터 파일을 호스팅할 디렉토리(예: ~/elasticsearch-8.12.0)에 압축 해제합니다. 이 디렉토리를 Elasticsearch 홈 디렉토리라고 합니다.

2단계: 단일 노드 클러스터 구성 (개발 기본 설정)

기본적으로 Elasticsearch를 처음 실행하면 단일 노드 클러스터로 시작하려고 합니다. 그러나 최신 버전에서는 로컬 개발 환경에서도 보안 및 메모리 설정과 관련하여 명시적인 구성이 필요한 경우가 많습니다.

구성 파일은 Elasticsearch 홈 디렉토리 내의 config/ 디렉토리에 있습니다.

필수 구성 (config/elasticsearch.yml)

주요 구성 파일은 elasticsearch.yml입니다. 로컬 단일 노드 설정의 경우, 최소한 클러스터 이름과 노드 이름을 구성해야 합니다.

# Cluster configuration
cluster.name: dev-cluster

# Node configuration
node.name: node-1

# Network settings (Use localhost for development)
network.host: 127.0.0.1

# HTTP Port (Default is 9200)
http.port: 9200

# Important for development: Disable security initially (Use with caution in production!)
xpack.security.enabled: false

보안 경고: xpack.security.enabled를 비활성화하는 것은 초기 개발 설정에서 테스트를 간소화하기 위해 흔히 사용됩니다. 절대 이 구성을 공개적으로 접근 가능한 환경에서 실행하지 마십시오. 최신 Elasticsearch 버전(7.x 이상)의 경우, 보안이 활성화된 상태로 유지된다면 초기 암호를 생성하기 위해 먼저 설정 명령을 실행해야 하는 경우가 많습니다.

단일 노드 시작

압축 해제된 디렉토리의 루트로 이동하여 적절한 시작 스크립트를 실행합니다. Linux/macOS에서는:

./bin/elasticsearch

Windows (PowerShell 사용)에서는:

.\bin\elasticsearch.bat

로그에 노드가 성공적으로 시작되었음을 나타내는 메시지(일반적으로 started와 같은 메시지)가 표시될 때까지 기다립니다.

3단계: 클러스터 상태 확인

프로세스가 실행되면 기본 HTTP 포트(9200)에 대해 curl을 사용하여 클러스터 상태를 확인할 수 있습니다.

클러스터 상태 확인

이 명령어는 클러스터의 전반적인 상태를 확인합니다.

curl -X GET "http://localhost:9200/_cat/health?v"

예상 출력 (일부):

epoch      timestamp cluster     status node.total node.data shards prio initialized
1678886400 10:00:00  dev-cluster green    1          1        0   0           1

status 필드는 green이어야 하며, 이는 정상적인 단일 노드 클러스터를 나타냅니다.

노드 정보 확인

노드 정보도 확인할 수 있습니다.

curl -X GET "http://localhost:9200/_cat/nodes?v"

4단계: 다중 노드 클러스터 설정 (실제 테스트용)

더 현실적인 개발 또는 샤드 할당 테스트를 위해서는 최소 두 개의 노드가 필요합니다. 이는 각각 고유한 구성을 가진 여러 개의 독립적인 Elasticsearch 인스턴스를 실행해야 함을 의미합니다.

디렉토리 구조

주요 작업 영역 내에 각 노드에 대한 별도의 디렉토리(예: es_data/node1, es_data/node2)를 생성합니다. 기본 Elasticsearch 배포판을 각 디렉토리에 복사하거나, 메인 설치에 링크합니다.

노드 구성 차이

각 노드에 대해 고유한 config/elasticsearch.yml 파일을 생성합니다.

노드 1 구성 (es_data/node1/config/elasticsearch.yml)

cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
path.data: node1_data  # Unique data path
xpack.security.enabled: false
# This line tells node 1 how to find other members
cluster.initial_master_nodes: ["node-1", "node-2"]

노드 2 구성 (es_data/node2/config/elasticsearch.yml)

cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201  # Must use a different HTTP port
path.data: node2_data  # Unique data path
xpack.security.enabled: false
# This line tells node 2 how to find other members
cluster.initial_master_nodes: ["node-1", "node-2"]

다중 노드 클러스터 시작

  1. 노드 1 시작: es_data/node1으로 이동하여 ./bin/elasticsearch를 실행합니다.
  2. 노드 2 시작: es_data/node2로 이동하여 ./bin/elasticsearch를 실행합니다.

다중 노드 클러스터 확인

실행 중인 어떤 HTTP 포트(예: 9200)에 대해서든 API를 사용하여 노드 수를 확인합니다.

curl -X GET "http://localhost:9200/_cat/nodes?v"

예상 출력 (일부):

ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1    15           50       0   0.01    0.02    0.01    mdi        *      node-1
127.0.0.1    16           51       0   0.00    0.01    0.01    mdi        -      node-2

name 아래에 두 개의 항목이 보인다면, 다중 노드 클러스터가 올바르게 구성된 것입니다.

개발 환경을 위한 모범 사례

  • 전용 데이터 경로 사용: 특히 다중 노드 설정에서는 인스턴스 간의 의도치 않은 데이터 오염을 방지하기 위해 각 노드에 path.data를 명시적으로 구성해야 합니다.
  • 고유 포트 사용: 로컬에서 실행할 때 충돌을 피하기 위해 각 노드에 고유한 HTTP 포트(http.port)를 사용합니다.
  • 메모리 잠금: 개발 환경에서는 힙 크기 제한에 부딪히지 않도록 주의하십시오. 메모리와 관련된 시작 오류가 발생하면 jvm.options 파일에서 JVM 힙 크기를 조정해야 할 수 있습니다(기본 설정은 기본적인 테스트에는 대개 적합합니다).

다음 단계: 데이터 인덱싱

클러스터가 실행되면 다음 논리적인 단계는 인덱스를 생성하고 설정을 매핑하는 것입니다. 예를 들어, products라는 간단한 인덱스를 생성하려면:

curl -X PUT "http://localhost:9200/products?pretty"

이 기본적인 설정을 통해 클라이언트 라이브러리나 Kibana를 사용하여 Elasticsearch와 상호 작용을 시작할 수 있습니다.