Armazenamento UltraWarm para Amazon OpenSearch Service - Amazon OpenSearch Service

Armazenamento UltraWarm para Amazon OpenSearch Service

O UltraWarm oferece uma maneira econômica de armazenar grandes quantidades de dados somente leitura no Amazon OpenSearch Service. Os nós de dados padrão usam o armazenamento de atividade muito alta, o qual assume a forma de armazenamentos de instâncias ou volumes do Amazon EBS anexados a cada nó. O armazenamento de atividade muito alta fornece a performance mais rápida possível para indexar e pesquisar novos dados.

Em vez do armazenamento vinculado, os nós do UltraWarm usam o Amazon S3 e uma solução de armazenamento em cache sofisticada para melhorar a performance. Para os índices nos quais você não está gravando ativamente, consulta com menos frequência e para os quais não precisa da mesma performance, o UltraWarm oferece custos significativamente mais baixos por GiB de dados. Como os índices warm são somente leitura, a menos que você os retorne ao armazenamento quente, o UltraWarm é o mais adequado para dados imutáveis, como logs.

No OpenSearch, os índices warm se comportam como qualquer outro índice. É possível consultá-los usando as mesmas APIs ou usá-los para criar visualizações no OpenSearch Dashboards.

Pré-requisitos

O UltraWarm tem alguns pré-requisitos importantes:

  • O UltraWarm requer o OpenSearch ou o Elasticsearch 6.8 ou superior.

  • Para usar o armazenamento de alta atividade (warm), os domínios devem ter nós principais dedicados.

  • Se o domínio usar um tipo de instância T2 ou T3 para os nós de dados, não será possível usar o armazenamento de alta atividade.

  • Se o índice usar aproximação de k-NN ("index.knn": true), você não pode movê-lo para o armazenamento de alta atividade.

  • Se o domínio usar controle de acesso refinado, os usuários deverão ser mapeados para a função ultrawarm_manager no OpenSearch Dashboards para fazer chamadas de API UltraWarm.

nota

A função ultrawarm_manager pode não estar definida em alguns domínios pré-existentes do OpenSearch Service. Se você não vir a função no Dashboards, será necessário criá-la manualmente.

Configurar permissões

Se você habilitar o UltraWarm em um domínio preexistente do OpenSearch Service, a função ultrawarm_manager não poderá ser definida no domínio. Os usuários não administradores deverão ser mapeados nessa função para poderem gerenciar índices warm usando o controle de aceso detalhado. Para criar manualmente a função ultrawarm_manager, faça o seguinte:

  1. No OpenSearch Dashboards, vá para Security (Segurança) e escolha Permissions(Permissões).

  2. Escolha Create action group (Criar grupo de ações) e configure os seguintes grupos:

    Group name Permissões
    ultrawarm_cluster
    • cluster:admin/ultrawarm/migration/list

    • cluster:monitor/nodes/stats

    ultrawarm_index_read
    • indices:admin/ultrawarm/migration/get

    • indices:admin/get

    ultrawarm_index_write
    • indices:admin/ultrawarm/migration/warm

    • indices:admin/ultrawarm/migration/hot

    • indices:monitor/stats

    • indices:admin/ultrawarm/migration/cancel

  3. Escolha Roles (Funções) e, em seguida, Create role (Criar função).

  4. Nomeie a função como ultrawarm_manager.

  5. Para Cluster permissions (Permissões de cluster), selecione ultrawarm_cluster e cluster_monitor.

  6. Para Index (Índice), digite *.

  7. Para Index permissions (Permissões de índice), selecione ultrawarm_index_read, ultrawarm_index_write, e indices_monitor.

  8. Escolha Create (Criar OpsItem).

  9. Depois de criar a função, mapeie-a em qualquer função de usuário ou de back-end que gerencie índices do UltraWarm.

Requisitos de armazenamento e considerações de performance do UltraWarm

