Elasticsaerch 설정 변경 및 버전 업그레이드
이전 블로그에서는 Rolling방식으로 Elasticsearch의 버전을 업그레이드하는 방법에 대해서 정리하였습니다. 이번에는 Swap 방식을 통하여 Elasticsearch의 Version을 Upgrade 하는 방법에 대해서 정리하였습니다.
클러스터 구성
이번 실습 Elasticsearch의 클러스터 구성으로는 Master node 3대, Data node 4대로 구성하여 진행하였습니다.
Elasticsearch의 버전은 8.5.1을 사용하였습니다.
Master node helm values (value-master.yaml)
---
createCert: false
clusterName: "elasticsearch"
nodeGroup: "master"
replicas: 3
roles:
- master
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.5.1"
imagePullPolicy: "IfNotPresent"
protocol: http
service:
type: NodePort
nodePort: "30000"
Data node helm values (value-data.yaml)
---
createCert: false
clusterName: "elasticsearch"
nodeGroup: "data"
replicas: 4
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.5.1"
imagePullPolicy: "IfNotPresent"
roles:
- data
- data_content
- data_hot
- data_warm
- data_cold
- ingest
- ml
- remote_cluster_client
- transform
protocol: http
service:
type: NodePort
nodePort: "30001"
Makefile 구성
PREFIX := elasticsearch
TIMEOUT := 1200s
install:
helm upgrade --wait --timeout=$(TIMEOUT) --install --values value-master.yaml $(PREFIX)-master ./elasticsearch
helm upgrade --wait --timeout=$(TIMEOUT) --install --values value-data.yaml $(PREFIX)-data ./elasticsearch
설치 및 결과 확인
# elasticsearch 설치
> make install
# 파드 확인
> kubectl get po ─╯
NAME READY STATUS RESTARTS AGE
elasticsearch-data-0 1/1 Running 0 25m
elasticsearch-data-1 1/1 Running 0 25m
elasticsearch-data-2 1/1 Running 0 25m
elasticsearch-data-3 1/1 Running 0 25m
elasticsearch-master-0 1/1 Running 0 26m
elasticsearch-master-1 1/1 Running 0 26m
elasticsearch-master-2 1/1 Running 0 26m
# 버전 확인
GET http://localhost:30001/_nodes/elasticsearch-data-0
{
"_nodes": {
"total": 1,
"successful": 1,
"failed": 0
},
"cluster_name": "elasticsearch",
"nodes": {
"4312Dy1YSS6tnBs28Pn4tg": {
"name": "elasticsearch-data-0",
"transport_address": "10.1.0.63:9300",
"host": "10.1.0.63",
"ip": "10.1.0.63",
"version": "8.5.1",
생략 ....
정상적으로 클러스터가 구성되었습니다. 이제 해당 클러스터의 버전을 업그레이드 작업을 진행하겠습니다.
새로운 노드 구성
rolling upgrade 방식과는 다르게 이번에는 새로운 노드 그룹을 생성합니다.
New Master node helm values (value-newmaster.yaml)
---
createCert: false
clusterName: "elasticsearch"
nodeGroup: "new-master"
replicas: 3
roles:
- master
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.6.0"
imagePullPolicy: "IfNotPresent"
protocol: http
service:
type: NodePort
nodePort: "30000"
New Data node helm values (value-newdata.yaml)
---
createCert: false
clusterName: "elasticsearch"
nodeGroup: "new-data"
replicas: 4
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.6.0"
imagePullPolicy: "IfNotPresent"
roles:
- data
- data_content
- data_hot
- data_warm
- data_cold
- ingest
- ml
- remote_cluster_client
- transform
protocol: http
service:
type: NodePort
nodePort: "30001"
Makefile 구성
PREFIX := elasticsearch
TIMEOUT := 1200s
install:
helm upgrade --wait --timeout=$(TIMEOUT) --install --values value-newmaster.yaml $(PREFIX)-new-master ./elasticsearch
helm upgrade --wait --timeout=$(TIMEOUT) --install --values value-newdata.yaml $(PREFIX)-new-data ./elasticsearch
설치
> make install
현재 클러스터 상태
위와 같이 구성하였다면 클러스터의 상태는 다음과 같을 것입니다.
기존 노드들 하나씩 Scale In
기존의 마스터, 데이터 노드의 Statfulset의 Scale을 하나씩 줄여 줍니다.
> kubectl scale sts elasticsearch-master --replicas=2
# 위 작업 완료 시
> kubectl scale sts elasticsearch-master --replicas=1
# 위 작업 완료 시
> kubectl scale sts elasticsearch-master --replicas=0
# 위 작업 완료 시
> kubectl scale sts elasticsearch-data --replicas=3
# 위 작업 완료 시
> kubectl scale sts elasticsearch-data --replicas=2
# 위 작업 완료 시
> kubectl scale sts elasticsearch-data --replicas=1
# 위 작업 완료 시
> kubectl scale sts elasticsearch-data --replicas=0
# 모든 스케일이 정상적으로 내려가면 기존 자원 반납
> helm delete elasticsearch-master
> helm delete elasticsearch-data
작업양은 많지만 보다 더 빠른 방법
Snapshot을 이용
일시적으로 오늘 이전의 데이터는 잠시 출력이 되지 않아도 된다면 사용하는 방법입니다.
- 상태 복구를 위한 스냅샷 생성
- 오늘 날짜의 데이터를 제외한 모든 인덱스를 삭제
- 오늘 날짜의 인덱스 샤드를 Reroute를 이용하여 원하는 노드로 배치
- 샤드들이 이동이 전부 정상적으로 이루어지면 기존 노드 Scale In
- 오늘 이전의 날짜의 데이터를 스냅샷으로 복구
reroute 사용법은 아래 블로그에서 확인해 주세요
'Elasticsearch > Elasticsearch 설정' 카테고리의 다른 글
Elasticsearch rack_id 설정을 통한 Replica shard 배치 (0) | 2023.10.28 |
---|---|
Elasticsearch data stream (1) | 2023.10.25 |
Elasticsearch version upgrade rolling 방식 (in Kubernetes) (0) | 2023.10.22 |
Elasticsearch 최적화 #3] ilm policy로 data phases 설정 (0) | 2023.10.14 |
Elasticsearch 최적화 #2] 노드 & JVM (0) | 2023.10.03 |