본 포스팅은 2024년 04월 01일을 기준으로 작성되었습니다.
Snapshot은 실행중인 Elasticsearch 클러스터의 설정, 인덱스 데이터들을 저장하는 백업입니다. snapshot은 다음과 같이 다양하게 활용할 수 있습니다.
다운타임 없이 정기적으로 클러스터 백업
삭제 또는 하드웨어 장애 후 데이터 복구
클러스터 간에 데이터 전송
cold 및 frozen 데이터 티어에서 searchable snapshot을 사용하여 스토리지 비용 절감
기본적으로 클러스터의 snapshot에는 클러스터 구성, 모든 일반 데이터 스트림 및 모든 일반 인덱스가 포함됩니다. snapshot에 저장되는 요소들은 다음과 같습니다.
snapshot이 포함하는 것
모든 일반 인덱스 및 데이터 스트림
클러스터 구성 :
persistent cluster setting
Index templates
Legacy index templates
Ingest pipelines
ILM policies
Stored scripts
snapshot이 포함하지 않는 것
Transient cluster settings
Registered snapshot repositories
Node configuration files
Securitry configuration files
클러스터에서 특정 데이터 스트림이나 인덱스만을 선택하여 snapshot을 만들 수도 있습니다. 데이터 스트림 또는 인덱스가 포함된 snapshot에는 해당 aliases가 자동으로 포함됩니다. snapshot을 복원할 때 이러한 aliases를 복원할지 여부를 선택할 수 있습니다.
Elasticsearch는 클러스터외부 저장소에 위치한 snapshot repository에 스냅샷을 저장합니다. snapshot을 생성하거나 복원하려면 먼저 클러스터에 snapshot repository를 등록해야 합니다. 지원하는 repository type은 다음과 같습니다. (클릭시 자세한 설정법 페이지로 이동)
Google Cloud Storage (GCS)🔗
Microsoft Azure🔗
Shared file system🔗
Read-only URL🔗
Source-only🔗
Snapshot repository를 생성했다면 Deployments Security 설정을 해야합니다. (Elastic cloud 기준)
Step1. Deployments Management > Security 에서 Keystore설정
Step2. Access key 및 Secret key 설정
자세한 설정법은 repository 타입 별 생성 페이지를 참조해주세요.
생성해놓은 snapshot repository를 elastic에 등록합니다
Step1. Management > Snapshot and Restore > Repositories 에서 "+ Register repository"를 클릭합니다.
Step2. Repository name을 설정하고 Cloud 서비스를 선택한 후 Next를 클릭합니다.
Step3. Client는 Elastic Security 설정: Step2 에서 설정한 cloud client 이름을 적어 주고, S3/GCS 일때는 Bucket, Azure 일때는 container 에 생성 시 설정한 bucket/container 이름을 적어 줍니다. (나머지 값은 default값으로 두고 Register를 클릭합니다.)
Step4. Test
해당 Repository를 클릭하여 Verify repository를 클릭하여 연결 여부를 확인할 수 있습니다.
Step1. elasticsearch.yml 편집기로 열어 snapshot repository가 될 백업 폴더의 경로를 추가합니다.
path:
repo:
- /mount/backups
- /경로/폴더명
Step2. Repository type에서 Shared file system을 선택하고 Repository name을 설정합니다.
Step3. File system location에는 elasticsearch.yml에 등록해놓은 백업 폴더 경로를 지정하고 repository를 생성합니다.
Step4. Test
해당 Repository를 클릭하여 Verify repository를 클릭하여 연결 여부를 확인할 수 있습니다.
SLM(Snapshot lifecycle management)은 snapshot의 생성 및 삭제가 자동적으로 이루어질 수 있게 하는 관리 정책입니다. SLM은 미리 설정된 규칙에 따라 특정 혹은 모든 데이터를 자동적으로 백업합니다. SLM에서 설정할 수 있는 규칙들은 다음과 같습니다.
생성될 snapshot의 name
저장될 repository
snapshot 생성 주기
저장할 인덱스 및 데이터 스트림
저장할 elasticsearch 클러스터 기능 상태
snapshot 보관 주기
policy가 저장할 snapshot의 최소 및 최대 개수
Step1. Management > Snapshot and Restore > Policies에서 "+ Create a policy"를 클릭합니다.
Step2. Logistics 에서 Policy name, Snapshot name, Repository, Schedule 등을 설정한 후 Next를 클릭합니다.
Policy name : 해당 SLM policy의 이름을 정합니다.
Sanpshot name : policy에 의해 만들어질 snapshot의 이름을 정합니다. 날짜 계산을 지원하며, 이름 중복 충돌을 방지하기 위해 snapshot 이름의 뒤에는 자동적으로 UUID가 생성되어 추가됩니다.
(예 : snapshot name이 '<daily-snap-{now/d}>' 라면, 2024.04.26일 기준으로 'daily-2024.04.25-w8uxmxxqttk7dxgfngsow' 라는 이름의 snapshot이 생성됩니다.)
Repository : snapshot이 저장될 repository를 선택합니다.
Schedule : snapshot의 생성 주기를 정합니다. 시, 일, 주, 월, 년 단위로 조정이 가능합니다. cron expression을 지원합니다.
Step3. Snapshot settings 에서 저장할 인덱스와 데이터스트림, elasticsearch 클러스터 기능 상태 등을 설정한 후 Next를 클릭합니다.
Data streams and indices : snapshot에 저장될 인덱스와 데이터스트림을 선택합니다. 기본 설정은 모든 인덱스와 데이터스트림 저장이며, All data streams and indices를 해제하면 특정 인덱스와 데이터스트림을 선택할 수 있습니다.
Ignore unavailable indices : snapshot을 생성할 때 사용할 수 없는 인덱스 무시 여부를 결정합니다.
Allow partial indices : snapshot을 생성할 때 사용할 수 없는 primary shards가 있는 인덱스의 허용 여부를 결정합니다.
Include global state : 글로벌 상태의 클러스터를 포함 할지를 정합니다.
Include feature state : snapshot에 저장될 elasticsearch에 저장된 클러스터의 기록, 구성, 보안 등의 기능 상태를 선택합니다. 기본 설정은 모든 기능 상태 포함이며, All features를 클릭해 특정 기능 상태를 선택할 수 있습니다.
Step4. Snapshot retention 에서 snapshot의 보관 기한 및 policy가 저장할 snapshot의 최소 및 최대 개수를 설정한 후 Next를 클릭합니다. (선택 사항)
Expiration : snpshot의 보관 주기를 설정합니다. 일, 시, 분, 초 단위로 설정이 가능하며, 설정된 기간이 지나면 snapshot이 자동적으로 삭제됩니다.
Snapshots to retaion : policy가 저장할 snapshot의 최소 및 최대 개수를 설정합니다.
Step5. Review policy에서 설정들을 검토한 후 Create policy를 눌러 policy를 생성합니다.
@윤원영(Wonyoung Yoon)