개발 이야기/DB, 데이터분석, AI

S3에 스냅샷 생성 및 복원

가끔.하늘 가온아 2021. 2. 22. 18:13
반응형

Elasticsearch 7.11.0 On Premise 환경에서 AWS S3 에 스냅샷을 생성하는 내용을 정리해 보았습니다. Cloud 환경에서는 조금 다를 수 있으니 참고하세요.

 

아래 내용은 www.elastic.co/guide/en/elasticsearch/plugins/7.11/repository-s3.html#repository-s3-install의 내용을 참고해서 정리했습니다.

 

이해를 돕기 위해 이미지가 많이 첨부된 관계로 서술형 문체보다는 간략히 요점만 정리했습니다.

 

아래와 같은 순서로 정리되어 있습니다. 

 

1. AWS S3 플러그인 설치

2. AWS S3에 스냅샷 저장소 생성 

3. Kibana에 AWS S3 저장소 등록

4. 스냅샷 생성/복구하기

5. 검색 가능한 스냅샷 설정

 

1. AWS S3 플러그인 설치

 

S3 연결을 위해서는 플러그인을 설치해야 하는데, 모든 노드에 설치가 필요하며, 각 노드의 elasticsearch를 재시작해야 사용이 가능합니다.

 

플러그인 설치는 아래와 같은 가능하며, 설치 후 각 노드를 재시작해 주시기 바랍니다.

# 설치 
bin/elasticsearch-plugin install repository-s3

#삭제
bin/elasticsearch-plugin remove repository-s3

 

2. AWS S3에 스냅샷 저장소 생성 

 

 

우선 IAM에서 정책 생성합니다.

 

"역할 만들기"에서 "사용 사례 선택" -> "S3"를 선택합니다.

그리고 "정책 생성"을 선택합니다.

스냅샷을 위해 필요한 권한은 아래와 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::es-snapshot"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::es-snapshot/*"
            ]
        }
    ]
}

 

스냅샷에 사용한 bucket의 arn을 설정합니다. 

그리고 접근하는 서버 ip를 기록하여 불필요한 접근을 제한합니다.(옵션)

설정된 정책 설정 저장합니다. 

그리고 생성할 역할에 생성한 정책을 선택하여 저장합니다.

IAM에 ES snapshot을 위한 계정을 등록합니다.

그리고 생성한 계정에 위에서 만든 정책을 연결합니다.

 

Elasticsearch의 접근 권한 설정을 위해 계정 생성 후  access_key와 secret_key를 다운로드 혹은 복사해 둡니다. 

 

 

3. Kibana에 AWS S3 저장소 등록

 

Kibana에서 AWS S3 type의 저장소를 아래와 같이 등록합니다.

 

IAM에 생성한 사용자의 access_key , secret_key를 모든 노드에 등록해야 합니다. Elasticsearch Cloud를 사용한다면 간단하지만 On Premise 환경이라면 모든 노드에 각각 등록을 해야 합니다.

> bin/elasticsearch-keystore add s3.client.default.access_key
Enter value for s3.client.default.access_key: (*복사했던 access_key 입력)

> bin/elasticsearch-keystore add s3.client.default.secret_key
Enter value for s3.client.default.secret_key: (*복사했던 secret_key 입력)

> bin/elasticsearch-keystore list (등록 확인)

모두 등록했다면 보안 설정을 리로드 합니다.

POST /_nodes/reload_secure_settings

이제 연결을 테스트 해보세요.

잘 연결이 되었다면 Connected라는 메세지를 볼 수 있습니다.

 

 

4. 스냅샷 생성하기

 

스냅샷 정책을 만들어 일정한 규칙에 따라 스냅샷을 생성할 수 있습니다. 지금은 테스트를 위해 수동으로 스냅샷을 생성해 보겠습니다.

 

Dev Tool에서 아래와 같은 형식으로 스냅샷을 생성해 보세요.

PUT /_snapshot/s3_repo/your_first_snapshot?wait_for_completion=true&pretty
{
  "indices": "logstash-2010.01.01",
  "ignore_unavailable": true,
  "include_global_state": false
}

Stack Management에서 스냅샷이 잘 생성되었는지 확인할 수 있습니다.

s3에도 아래와 같이 스냅샷 정보들이 저장된 것을 확인할 수 있습니다. 일정 시간이 지나면 파일 개수가 상당히 많아져 접근이 쉽지 않게 됩니다. 직접 접근할 일은 거의 없긴 하지만요.

 

Kibana snapshot 리스트에서 복구 버튼으로 복구하셔도 되고 아래와 같은 형식으로 직접 복구를 시도할 수도 있습니다.

POST /_snapshot/REPOSITORY_NAME/SNAPSHOT_NAME/_restore?pretty
{

  "indices": "index_1,index_2",

  "ignore_unavailable": true,

  "include_global_state": false,              

  "rename_pattern": "index_(.+)",

  "rename_replacement": "restored_index_$1",

  "include_aliases": false

}

 

5. 검색 가능한 스냅샷 설정

 

검색 가능한 snapshot 으로 mount를 해야 합니다. 이는 상용 라이센스에서만 가능해서, 직접 테스트 해보지는 못했네요. 아래 공식 문서 링크를 참고하세요.

 

www.elastic.co/guide/en/elasticsearch/reference/master/searchable-snapshots-api-mount-snapshot.html

 

POST /_snapshot/s3_repo/your_first_snapshot/_mount?wait_for_completion=true
{
  "index": "index_1", 

  "renamed_index":"new_index_1",
  "index_settings": { 
    "index.number_of_replicas": 0
  },
  "ignored_index_settings": [ "index.refresh_interval" ] 
}

 

보다 상세한 내용은 아래 링크를 확인하시기 바랍니다.

www.elastic.co/guide/en/elasticsearch/reference/current/searchable-snapshots.html

 

이상입니다. 짧고 굵게 .. 필요한 내용만 정리해 봤습니다. 도움 되셨기를... ^^

반응형