Elasticsearch 클러스터 설정: 단계별 구성 가이드
안전한 노드 역할, 검색 설정, 네트워킹, 힙 크기 조정 및 상태 확인을 통해 Elasticsearch 클러스터를 구성합니다.
Elasticsearch 클러스터 설정: 단계별 구성 가이드
Elasticsearch 클러스터를 설정하는 것은 대부분 초기에 몇 가지 선택을 올바르게 하는 것에 달려 있습니다: 노드 이름, 검색, 역할, 네트워킹 및 메모리. 이러한 기본 사항이 잘못되면 클러스터가 불안정하게 형성되거나, 잘못된 인터페이스에 노출되거나, 노드 재시작 중에 어려움을 겪을 수 있습니다.
이 가이드는 Elasticsearch를 실제 워크로드에 적용하기 전에 검토해야 할 핵심 설정을 안내합니다. 예제는 elasticsearch.yml을 사용하며 소규모 3노드 클러스터를 가정하지만, 확장할 때도 동일한 확인 사항이 적용됩니다.
사전 요구 사항
구성에 들어가기 전에 다음 사항이 준비되어 있는지 확인하십시오:
- Java 런타임: 많은 Elasticsearch 배포판에는 번들 JDK가 포함되어 있습니다. 자체 Java 런타임을 제공하는 경우 Elasticsearch 버전에 대한 지원 매트릭스를 확인하십시오.
java -version - 시스템 리소스: Elasticsearch 노드에 충분한 RAM, CPU 및 디스크 공간을 할당하십시오. 정확한 요구 사항은 데이터 볼륨과 쿼리 복잡성에 따라 다릅니다.
- 네트워크 액세스: 노드가 구성된 전송 포트(기본값은 9300)에서 서로 통신할 수 있는지 확인하십시오.
설치
이 가이드는 구성에 중점을 두고 있지만, 성공적인 설정은 올바른 설치에서 시작됩니다. Elasticsearch는 패키지 관리자(apt, yum), 아카이브 다운로드 또는 Docker를 통해 설치할 수 있습니다. 운영 체제 또는 배포 방법에 따른 자세한 설치 지침은 공식 Elasticsearch 문서를 참조하십시오.
핵심 구성 파일
Elasticsearch의 기본 구성 파일은 elasticsearch.yml이며, 일반적으로 Elasticsearch 설치 디렉토리의 config/ 디렉토리에 있습니다. 이 파일의 주요 설정이 클러스터 동작을 결정합니다.
클러스터 설정: 주요 구성 지시문
1. 클러스터 이름 (cluster.name)
이 설정은 클러스터를 고유하게 식별합니다. 동일한 클러스터의 모든 노드는 동일한 cluster.name을 공유해야 합니다. 설정하지 않으면 기본값은 elasticsearch입니다.
- 중요성: 노드가 올바른 클러스터를 검색하고 가입하는 데 필수적입니다. 동일한 네트워크에 있는 다른 클러스터는 고유한 이름을 가져야 합니다.
- 예시 (
elasticsearch.yml):cluster.name: my-production-cluster
2. 노드 역할 (node.roles)
Elasticsearch 노드는 리소스 할당 및 성능을 최적화하기 위해 특정 역할을 할당받을 수 있습니다. 일반적인 역할로는 master, data, ingest, ml이 있습니다. 소규모 클러스터의 경우 단일 노드가 여러 역할을 가질 수 있습니다.
- 마스터 후보 노드: 인덱스 생성/삭제, 노드 추적, 샤드 할당과 같은 클러스터 전체 작업을 담당합니다. 안정성을 위해 프로덕션 환경에서는 전용 마스터 노드를 사용하는 것이 좋습니다.
node.roles: [ master ] - 데이터 노드: 데이터를 저장하고 인덱싱 및 검색과 같은 데이터 관련 작업을 수행합니다. 전용 데이터 노드는 성능에 중요합니다.
node.roles: [ data ] - 수집 노드: 인덱싱 전에 문서를 전처리하는 데 사용됩니다(예: 수집 파이프라인 사용).
node.roles: [ ingest ] - 머신러닝 노드: 이상 탐지 및 기타 작업을 위한 머신러닝 기능을 실행합니다.
node.roles: [ ml ] - 조정 전용 노드: 검색 및 대량 요청을 처리하지만 데이터를 저장하거나 마스터 선거에 참여하지 않습니다. 데이터 또는 마스터 노드에서 무거운 쿼리 부하를 분산하는 데 유용합니다.
node.roles: []
모범 사례: 프로덕션에서는 내결함성과 성능 향상을 위해 노드를 특정 역할(예: 마스터 노드와 데이터 노드 분리)에 전용으로 할당하십시오. 소규모 설정의 경우 노드가 결합된 역할을 가질 수 있습니다.
3. 네트워크 설정 (network.host, http.port, transport.port)
이 설정은 Elasticsearch 노드가 통신하는 방식을 제어합니다.
network.host: 노드가 바인딩되는 IP 주소 또는 호스트 이름입니다. 다중 노드 클러스터의 경우 다른 노드에서 연결할 수 있는 IP 주소로 설정하십시오.0.0.0.0을 사용하면 사용 가능한 모든 네트워크 인터페이스에 바인딩됩니다.network.host: 192.168.1.100 # 또는 network.host: _site_ # 또는 network.host: 0.0.0.0http.port: HTTP REST API의 포트(기본값: 9200).http.port: 9200transport.port: 노드 간 통신 포트(기본값: 9300).transport.port: 9300
경고: 방화벽 규칙을 확인하여 노드가 transport.port에서 통신할 수 있는지 확인하십시오.
4. 검색 설정 (discovery.seed_hosts, cluster.initial_master_nodes)
이 설정은 노드가 클러스터를 찾고 가입하는 데 중요합니다.
discovery.seed_hosts: 새 노드가 클러스터를 검색하기 위해 연결할 수 있는 다른 노드의 IP 주소 또는 호스트 이름 목록입니다.discovery.seed_hosts: - "host1:9300" - "host2:9300" - "192.168.1.101:9300"cluster.initial_master_nodes: 새로운 클러스터를 부트스트랩하는 데만 사용되는 마스터 후보 노드 이름 목록입니다. 클러스터가 형성된 후에는 이 설정을 제거하십시오. 오래된 부트스트랩 설정을 그대로 두면 나중에 재구축하거나 우발적인 클러스터 형성 시 혼란을 초래할 수 있습니다.cluster.initial_master_nodes: - "node-1" - "node-2" - "node-3"
팁: 클라우드 환경이나 동적 네트워크에서는 DNS 또는 클라우드 공급자 검색 메커니즘과 같은 서비스를 사용하는 것을 고려하십시오.
다중 노드 클러스터 구성
다중 노드 클러스터를 설정하려면 각 노드의 elasticsearch.yml 파일을 구성합니다. 다음을 확인하십시오:
- **
cluster.name**은 모든 노드에서 동일해야 합니다. - 각 노드는 고유한 **
node.name**을 가져야 합니다(예:node-1,node-2). - **
network.host**는 다른 노드에서 연결할 수 있는 IP 주소로 설정되어야 합니다. - **
discovery.seed_hosts**는 최소한 마스터 후보 노드의 쿼럼 주소를 나열해야 합니다. - **
cluster.initial_master_nodes**는 초기 클러스터 부트스트랩 중에만 초기 마스터 후보 노드의 이름을 포함해야 합니다.
node-1 예시:
cluster.name: my-production-cluster
node.name: node-1
node.roles: [ master, data ]
network.host: 192.168.1.100
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
node-2 예시 (node.name: node-2로 유사):
cluster.name: my-production-cluster
node.name: node-2
node.roles: [ master, data ]
network.host: 192.168.1.101
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
5. 힙 크기 (jvm.options)
Elasticsearch는 상당한 양의 메모리를 사용합니다. JVM(Java Virtual Machine) 힙 크기는 jvm.options 파일(일반적으로 config/ 디렉토리)에서 구성됩니다. 힙 크기 조정으로 인한 성능 문제를 방지하려면 최소 및 최대 힙 크기를 동일한 값으로 설정하는 것이 좋습니다.
- 모범 사례: 힙 크기를 시스템 RAM의 절반 이하로 설정하고 파일 시스템 캐시를 위한 메모리를 남겨 두십시오. 과도하게 큰 힙은 피하십시오. 많은 배포에서 압축된 일반 객체 포인터 임계값(일반적으로 30GB 미만이지만 JVM에 따라 다름) 미만으로 유지됩니다.
예시 (jvm.options):
-Xms4g
-Xmx4g
이렇게 하면 초기 및 최대 힙 크기가 4GB로 설정됩니다.
6. 샤드 할당 및 복제 (cluster.routing.*)
이 설정은 샤드가 노드 간에 분산 및 복제되는 방식을 제어합니다.
cluster.routing.allocation.disk.watermark.low,high,flood_stage: 디스크 공간이 부족한 디스크에 샤드 할당을 방지하는 임계값입니다.cluster.routing.allocation.enable: 샤드 할당을 제어합니다(예:all,primaries,new_primaries,none).
예시:
cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"
클러스터 상태 확인
노드가 시작되면 클러스터 상태 API를 사용하여 클러스터의 상태를 확인할 수 있습니다.
curl -X GET "localhost:9200/_cluster/health?pretty"
주요 출력 필드:
status:green(모든 샤드 할당됨),yellow(일부 복제본 할당되지 않음),red(일부 기본 샤드 할당되지 않음).number_of_nodes: 클러스터의 총 노드 수입니다.number_of_data_nodes: 데이터 노드로 지정된 노드 수입니다.active_shards,relocating_shards,initializing_shards,unassigned_shards.
팁: green 상태를 목표로 하십시오. yellow 상태는 데이터가 안전하지만(기본 샤드가 할당됨) 고가용성을 위한 충분한 복제본이 부족할 수 있음을 나타냅니다. red 상태는 데이터가 위험에 처해 있으며 즉각적인 조치가 필요함을 의미합니다.
다음 단계
Elasticsearch 클러스터를 성공적으로 설정한 후에는 일반적으로 다음을 진행합니다:
- 인덱스 생성: 데이터가 저장되고 구성되는 방식을 정의합니다.
- 매핑: 필드의 데이터 유형을 지정하여 문서의 스키마를 정의합니다.
- 분석기: 효과적인 전체 텍스트 검색을 위한 텍스트 분석을 구성합니다.
- 보안: 인증 및 권한 부여를 구현합니다.
이 가이드는 안정적이고 성능이 뛰어난 Elasticsearch 클러스터를 위한 필수 기반을 제공합니다. 특정 워크로드에 따른 지속적인 모니터링 및 튜닝이 장기적인 성공의 핵심입니다.