원문은 2017년 3월 2일 ObjectRocket.com/blog에 게시되었습니다.
데이터 플랫폼은 끊임없이 확장하고 변화하고 있지만, 한 가지는 늘 변하지 않습니다. 바로 누구나 데이터의 백업 사본을 원한다는 점입니다! 이 가이드에서는 Rackspace ObjectRocket for Elasticsearch® 인스턴스에서 S3 리포지토리 플러그인을 활용하는 방법을 소개합니다.
기술이 아무리 발전해도 백업에 대한 수요는 여전히 존재합니다. 로컬 개발 환경으로 복원하기 위한 백업, 안전 보관이나 규정 준수를 위한 사본 등 다양한 용도로 활용됩니다. 이 글에서는 Rackspace® ObjectRocket® for Elasticsearch 인스턴스와 함께 S3 리포지토리 플러그인을 사용하는 방법을 단계별로 설명합니다.
스냅샷의 구성 요소
Elasticsearch 스냅샷은 세 가지 주요 구성 요소로 이루어집니다. 바로 리포지토리(repository), 스냅샷(snapshot), 그리고 고유한 스냅샷 이름입니다. 리포지토리에는 스냅샷을 어디에 어떻게 저장할지에 대한 세부 정보가 담겨 있습니다. 기본으로 제공되는 ObjectRocket의 야간 백업은 fs 타입이며, S3 백업은 s3 타입입니다. 두 방식은 설정 구조가 약간 다릅니다. 다음은 리포지토리의 예시입니다:
GET /_snapshot?pretty
...
{
"s3_repository" : {
"type" : "s3",
"settings" : {
"bucket" : "MYBUCKETNAME",
"server_side_encryption" : "false",
"region" : "us-east-1",
"compress" : "false"
}
}
}
...
조회되는 각 리포지토리에는 하나 이상의 스냅샷이 배열 형태로 나열됩니다:
GET /_snapshot/s3_repository/_all?pretty
[...
{
"snapshot" : "20170208225601",
"uuid" : "t6R6jxLJTIueQizv9clJYg",
"version_id" : 5010499,
"version" : "5.1.1",
"indices" : [ ".triggered_watches", ".watch_history-2016.10.26", "elastalert_status", "coffee-2016.10.301", ".kibana", "coffee-2016.10.305", "coffee-2016.10.304", "coffee-2016.10.303", "coffee-2016.10.302", ".watches"
],
"state" : "SUCCESS",
"start_time" : "2017-02-09T06:56:01.191Z",
"start_time_in_millis" : 1486623361191,
"end_time" : "2017-02-09T06:56:12.179Z",
"end_time_in_millis" : 1486623372179,
"duration_in_millis" : 10988,
"failures" : [ ],
"shards" : {
"total" : 57,
"failed" : 0,
"successful" : 57
}
}]
모든 _snapshot 작업에서는 올바른 리포지토리, 스냅샷, 그리고 스냅샷 식별자를 참조해야 합니다. 위 예시에서는 snapshot: 20170208225601을 고유 식별자로 사용합니다.
S3로 백업 전송하기
Elasticsearch에 S3 리포지토리를 설정하는 과정은 비교적 간단합니다. 백업을 S3 버킷으로 전송하기 위해 필요한 사전 조건은 다음 세 가지뿐입니다:
repository-s3플러그인을 설치합니다.- 클러스터가 외부에서 S3에 접근할 수 있는지 확인합니다.
- S3에 대한 적절한 자격 증명(버킷, 시크릿 키, 액세스 키)을 준비합니다.
ObjectRocket Elasticsearch 인스턴스를 사용 중이라면 처음 두 단계는 기본적으로 이미 갖춰져 있으며, 세 번째 단계를 위해 S3 자격 증명만 준비하면 됩니다. Elasticsearch 스냅샷 프로세스의 권한을 제한하고 싶다면 AWS® IAM 콘솔에서 Custom Policy(사용자 지정 정책)를 생성하세요. 정책 문서는 다음 예시와 비슷하게 작성하면 됩니다(MYBUCKETNAME을 실제 버킷 이름으로 교체):
{
"Statement": [
{
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::MYBUCKETNAME"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::MYBUCKETNAME/*"
]
}
],
"Version": "2012-10-17"
}
사전 조건이 모두 준비되었다면, 첫 번째 단계는 S3 리포지토리를 생성하는 것입니다:
PUT /_snapshot/s3_repository
{
"type": "s3",
"settings": {
"bucket": "MYBUCKETNAME",
"region": "us-east-1",
"access_key": "KEY",
"secret_key": "SECRET"
}
}
리포지토리를 생성한 후에는 표준 _snapshot 작업을 모두 수행할 수 있습니다. 새 스냅샷을 생성하려면 다음 엔드포인트에 접속하여 SNAPSHOT_NAME을 지정하세요:
PUT /_snapshot/s3_repository/SNAPSHOT_NAME?wait_for_completion=false
스냅샷은 실행에 시간이 걸리는 경우가 많으므로, 진행 중인(in-flight) 스냅샷의 상태를 확인하고 싶을 때가 있습니다. 다음 엔드포인트를 사용하면 현재 실행 중인 스냅샷 또는 복원 작업에 대한 자세한 정보를 확인할 수 있습니다:
GET /_snapshot/_status
이제 마지막 스냅샷이 완료된 직후 모든 인덱스를 삭제했고, 곧바로 그 결정을 후회하게 되었다고 가정해 봅시다. S3 스냅샷에서 모든 인덱스를 복원하려면 다음 명령을 실행합니다:
POST /_snapshot/s3_repository/SNAPSHOT_NAME/_restore
특정 인덱스만 선택적으로 복원해야 한다면 요청 형식을 약간 수정하면 됩니다. 예를 들면 다음과 같습니다:
POST /_snapshot/s3_repository/SNAPSHOT_NAME/_restore
{
"indices": "myindex_1,myindex_2",
"ignore_unavailable": true
}
참고로, 하나의 클러스터에서는 한 번에 하나의 스냅샷 또는 복원 작업만 실행할 수 있습니다. 또한 스냅샷은 클러스터 성능에 약간의 영향을 미칠 수 있으므로, 백업 정책이 너무 공격적이지 않도록 주의하는 것이 좋습니다!
이 단계들을 진행하는 중 문제가 발생하면 언제든지 support@objectrocket.com으로 문의해 주세요.
피드백 탭을 사용하여 의견을 남기거나 질문할 수 있습니다. 또한 Sales Chat을 클릭하여 지금 바로 상담을 시작할 수도 있습니다.