본문 바로가기
ES

Elasticsearch 6 -> 7버전 클러스터 업그레이드

by 비타민찌 2025. 12. 23.
728x90
들어가며..

 

실제 운영 환경에서 Elasticsearch 6 버전에서 Elasticsearch 7.17.11 버전으로

업그레이드를 진행하며 겪었던 경험을 기반으로 정리한 글이다.

운영 중인 Elasticsearch 클러스터를 업그레이드하는 작업은 언제나 긴장된다.

특히 샤드 수가 많은 대규모 클러스터라면,

단순 버전 업데이트를 넘어 클러스터 안정성, 보안 설정, 플러그인 호환성, 운영 중단 최소화까지 함께 고려해야 한다.

 

 

1. 업그레이드 전 사전 작업

가장 먼저 확인한 것은 Kibana Upgrade Assistant였다.

 

Upgrade Assistant를 통해 확인한 핵심 포인트는 다음과 같다.

  • deprecated setting 여부
  • 인덱스 호환성 문제
  • reindex 필요 대상
  • 플러그인 호환성

이 단계에서 문제를 놓치면 업그레이드 이후 클러스터가 기동되지 않는 상황이 발생할 수 있다.

 

 

2. 샤드 재배치 중지

업그레이드 중 노드가 내려가면 Elasticsearch는 자동으로 샤드 재배치를 시도한다.

대규모 클러스터에서는 이 과정 자체가 부하가 될 수 있다.

그래서 업그레이드 전 반드시 샤드 재배치를 중단한다.

 

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}
POST _flush/synced

 

그리고 flush를 수행하는데,

이 작업은 트랜잭션 로그를 최소화하고 재기동 시 복구 부담을 줄여준다.

 

 

3. Elasticsearch, Kibana 서비스 중단

 

systemctl stop elasticsearch
systemctl status elasticsearch

systemctl stop kibana
systemctl status kibana

 

추가로 사용하는 플러그인 등이 있다면 마찬가지로

백업 후 제거 등을 수행하면 된다.

 

 

4. Elasticsearch 7.17.11 설치

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0

 

설치할 7.x 버전 저장소 확인 후 설치한다.

apt install elasticsearch=7.17.11 -y

 

 

5. 설정 파일 백업

mkdir /etc/elasticsearch/bak

cp -p /etc/elasticsearch/ES_V6.5.4/elasticsearch.yml \
      /etc/elasticsearch/ES_V6.5.4/bak/elasticsearch.yml.bak

cp -p /etc/elasticsearch/jvm.options \
      /etc/elasticsearch/bak/jvm.options.bak

 

systemd / init 설정도 함께 백업했다.

 

 

6. systemd, init 스크립트 환경 변수 점검

특히 중요했던 부분은 ES_PATH_CONF, PID_DIR, ES_ENV_FILE 이었다.

여기서 클러스터 이름이 경로에 반영되지 않으면

노드가 엉뚱한 설정을 읽고 기동 실패하는 경우가 발생한다.

 

 

7. Elasticsearch 7.x 설정 파일 적용 (elasticsearch.yml)

############################
# Cluster
############################
cluster.name: my-es-cluster

############################
# Node
############################
node.name: ${HOSTNAME}
node.roles: [ master, data, ingest ]

############################
# Path
############################
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

############################
# Network
############################
network.host: _site_
http.port: 9200
transport.port: 9300

############################
# Discovery (7.x)
############################
discovery.seed_hosts:
  - es-node-01
  - es-node-02
  - es-node-03

cluster.initial_master_nodes:
  - es-node-01
  - es-node-02
  - es-node-03

############################
# Bootstrap
############################
bootstrap.memory_lock: true

############################
# Security (X-Pack 기본 활성화)
############################
xpack.security.enabled: true

############################
# Transport Layer Security (노드 간 통신)
############################
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

############################
# HTTP Layer Security (REST API)
############################
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-http.p12
xpack.security.http.ssl.truststore.path: elastic-http.p12

############################
# License / Feature Control
############################
xpack.monitoring.collection.enabled: true
xpack.watcher.enabled: false
xpack.ml.enabled: false
xpack.graph.enabled: false

############################
# Index / Cluster Safety
############################
action.auto_create_index: true
cluster.max_shards_per_node: 1000

############################
# Logging
############################
logger.org.elasticsearch.discovery: INFO

 

 

위 설정 파일은 기본적인 elasticsearch.yml 파일 예시이다.

Elasticsearch 7.x부터는 보안 기능이 기본 활성화되어 있으며,

노드 간 통신(Transport)과 REST API(HTTP) 모두 SSL을 적용한 상태에서 업그레이드를 진행했다.

 

 

8. Keystore 재생성

sudo /usr/share/elasticsearch/bin/elasticsearch-keystore list

sudo rm -f /etc/elasticsearch/elasticsearch.keystore
sudo /usr/share/elasticsearch/bin/elasticsearch-keystore create

 

기존 keystore 삭제 후 재생성.

 

참고로 해당 작업은 전체 클러스터를 중단한 상태에서 수행했으며,

운영 중 keystore 삭제는 절대 수행하지 않는다.

 

 

패스워드 재등록

sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add \
xpack.security.transport.ssl.keystore.secure_password

sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add \
xpack.security.transport.ssl.truststore.secure_password

 

 

9. Kibana 설치

apt install kibana=7.17.11 -y

 

 

10. 샤드 재배치 풀기

curl -u <USER>:<PASSWORD> -XPUT \
"http://localhost:9200/_cluster/settings" \
-H 'Content-Type: application/json' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

 

 

끝!

 

버전 업그레이 작업에서는 무엇보다 백업이 정말 중요하고, 

작업 실패 시를 위한 롤백 계획도 준비되어 있어야 한다.

 

이 글이 Elasticsearch 클러스터를 운영하거나

7.x 업그레이드를 앞둔 분들에게 도움되는 체크리스트가 되었으면 한다.

728x90

댓글