Conforme abordado em Cálculo de requisitos de armazenamento, os dados no armazenamento de atividade muito alta incorrem em sobrecarga significativa: réplicas, espaço reservado do Linux e espaço reservado do OpenSearch Service. Por exemplo, um fragmento primário de 20 GiB com um fragmento de réplica requer aproximadamente 58 GiB de armazenamento de atividade muito alta.

Como ele usa o Amazon S3, o UltraWarm não incorre em nenhuma dessa sobrecarga. Ao calcular os requisitos de armazenamento UltraWarm, considere somente o tamanho dos fragmentos primários. A durabilidade dos dados no S3 elimina a necessidade de réplicas e o S3 abstrai qualquer consideração de sistema operacional ou de serviço. Esse mesmo fragmento de 20 GiB exige 20 GiB de armazenamento de alta atividade. Se você provisionar uma instância ultrawarm1.large.search, poderá usar todos os 20 TiB de seu armazenamento máximo para fragmentos primários. Consulte Limites de armazenamento do UltraWarm para obter um resumo dos tipos de instância e a quantidade máxima de armazenamento que cada um pode atender.

Com o UltraWarm, ainda recomendamos um tamanho de fragmento máximo de 50 GiB. O número de núcleos de CPU e quantidade de RAM alocada para cada tipo de instância UltraWarm fornecem uma ideia do número de fragmentos que eles podem pesquisar simultaneamente. Observe que, embora apenas fragmentos primários sejam contabilizados para o armazenamento UltraWarm no S3, o OpenSearch Dashboards e _cat/indices ainda reportam o tamanho do índice do UltraWarm como o total de todos os fragmentos primários e réplicas.

Por exemplo, cada instância de ultrawarm1.medium.search tem dois núcleos de CPU e pode endereçar até 1,5 TiB de armazenamento no S3. Duas dessas instâncias têm uma combinação de 3 TiB de armazenamento, o que funcionará para aproximadamente 62 fragmentos se o tamanho de cada fragmento for 50 GiB. Se uma solicitação para o cluster pesquisar apenas quatro desses fragmentos, a performance poderá ser excelente. Se a solicitação for ampla e pesquisar todos os 62, os quatro núcleos da CPU poderão ter dificuldade para executar a operação. Monitore as métricas do UltraWarm WarmCPUUtilization e WarmJVMMemoryPressure para entender como as instâncias lidam com suas worloads.

Se as suas pesquisas forem amplas ou frequentes, considere deixar os índices no armazenamento quente. Assim como qualquer outra workload do OpenSearch, a etapa mais importante para determinar se o UltraWarm atende às suas necessidades é executar testes de cliente representativos usando um conjunto de dados realista.

Preços do UltraWarm

Com o armazenamento de alta atividade, você paga pelo que provisiona. Algumas instâncias exigem um volume do Amazon EBS vinculado, enquanto outras incluem um armazenamento de instâncias. Se esse armazenamento estiver vazio ou cheio, você pagará o mesmo preço.

Com o armazenamento UltraWarm, você paga pelo que usa. Uma instância ultrawarm1.large.search pode processar até 20 TiB de armazenamento no S3, mas se você armazenar apenas 1 TiB de dados, será cobrado somente por 1 TiB de dados. Como todos os outros tipos de nó, você também paga uma taxa por hora para cada nó UltraWarm. Para mais informações, consulte Preços do Amazon OpenSearch Service.

Ativação do UltraWarm

O console é a maneira mais simples de criar um domínio que usa o armazenamento de alta atividade. Ao criar o domínio, escolha Enable UltraWarm data nodes (Habilitar nós de dados UltraWarm) e o número de nós de alta atividade desejados. O mesmo processo básico funciona em domínios existentes, desde que eles atendam aos pré-requisitos. Mesmo depois que o estado do domínio mudar de Processando para Ativo, o UltraWarm pode não estar disponível para uso por várias horas.

Também é possível usar a AWS CLI ou a API de configuração para habilitar o UltraWarm, especificamente as opções WarmEnabled, WarmCount e WarmType em ClusterConfig.

nota

