Amazon Elasticsearch Service용 UltraWarm - Amazon Elasticsearch Service

Amazon Elasticsearch Service용 UltraWarm

UltraWarm은 대량의 읽기 전용 데이터를 Amazon Elasticsearch Service에 저장하는 비용 효율적인 방법을 제공합니다. 표준 데이터 노드는 각 노드에 연결된 Amazon EBS 볼륨 또는 인스턴스 스토어의 형태를 취하는 “핫” 스토리지를 사용합니다. 핫 스토리지의 새로운 데이터 인덱싱 및 검색 성능이 가장 빠릅니다.

UltraWarm 노드는 연결된 스토리지가 아닌 Amazon S3와 정교한 캐싱 솔루션을 사용하여 성능을 향상시킵니다. 활발하게 사용하지 않거나 쿼리 빈도가 낮은 인덱스의 경우, UltraWarm은 GiB당 데이터 비용이 아주 저렴합니다. Elasticsearch에서, 이러한 웜 인덱스는 다른 인덱스와 마찬가지로 작동합니다. 동일한 API를 사용하여 쿼리하거나, Kibana에 대시보드를 만드는 데 사용할 수 있습니다.

사전 조건

UltraWarm에는 몇 가지 중요한 사전 조건이 있습니다.

  • UltraWarm을 사용하려면 Elasticsearch 6.8 이상이 필요합니다.

  • 웜 스토리지를 사용하려면 도메인에 전용 마스터 노드가 있어야 합니다.

  • 도메인이 데이터 노드에 T2 인스턴스 유형을 사용하는 경우, 웜 스토리지를 사용할 수 없습니다.

UltraWarm 스토리지 요구 사항 계산

스토리지 요구 사항 계산에서 언급했듯이, 핫 스토리지의 데이터는 복제본, Linux 예약 공간 및 Amazon ES 예약 공간 등 상당한 오버헤드를 발생시킵니다. 예를 들어, 하나의 복제본 샤드가 있는 10GiB 기본 샤드에는 약 26GiB의 핫 스토리지가 필요합니다.

UltraWarm은 Amazon S3를 사용하기 때문에 이러한 오버헤드를 발생시키지 않습니다. UltraWarm 스토리지 요구 사항을 계산할 때는 기본 샤드의 크기만 고려하십시오. S3의 데이터 내구성 덕분에 복제본이 필요하지 않으며, S3는 운영 체제 또는 서비스 고려 사항을 추상화합니다. 동일한 10GiB 샤드에는 10GiB의 웜 스토리지가 필요합니다. ultrawarm1.large.elasticsearch 인스턴스를 프로비저닝하는 경우, 기본 샤드에 최대 스토리지 20TiB를 모두 사용할 수 있습니다. 인스턴스 유형 요약과 각 인스턴스 유형이 사용할 수 있는 최대 스토리지 용량은 UltraWarm 스토리지 제한 단원을 참조하십시오.

작은 정보

UltraWarm의 경우, 권장하는 최대 샤드 크기는 50GiB입니다.

UltraWarm 가격

핫 스토리지를 사용하면 프로비저닝하는 만큼 비용을 지불합니다. 연결된 Amazon EBS 볼륨이 필요한 인스턴스가 있는가 하면, 인스턴스 스토어가 포함되어 있는 인스턴스도 있습니다. 스토리지가 비어 있든 가득 차 있든, 동일한 가격을 지불합니다.

UltraWarm 스토리지를 사용하면 사용한 만큼만 비용을 지불합니다. ultrawarm1.large.elasticsearch 인스턴스는 S3에서 최대 20TiB의 스토리지를 처리할 수 있지만, 1TiB의 데이터만 저장하는 경우 1TiB의 데이터에 해당하는 비용만 청구됩니다. 다른 모든 노드 유형과 마찬가지로, 각 UltraWarm 노드별 시간당 요금만 지불합니다. 자세한 내용은 Amazon Elasticsearch Service 가격 단원을 참조하십시오.

UltraWarm 활성화

콘솔은 웜 스토리지를 사용하는 도메인을 생성하는 가장 간단한 방법입니다. 도메인을 생성하는 동안 Enable UltraWarm data nodes(UltraWarm 데이터 노드 활성화)를 선택한 다음, 원하는 웜 노드 수를 선택합니다. 사전 조건을 충족하는 경우 기존 도메인에서도 동일한 기본 프로세스가 적용됩니다. 도메인 상태가 Processing(처리 중)에서 Active(활성)으로 변경된 후에도 UltraWarm을 몇 시간 동안 사용하지 못할 수 있습니다.

UltraWarm을 활성화하는 AWS CLI 또는 구성 API, 특히 ElasticsearchClusterConfigWarmEnabled, WarmCountWarmType 옵션을 사용할 수도 있습니다.

참고

도메인은 최대 수의 웜 노드를 지원합니다. 자세한 내용은 Amazon Elasticsearch Service 한도을(를) 참조하십시오.

CLI 명령 예

