서버구축 (WEB,DB)

Elasticsearch 설정 우선순위와 효율적인 적용 방법 (클러스터 관리 핵심)

날으는물고기 2024. 10. 4. 00:48

Elasticsearch의 설정을 업데이트하는 방법에는 세 가지 주요 접근 방식이 있습니다. transient update, persistent update, 그리고 elasticsearch.yml 파일을 통한 업데이트입니다. 각 접근 방식은 적용 범위와 지속성에서 차이가 있으며, 우선순위도 다릅니다. 각 방법에 대한 상세한 설명과 구체적인 사례에 대해서 자세히 알아보겠습니다.


설정 업데이트 방법 및 우선순위

  1. Transient Settings (임시 설정)
    • 특징: 클러스터가 재시작되면 사라지는 일시적인 설정입니다.
    • 용도: 단기적인 테스트나 일시적인 설정 변경에 유용합니다.
    • 우선순위: 가장 높은 우선순위를 가집니다.
  2. Persistent Settings (지속적 설정)
    • 특징: 클러스터가 재시작되어도 유지되는 영구적인 설정입니다.
    • 용도: 장기적인 설정 변경이나 운영 환경에서의 설정 조정에 적합합니다.
    • 우선순위: transient settings 다음으로 높은 우선순위를 가집니다.
  3. elasticsearch.yml 파일
    • 특징: 클러스터가 시작될 때 로드되는 기본 설정 파일입니다.
    • 용도: 초기 설정 및 변경이 드문 고정적인 설정에 사용됩니다.
    • 우선순위: 가장 낮은 우선순위를 가집니다.

1. Transient Settings

Transient settings는 클러스터의 상태를 일시적으로 변경할 때 사용됩니다. 이 설정은 클러스터가 재시작되면 초기화되므로, 단기적인 테스트나 일시적인 문제 해결에 유용합니다. 개발 환경이나 긴급한 상황에서 빠르게 설정을 조정하고 싶을 때 사용됩니다.

예시 1: 샤드 할당 임시 비활성화

노드 유지보수나 일시적인 문제로 인해 샤드 이동을 방지하고 싶을 때 사용할 수 있습니다.

curl -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}'
  • 설명: 이 명령어는 클러스터에서 샤드 할당을 임시로 비활성화합니다. 유지보수가 끝난 후에는 원래 설정으로 복원해야 합니다.

예시 2: 로그 레벨 임시 변경

디버깅을 위해 로그 레벨을 일시적으로 변경하고자 할 때 사용합니다.

curl -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
  "transient": {
    "logger.org.elasticsearch.transport": "TRACE"
  }
}'
  • 설명: org.elasticsearch.transport 패키지의 로그 레벨을 TRACE로 설정하여 상세한 로그를 수집합니다.

2. Persistent Settings

Persistent settings는 클러스터 설정을 영구적으로 변경하며, 클러스터가 재시작되어도 유지됩니다. 운영 환경에서 장기적인 설정 변경이 필요할 때 사용합니다. 설정 변경 후 즉시 적용되며, 노드 재시작이 필요하지 않습니다.

예시 1: 인덱스 복구 속도 제한 설정

클러스터의 안정성을 위해 복구 시 데이터 전송 속도를 제한할 수 있습니다.

curl -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
  "persistent": {
    "indices.recovery.max_bytes_per_sec": "50mb"
  }
}'
  • 설명: 인덱스 복구 시 최대 전송 속도를 50MB/초로 제한하여 네트워크 부하를 관리합니다.

예시 2: 자동 스냅샷 설정

데이터 백업을 위해 스냅샷 기능을 영구적으로 설정합니다.

curl -XPUT 'localhost:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d '{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup",
    "compress": true
  }
}'
  • 설명: 스냅샷 저장소를 설정하여 정기적인 데이터 백업이 가능하도록 합니다.

3. elasticsearch.yml 파일

elasticsearch.yml 파일은 Elasticsearch 노드의 기본 설정을 정의하는 구성 파일입니다. 노드가 시작될 때 로드되며, 변경 사항을 적용하려면 노드를 재시작해야 합니다. 주로 클러스터 이름, 노드 이름, 데이터 및 로그 경로, 네트워크 설정 등을 정의합니다.

예시 1: 클러스터 및 노드 이름 설정

cluster.name: my_elasticsearch_cluster
node.name: node-01
  • 설명: 클러스터와 노드의 이름을 지정하여 환경을 명확히 구분합니다.

예시 2: 데이터 및 로그 경로 설정