Os domínios oferecem suporte a um número máximo de nós de alta atividade. Para obter mais detalhes, consulte Limites do Amazon OpenSearch Service.

Exemplo de comando da CLI

Os seguinte comando AWS CLI cria um domínio com três nós de dados, três nós principais dedicados, seis nos de alta atividade e controle de acesso refinado habilitado:

aws opensearch create-domain \ --domain-name my-domain \ --engine-version Opensearch_1.0 \ --cluster-config InstanceCount=3,InstanceType=r6g.large.search,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3},WarmEnabled=true,WarmCount=6,WarmType=ultrawarm1.medium.search \ --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=11 \ --node-to-node-encryption-options Enabled=true \ --encryption-at-rest-options Enabled=true \ --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-password}' \ --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["123456789012"]},"Action":["es:*"],"Resource":"arn:aws:es:us-west-1:123456789012:domain/my-domain/*"}]}' \ --region us-east-1

Para obter mais informações, consulte a Referência de comandos da AWS CLI.

Exemplo de solicitação da API de configuração

A solicitação a seguir à API de configuração cria um domínio com três nós de dados, três nós principais dedicados e seis nós de alta atividade com o controle de acesso refinado habilitado e uma política de acesso restritiva:

POST https://es.us-east-2.amazonaws.com/2021-01-01/opensearch/domain { "ClusterConfig": { "InstanceCount": 3, "InstanceType": "r6g.large.search", "DedicatedMasterEnabled": true, "DedicatedMasterType": "r6g.large.search", "DedicatedMasterCount": 3, "ZoneAwarenessEnabled": true, "ZoneAwarenessConfig": { "AvailabilityZoneCount": 3 }, "WarmEnabled": true, "WarmCount": 6, "WarmType": "ultrawarm1.medium.search" }, "EBSOptions": { "EBSEnabled": true, "VolumeType": "gp2", "VolumeSize": 11 }, "EncryptionAtRestOptions": { "Enabled": true }, "NodeToNodeEncryptionOptions": { "Enabled": true }, "DomainEndpointOptions": { "EnforceHTTPS": true, "TLSSecurityPolicy": "Policy-Min-TLS-1-2-2019-07" }, "AdvancedSecurityOptions": { "Enabled": true, "InternalUserDatabaseEnabled": true, "MasterUserOptions": { "MasterUserName": "master-user", "MasterUserPassword": "master-password" } }, "EngineVersion": "Opensearch_1.0", "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/*\"}]}" }

Para obter informações detalhadas, consulte Amazon OpenSearch Service API Reference (Referência da API do Amazon OpenSearch Service).

Migração de índices para o armazenamento UltraWarm

Se você terminar de gravar em um índice e não precisar mais da performance de pesquisa mais rápida possível, migre-o de atividade muito alta para alta atividade:

POST _ultrawarm/migration/my-index/_warm

Depois, verifique o status da migração:

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 } } }

A integridade do índice deve ser verde para que seja possível executar uma migração. Se você migrar vários índices em sucessão rápida, poderá obter um resumo de todas as migrações em texto não criptografado, semelhante à API _cat:

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

O OpenSearch Service migra um índice de cada vez para o UltraWarm. É possível ter até 200 migrações na fila. Qualquer solicitação que exceda o limite será rejeitada. Para verificar o número de migrações atual, monitore a métrica HotToWarmMigrationQueueSize. Os índices permanecem disponíveis durante todo o processo de migração, sem tempo de inatividade.

O processo de migração tem os seguintes estados:

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

Como esses estados indicam, as migrações podem falhar durante os snapshots, as realocações de fragmentos ou as uniões de força. As falhas durante os snapshots ou as realocações de fragmentos geralmente ocorrem devido a falhas de nós ou a problemas de conectividade do S3. A falta de espaço em disco geralmente é a causa subjacente das falhas de união de força.

Após o término da migração, a mesma solicitação _status retornará um erro. Se você verificar o índice nesse momento, verá algumas configurações exclusivas dos índices mornos:

