snapshot 저장하기(slm)

Ted Kim·2020년 6월 27일
0

ELK

목록 보기
5/6

backup하는 것은 중요하죠. 처음에 할 때 헷갈려서 정리해봤어요
데이터 날리면 음.. 고소당할 수 읍 읍 최소 시말서 각ㅋㅋ
그래서 따로 정리해봤습니다 ㅎ

https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html

주의사항

  • indices를 close 해야함

  • 파일 경로를 설정해야함

    elasticsearch.yml
    repo.path: ["my_backup_location"]


전체 인덱스 백업하기

인덱스 하나씩 지우기 귀찮아서 전체 날렸습니다.
rm -rf /var/lib/elasticsearch/*
당연히 stop하고 해야합니다.

snapshot 만들기

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "my_backup_location"
  }
}

가져오기

//repo 연결
curl --request PUT localhost:9200/_snapshot/backup-repo --data-raw '{
	"type":"fs",
	"settings":{
		"location":"/home/student/backups/backup-repo"
	}
}'

` + 전체를 backup하다보니 kibana index까지 snapshot으로 만들어졌어요. 그래서 kibana를 키지 않고 command로 실행했습니다.`

//가져오기
curl --request POST localhost:9200/_snapshot/backup-repo/snapshot-1/_restore

//확인
curl --request PUT localhost:9200/_snapshot/backup-restudent@elk2:/etc$ curl get localhost:9200/_cat/indices

특정 index backup하기

전체를 백업하는게 아니라, 특정 인덱스만 백업하는 것도 필요할 거에요
가령 저처럼 스터디원들과 실습하고 싶으면 bulk나 logstash 사용안하고 바로 백업받게만 하면 되니까요ㅋㅋ

https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-take-snapshot.html

snapshot 만들기

저는 shakespeare와 nginx 인덱스만 백업하고 싶습니다.
backup repository는 위에서 만든 file storage를 사용합니다.

PUT /_snapshot/backup-repo/snapshot-test?wait_for_completion=true
{
  "indices": "shakespeare, nginx",
  "ignore_unavailable": true,
  "include_global_state": false,
  "metadata": {
    "taken_by": "kimchy",
    "taken_because": "backup before upgrading"
  }
}

// "uuid" : "MfoURqoGSHuxMPLQ6TcgAQ",

.dat 파일로 2개가 만들어졌네요

가져오기

가져오기 전에 2개의 인덱스를 지워줍니다.

DELETE shakespeare
DELETE nginx

  • _all/_open 은 kibana에서 안먹히는 경우가 간혹 있는 것 같습니다.
    command에서 XPUT하니까 됩니다. kibana 자체가 만능은 아닌가봅니다.
//restore하는 동안 block
POST _all/_close
POST _snapshot/backup-repo/snapshot-test/_restore

snapshot lifecycle

snapshot으로 백업하는 것은 매우 중요합니다.무조건 보장되어야 하죠
slm(snapshot lifecycle management)으로 더욱 확률을 높일 수 있습니다.

policy를 설정해서 언제 백업을 받고, 저장 repo는 얼마나 가지고 있을지 저할 수 있어요

  • slm policy 정의
    • schedule : frequency와 time
      • snapshot은 이전 파일과 다른 것만 저장(git처럼)
    • name : prefix
    • repository : 저장소 위치
    • config.indices: 인덱스 목록
    • retention: 삭제 기준 expire_after/ min_count/ max_count

스케줄 등록하기는 cron을 이용해서 직관적이에요. 3시간 3분마다 돌게하고,이름을정하고 60일뒤에 삭제가 되도록 설정하는 명령어는 아래와 같아요

//스케줄 등록하기
curl --location --request PUT 'http://lo
"schedule": "0 03 3 * * ?",
> "name":"<backup-{now/d}>",
> "repository":"backup_repository",
> "config": {
> "indices":["*"]
> },
> "retention":{
> "expire_after":"60d"
> }
> }'

//snapshot 즉시 실행
curl --location --request POST \
> 'http://localhost:9200/_slm/policy/backup_policy_daily/_execute'
{"snapshot_name":"backup-2020.06.29-zi9xah6eqk2w0oqsv87t8g"}

잘 저장되네요 ㅎㅎ

profile
코딩하는 경영학과

0개의 댓글