path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
  • 설명: 데이터와 로그의 저장 위치를 지정하여 디스크 공간을 효율적으로 관리합니다.

예시 3: 네트워크 설정

network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
  • 설명: 모든 네트워크 인터페이스에서 접근 가능하도록 설정하고, HTTP 및 TCP 포트를 지정합니다.

예시 4: 플러그인 및 모듈 설정

script.inline: true
script.stored: true
  • 설명: 스크립트 기능을 활성화하여 필요한 경우 커스텀 스크립트를 실행할 수 있습니다.

우선순위 설명

설정의 우선순위는 다음과 같습니다.

  1. Transient settings
  2. Persistent settings
  3. elasticsearch.yml 파일
  • Transient settings는 가장 높은 우선순위를 가지며, 동일한 설정이 여러 곳에 정의된 경우 transient 설정이 우선 적용됩니다.
  • Persistent settings는 elasticsearch.yml 파일의 설정보다 우선하며, 클러스터 재시작 후에도 유지됩니다.
  • elasticsearch.yml 파일의 설정은 기본값으로 사용되며, 다른 설정이 없는 경우에 적용됩니다.

활용 사례

1. 성능 테스트 중 일시적 설정 변경

상황

  • 대량의 데이터를 일괄적으로 색인해야 하는 경우 색인 속도를 향상시키기 위해 일시적인 설정 변경이 필요합니다.

조치

  • Transien settings를 사용하여 리프레시 간격을 비활성화
    curl -XPUT 'localhost:9200/my_index/_settings' -H 'Content-Type: application/json' -d '{
      "transient": {
        "index.refresh_interval": "-1"
      }
    }'
    • 설명: 리프레시 간격을 비활성화하여 색인 속도를 향상시킵니다.
  • Transien settings를 사용하여 복제본 수를 0으로 설정
    curl -XPUT 'localhost:9200/my_index/_settings' -H 'Content-Type: application/json' -d '{
      "transient": {
        "index.number_of_replicas": 0
      }
    }'
    • 설명: 복제본 수를 줄여 색인 시의 부하를 감소시킵니다.

결과

  • 색인 작업이 완료된 후 원래 설정으로 복원하여 시스템의 안정성과 데이터 안전성을 확보합니다.

2. 운영 환경에서의 지속적 설정 변경

상황

  • 클러스터의 노드 수가 증가하여 디폴트 설정으로는 자원 관리가 어려워졌습니다.

조치

  • Persistent settings를 사용하여 스레드 풀 크기 조정
    curl -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
      "persistent": {
        "thread_pool.write.size": 30
      }
    }'
    • 설명: 쓰기 작업에 할당된 스레드 풀의 크기를 늘려 병렬 처리를 향상시킵니다.

결과

  • 클러스터 전반에 걸쳐 설정이 적용되어 일관된 성능 향상을 이룹니다.

3. 기본 설정 관리

상황

  • 새로운 환경에 Elasticsearch를 설치하면서 초기 설정을 구성해야 합니다.

조치

  • elasticsearch.yml 파일을 편집하여 기본 설정 적용
    cluster.name: production_cluster
    node.name: node-01
    path.data: /data/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 192.168.1.100
    discovery.seed_hosts: ["192.168.1.101", "192.168.1.102"]
    cluster.initial_master_nodes: ["node-01", "node-02"]
    • 설명: 클러스터 이름, 노드 이름, 데이터 및 로그 경로, 네트워크 설정, 디스커버리 설정 등을 지정합니다.

결과

  • 노드 재시작 시 설정이 적용되어 안정적인 클러스터 환경을 구축합니다.

Elasticsearch의 설정을 관리하는 데 있어 transient, persistent, 그리고 elasticsearch.yml 파일을 적절히 활용하면 다양한 상황에 맞는 유연한 설정 관리를 할 수 있습니다.

  • Transient settings: 단기적인 테스트나 긴급한 설정 변경에 유용하며, 클러스터 재시작 시 초기화됩니다.
  • Persistent settings: 운영 환경에서의 지속적인 설정 변경에 적합하며, 클러스터 재시작 후에도 유지됩니다.
  • elasticsearch.yml 파일: 초기 설정이나 변경이 드문 고정적인 설정에 사용되며, 노드 재시작이 필요합니다.

설정의 우선순위를 이해하고 적절히 적용함으로써 Elasticsearch 클러스터의 성능과 안정성을 최적화할 수 있습니다. 각 방법의 장단점을 고려하여 상황에 맞는 설정 방식을 선택하는 것이 중요합니다.

728x90