GET my-index/_settings { "my-index": { "settings": { "index": { "refresh_interval": "-1", "auto_expand_replicas": "false", "provided_name": "my-index", "creation_date": "1599241458998", "unassigned": { "node_left": { "delayed_timeout": "5m" } }, "number_of_replicas": "1", "uuid": "GswyCdR0RSq0SJYmzsIpiw", "version": { "created": "7070099" }, "routing": { "allocation": { "require": { "box_type": "warm" } } }, "number_of_shards": "5", "merge": { "policy": { "max_merge_at_once_explicit": "50" } } } } } }
  • number_of_replicas, nesse caso, é o número de réplicas passivas, que não consomem espaço em disco.

  • routing.allocation.require.box_type especifica que o índice deve usar nós de alta atividade em vez de nós de dados padrão.

  • merge.policy.max_merge_at_once_explicit especifica o número de segmentos a serem mesclados simultaneamente durante a migração.

Os índices no armazenamento morno são somente leitura, a menos que você os retorne ao armazenamento quente, o que torna o armazenamento UltraWarm mais adequado para dados imutáveis, como logs. Você pode consultar os índices e excluí-los, mas não pode adicionar, atualizar ou excluir documentos individuais. Se tentar, você poderá encontrar a seguinte mensagem de erro:

