Elasticsearch 자동 스냅샷 설정

Elasticsearch 자동 스냅샷 설정

Published
February 8, 2023
Tags
Elasticsearch

이슈

데이터 보호를 위해서 일정 주기로 엘라스틱서치 데이터를 스냅샷으로 보관해둘 필요성이 생겼다. 확인해보니 SLM(snapshot lifecycle management) API 를 사용하면 자동으로 스냅샷을 기록할 수 있다고 한다.
 

해결

  • Elasticsearch 8.4.3 버전 기준
 
우선 엘라스틱 실행 시 ELASTICSEARCH_FS_SNAPSHOT_REPO_PATH 환경변수에 스냅샷 경로를 지정해주어야한다. 그렇지않으면
Doesn’t match any of the locations specified by path.repo because this setting is empty
와 같은 오류가 발생한다. bitnami helm 차트의 경우 values.yaml 파일에 snapshotRepoPath 값을 수정해주면 되고 그 외의 경우에는 ENV 등으로 변수 설정이 필요하다.
 
# bitnami 차트는 이 키값을 변경한다. snapshotRepoPath: "<스냅샷 데이터를 저장할 PV마운트 경로>"
 
환경변수를 설정했으면 엘라스틱서치를 다시 실행해준다. 그리고 아래 요청을 cURL 이나 kibana 를 통해서 입력해주면 된다.
 
# 리포지토리 등록 PUT _snapshot/backup { "type": "fs", "settings": { "location": "<스냅샷 데이터를 저장할 PV마운트 경로>" } } # 리포 등록 확인 GET _snapshot/backup?pretty # 검증 POST _snapshot/backup/_verify?pretty # SLM security privileges 등록 POST _security/role/slm-admin { "cluster": [ "manage_slm", "cluster:admin/snapshot/*" ], "indices": [ { "names": [ ".slm-history-*" ], "privileges": [ "all" ] } ] } # SLM 규칙 생성 (UTC 기준 매일 18시에 스냅샷 진행) PUT _slm/policy/cron-snapshots { "schedule": "0 0 18 * * ?", "name": "<cron-snap-{now/d}>", "repository": "backup", "config": { "indices": "*", "include_global_state": true }, "retention": { "expire_after": "30d", "min_count": 5, "max_count": 50 } } # 생성 확인 GET _slm/policy
 
의문스러운 점은 파드를 KST 로 설정했음에도 크론탭은 UTC 기준으로 동작하는 점인데, 나중에 시간이 나면 다시 확인해봐야겠다.
 

참고

Loading Comments...