다음 AWS CLI 명령은 3개의 데이터 노드, 3개의 전용 마스터 노드, 제한적인 액세스 정책이 있는 6개의 웜 노드로 도메인을 생성합니다.

aws es create-elasticsearch-domain --domain-name my-domain --elasticsearch-cluster-config InstanceCount=3,InstanceType=r5.large.elasticsearch,DedicatedMasterEnabled=true,DedicatedMasterType=c5.large.elasticsearch,DedicatedMasterCount=3,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3},WarmEnabled=true,WarmCount=6,WarmType=ultrawarm1.medium.elasticsearch --elasticsearch-version 6.8 --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=11 --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["123456789012"]},"Action":["es:*"],"Resource":"arn:aws:es:us-east-1:123456789012:domain/my-domain/*"}]}' --region us-east-1

자세한 내용은 AWS CLI Command Reference 단원을 참조하십시오.

샘플 구성 API 요청

구성 API에 대한 다음 요청은 3개의 데이터 노드, 3개의 전용 마스터 노드, 모든 암호화 기능이 활성화되어 있고 제한적인 액세스 정책이 있는 6개의 웜 노드로 도메인을 생성합니다.

POST https://es.us-east-2.amazonaws.com/2015-01-01/es/domain { "ElasticsearchClusterConfig": { "InstanceCount": 3, "InstanceType": "r5.large.elasticsearch", "DedicatedMasterEnabled": true, "DedicatedMasterType": "c5.large.elasticsearch", "DedicatedMasterCount": 3, "ZoneAwarenessEnabled": true, "ZoneAwarenessConfig": { "AvailabilityZoneCount": 3 }, "WarmEnabled": true, "WarmCount": 6, "WarmType": "ultrawarm1.medium.elasticsearch" }, "EBSOptions": { "EBSEnabled": true, "VolumeType": "gp2", "VolumeSize": 11 }, "EncryptionAtRestOptions": { "Enabled": true }, "NodeToNodeEncryptionOptions": { "Enabled": true }, "DomainEndpointOptions": { "EnforceHTTPS": true, "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07" }, "ElasticsearchVersion": "6.8", "DomainName": "my-domain", "AccessPolicies": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"123456789012\"]},\"Action\":[\"es:*\"],\"Resource\":\"arn:aws:es:us-east-1:123456789012:domain/my-domain/*\"}]}" }

자세한 내용은 Amazon Elasticsearch Service 구성 API 참조을(를) 참조하십시오.

인덱스를 UltraWarm 스토리지로 마이그레이션

인덱스에 쓰기를 완료하고 더 이상 가장 빠른 검색 성능이 필요하지 않은 경우 핫에서 웜으로 마이그레이션하십시오.

POST _ultrawarm/migration/my-index/_warm

그런 다음 마이그레이션 상태를 확인하십시오.

GET _ultrawarm/migration/my-index/_status { "migration_status": { "index": "my-index", "state": "RUNNING_SHARD_RELOCATION", "migration_type": "HOT_TO_WARM", "shard_level_status": { "running": 0, "total": 5, "pending": 3, "failed": 0, "succeeded": 2 } } }

여러 인덱스를 빠르게 연속해서 마이그레이션하는 경우 _cat API와 비슷한 일반 텍스트로 모든 마이그레이션에 대한 요약을 얻을 수 있습니다.

GET _ultrawarm/migration/_status?v index migration_type state my-index HOT_TO_WARM RUNNING_SHARD_RELOCATION

핫 스토리지에서 웜 스토리지로 최대 25번의 동시 마이그레이션을 수행할 수 있습니다. 현재 번호를 확인하려면 HotToWarmMigrationQueueSize 메트릭을 모니터링하십시오.

마이그레이션 프로세스의 상태는 다음과 같습니다.

PENDING_INCREMENTAL_SNAPSHOT RUNNING_INCREMENTAL_SNAPSHOT FAILED_INCREMENTAL_SNAPSHOT PENDING_FORCE_MERGE RUNNING_FORCE_MERGE FAILED_FORCE_MERGE PENDING_FULL_SNAPSHOT RUNNING_FULL_SNAPSHOT FAILED_FULL_SNAPSHOT PENDING_SHARD_RELOCATION RUNNING_SHARD_RELOCATION FINISHED_SHARD_RELOCATION

이러한 상태가 나타내듯이 스냅샷, 샤드 재배치 또는 강제 병합 중에 마이그레이션이 실패할 수 있습니다. 스냅샷 또는 샤드 재배치 중 실패는 일반적으로 노드 오류 또는 S3 연결 문제로 인해 발생합니다. 일반적으로 디스크 공간 부족이 강제 병합 실패의 근본 원인입니다.

마이그레이션이 완료되면 동일한 _status 요청이 오류를 반환합니다. 그때 인덱스를 확인하면 웜 인덱스에 고유한 몇 가지 설정을 볼 수 있습니다.