{ "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 }

Automatização de migrações

Recomendamos usar Gerenciamento de estados de índices no Amazon OpenSearch Service para automatizar o processo de migração depois que um índice atinge uma determinada idade ou atende a outras condições. Consulte a política de exemplo que demonstra este fluxo de trabalho.

Ajuste de migrações

As migrações de índice para o armazenamento UltraWarm exigem uma mesclagem forçada. Cada índice do OpenSearch é composto por algum número de fragmentos, e cada fragmento é composto por algum número de segmentos de Lucene. A operação de forças mesclagem expurga documentos que foram marcados para exclusão e conserva espaço em disco. Por padrão, o UltraWarm mescla índices em um segmento.

Você pode alterar esse valor para até 1.000 segmentos usando a configuração index.ultrawarm.migration.force_merge.max_num_segments. Valores mais altos aceleram o processo de migração, mas aumentam a latência de consulta para o índice de alta atividade após a conclusão da migração. Para alterar a configuração, faça a seguinte solicitação:

PUT my-index/_settings { "index": { "ultrawarm": { "migration": { "force_merge": { "max_num_segments": 1 } } } } }

Para verificar a duração desse estágio do processo de migração, monitore a métrica HotToWarmMigrationForceMergeLatency.

Cancelamento de migrações

O UltraWarm lida com as migrações em sequência, em uma fila. Se uma migração estiver na fila, mas ainda não tiver sido iniciada, você poderá removê-la da fila usando a seguinte solicitação:

POST _ultrawarm/migration/_cancel/my-index

Se o domínio usa controle de acesso refinado, você precisará da permissão indices:admin/ultrawarm/migration/cancel para fazer essa solicitação.

Listagem de índices quentes e mornos

O UltraWarm adiciona duas opções adicionais, semelhantes a _all, para ajudar a gerenciar os índices quentes e mornos. Para obter uma lista de todos os índices mornos ou quentes, faça as seguintes solicitações:

GET _warm GET _hot

Você pode usar essas opções em outras solicitações que especificam índices, como:

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

Retorno de índices warm para o armazenamento quente

Se você precisar gravar em um índice novamente, migre-o de volta para o armazenamento de atividade muito alta:

POST _ultrawarm/migration/my-index/_hot

É possível ter até 10 migrações simultâneas do armazenamento de alta atividade para o armazenamento de atividade muito alta. Para verificar o número atual, monitore a WarmToHotMigrationQueueSize métrica.

Após a conclusão da migração, verifique as configurações de índice para garantir que atendam às suas necessidades. Os índices retornam ao armazenamento quente com uma réplica.

Restauração de índices warm de snapshots automatizados

Além do repositório padrão para snapshots automatizados, o UltraWarm adiciona um repositório secundário para índices mornos, cs-ultrawarm. Cada snapshot neste repositório contém apenas um índice. Se você excluir um índice de alta atividade, seu instantâneo permanecerá no repositório cs-ultrawarm por 14 dias, assim como qualquer outro snapshot automatizado.

Quando você restaura um snapshot de cs-ultrawarm, ele é restaurado no armazenamento de alta atividade (warm), não no armazenamento de atividade muito alta (hot). Os snapshots nos repositórios cs-automated e cs-automated-enc são restaurados no armazenamento de atividade muito alta.

Para restaurar um snapshot UltraWarm no armazenamento de alta atividade

  1. Identifique o snapshot mais recente que contém o índice que você deseja restaurar:

    GET _snapshot/cs-ultrawarm/_all { "snapshots": [{ "snapshot": "snapshot-name", "version": "1.0", "indices": [ "my-index" ] }] }
  2. Se o índice já existir, exclua-o:

    DELETE my-index

    Se não quiser excluir o índice, devolva-o ao armazenamento de atividade muito alta e reindexe-o.

  3. Restaure o snapshot:

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

    O UltraWarm ignora todas as configurações de índice especificadas nesta solicitação de restauração, mas você pode especificar opções como rename_pattern e rename_replacement. Para obter um resumo das opções de restauração de snapshots do OpenSearch, consulte a documentação do OpenSearch.

Snapshots manuais de índices mornos

Você pode obter snapshots manuais de índices mornos, mas não recomendamos fazer isso. O repositório cs-ultrawarm automatizado já contém um snapshot para cada índice de alta atividade, obtido durante a migração, sem custo adicional.

Por padrão, o OpenSearch Service não inclui índices warm em snapshots manuais. Por exemplo, a chamada a seguir inclui apenas índices quentes:

PUT _snapshot/my-repository/my-snapshot

Se você optar por obter snapshots manuais de índices mornos, diversas considerações importantes serão aplicáveis.

  • Você não pode misturar índices quentes e mornos. Por exemplo, a solicitação a seguir falha:

    PUT _snapshot/my-repository/my-snapshot { "indices": "warm-index-1,hot-index-1", "include_global_state": false }

    Se eles incluírem uma mistura de índices quentes e mornos, as instruções universais (*) também falharão.

  • Você só pode incluir um índice de alta atividade por snapshot. Por exemplo, a solicitação a seguir falha:

    PUT _snapshot/my-repository/my-snapshot { "indices": "warm-index-1,warm-index-2,other-warm-indices-*", "include_global_state": false }

    Esta solicitação é bem-sucedida:

    PUT _snapshot/my-repository/my-snapshot { "indices": "warm-index-1", "include_global_state": false }
  • Os snapshots manuais são sempre restaurados para o armazenamento de atividade muito alta, mesmo que tenham originalmente incluído um índice de alta atividade.

Migração de índices mornos para o armazenamento frio

Se você tem dados no UltraWarm que você consulta com pouca frequência, considere migrá-los para o armazenamento de baixa atividade. O armazenamento de baixa atividade é destinado a dados que você acessa apenas ocasionalmente ou que não estão mais em uso ativo. Você não pode ler nem gravar em índices frios, mas pode migrá-los de volta para o armazenamento morno sem nenhum custo sempre que precisar consultá-los. Para obter instruções, consulte Migração de índices para o armazenamento frio.

Desabilitar o UltraWarm

O console é a maneira mais simples de desabilitar o UltraWarm. Escolha o domínio, Actions (Ações), e Edit cluster configuration (Editar configuração do cluster). Desmarque Enable UltraWarm data nodes (Habilitar nós de dados UltraWarm) e escolha Save changes (Salvar alterações). Você também pode usar a opção WarmEnabled na AWS CLI e na API de configuração.

Antes de desabilitar o UltraWarm, você deve excluir todos os índices de alta atividade ou migrá-los de volta para o armazenamento de atividade muito alta. Depois que o armazenamento morno estiver vazio, aguarde cinco minutos antes de tentar desabilitar o UltraWarm.