Elasticsearch 설정 우선순위와 효율적인 적용 방법 (클러스터 관리 핵심)
Elasticsearch의 설정을 업데이트하는 방법에는 세 가지 주요 접근 방식이 있습니다. transient update, persistent update, 그리고 elasticsearch.yml 파일을 통한 업데이트입니다. 각 접근 방식은 적용 범위와 지속성에서 차이가 있으며, 우선순위도 다릅니다. 각 방법에 대한 상세한 설명과 구체적인 사례에 대해서 자세히 알아보겠습니다.
설정 업데이트 방법 및 우선순위
- Transient Settings (임시 설정)
- 특징: 클러스터가 재시작되면 사라지는 일시적인 설정입니다.
- 용도: 단기적인 테스트나 일시적인 설정 변경에 유용합니다.
- 우선순위: 가장 높은 우선순위를 가집니다.
- Persistent Settings (지속적 설정)
- 특징: 클러스터가 재시작되어도 유지되는 영구적인 설정입니다.
- 용도: 장기적인 설정 변경이나 운영 환경에서의 설정 조정에 적합합니다.
- 우선순위: transient settings 다음으로 높은 우선순위를 가집니다.
- 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
- 설명: 스크립트 기능을 활성화하여 필요한 경우 커스텀 스크립트를 실행할 수 있습니다.
우선순위 설명
설정의 우선순위는 다음과 같습니다.
- Transient settings
- Persistent settings
- 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 클러스터의 성능과 안정성을 최적화할 수 있습니다. 각 방법의 장단점을 고려하여 상황에 맞는 설정 방식을 선택하는 것이 중요합니다.