이슈
데이터 보호를 위해서 일정 주기로 엘라스틱서치 데이터를 스냅샷으로 보관해둘 필요성이 생겼다. 확인해보니 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...