GET my-index/_settings { "my-index": { "settings": { "index": { "refresh_interval": "-1", "auto_expand_replicas": "false", "blocks": { "ultrawarm_allow_delete": "true" }, "provided_name": "my-index", "creation_date": "1572886951679", "unassigned": { "node_left": { "delayed_timeout": "5m" } }, "number_of_replicas": "1", "uuid": "3iyTkhXvR8Cytc6sWKBirg", "version": { "created": "6080099" }, "routing": { "allocation": { "require": { "box_type": "warm" } }, "search_preference": "_primary_first" }, "number_of_shards": "5" } } } }
  • blocks.ultrawarm_allow_delete는 인덱스에 대한 대부분의 _settings 업데이트를 차단할지(true) 아니면 허용할지(false) 지정합니다.

  • 이 경우 number_of_replicas는 디스크 공간을 소비하지 않는 수동 복제본의 수입니다.

  • routing.allocation.require.box_type은 인덱스가 표준 데이터 노드가 아닌 웜 노드를 사용하도록 지정합니다.

  • routing.search_preference는 Amazon ES에 기본 샤드를 먼저 쿼리하고 쿼리가 실패한 경우에만 수동 복제본을 사용하도록 지시합니다. 이 설정은 디스크 사용을 줄입니다.

웜 스토리지의 인덱스는 핫 스토리지로 되돌리지 않는 한 읽기 전용입니다. 인덱스를 쿼리할 수 있지만 데이터를 추가할 수 없습니다. 다음 오류가 표시되는 경우:

{ "error": { "root_cause": [{ "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }], "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }, "status": 403 }

마이그레이션 자동화

인덱스가 특정 기간에 도달하거나 다른 조건을 충족한 후에는 인덱스 상태 관리를 사용하여 마이그레이션 프로세스를 자동화하는 것이 좋습니다. 여기에 나온 샘플 정책은 해당 워크플로우를 보여 줍니다.

핫 인덱스 및 웜 인덱스 나열

UltraWarm에는 핫 인덱스와 웜 인덱스를 관리하는 데 도움이 되는, _all과 비슷한 두 가지 옵션이 추가되었습니다. 모든 웜 또는 핫 인덱스 목록을 보려면 다음 요청을 하십시오.

GET _warm GET _hot

인덱스를 지정하는 다른 요청에서 이러한 옵션을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

_cat/indices/_warm _cluster/state/_all/_hot

핫 스토리지로 웜 인덱스 되돌리기

인덱스에 다시 기록해야 하는 경우 핫 스토리지로 다시 마이그레이션합니다.

POST _ultrawarm/migration/my-index/_hot

웜 스토리지에서 핫 스토리지로 최대 10번의 동시 마이그레이션을 수행할 수 있습니다. 현재 번호를 확인하려면 WarmToHotMigrationQueueSize 메트릭을 모니터링하십시오.

마이그레이션을 완료한 후 인덱스 설정을 검토하여 요구 사항을 충족하는지 확인하십시오. 인덱스가 하나의 복제본이 있는 핫 스토리지로 돌아갑니다.

스냅샷에서 웜 인덱스 복원

UltraWarm에는 자동 스냅샷용 표준 리포지토리 외에 보조 리포지토리인 cs-ultrawarm이 추가됩니다. cs-ultrawarm의 스냅샷 보존 기간은 다른 자동 스냅샷과 마찬가지로 14일입니다.

다른 자동화된 스냅샷과 달리 이 리포지토리의 각 스냅샷에는 하나의 인덱스만 포함됩니다. cs-ultrawarm에서 스냅샷을 복원하면 핫 스토리지가 아닌 웜 스토리지로 복원됩니다. cs-automatedcs-automated-enc 리포지토리의 스냅샷은 핫 스토리지로 복원됩니다.

UltraWarm 스냅샷을 웜 스토리지로 복원하려면

  1. 복원할 인덱스가 포함된 최신 스냅샷을 식별합니다.

    GET _snapshot/cs-ultrawarm/_all { "snapshots": [{ "snapshot": "snapshot-name", "version": "6.8.0", "indices": [ "my-index" ] }] }
  2. 인덱스가 이미 있는 경우 삭제합니다.

    DELETE my-index

    인덱스를 삭제하지 않으려면 인덱스를 다시 작성하십시오.

  3. 스냅샷을 복원합니다.

    POST _snapshot/cs-ultrawarm/snapshot-name/_restore

    UltraWarm은 이 복원 요청에서 지정한 설정을 무시하므로 요청 본문을 생략할 수 있습니다.

UltraWarm 비활성화

콘솔은 UltraWarm을 비활성화하는 가장 간단한 방법입니다. 해당 도메인을 선택하고 Edit domain(도메인 편집)을 선택한 다음 Enable UltraWarm data nodes(UltraWarm 데이터 노드 활성화)의 선택을 취소하고 Submit(제출)를 선택합니다. AWS CLI 및 구성 API에서 WarmEnabled 옵션을 사용할 수도 있습니다.

UltraWarm을 비활성화하기 전에 모든 웜 인덱스를 삭제하거나 핫 스토리지로 다시 마이그레이션해야 합니다. 웜 스토리지가 비어 있으면 5분 정도 기다린 후 이 기능을 비활성화합니다.