Criação de snapshots de índices no Amazon OpenSearch Service
Snapshots no Amazon OpenSearch Service são backups dos índices e do estado de um cluster. O estado inclui configurações do cluster, informações de nó, configurações de índice e alocação de fragmentos.
Os snapshots do OpenSearch Service podem estar nos seguintes formatos:
-
Os snapshots automatizados são apenas para recuperação de cluster. Você pode usá-los para restaurar seu domínio em caso de status de cluster vermelho ou perda de dados. Para obter mais informações, consulte Restauração de snapshots abaixo. O OpenSearch Service armazena snapshots automatizados em um bucket do Amazon S3 do pré-configurado sem custo adicional.
-
Os snapshots manuais são usados na recuperação de clusters ou na movimentação de dados de um cluster para outro. Você precisa iniciar os snapshots manuais. Esses snapshots são armazenados no seu próprio bucket do Amazon S3, e cobranças padrão do S3 são aplicáveis. Se você tiver um snapshot de um cluster autogerenciado do OpenSearch, poderá até usar esse snapshot para migrar para um domínio do OpenSearch Service. Para obter mais informações, consulte Migração para o Amazon OpenSearch Service.
Todos os domínios do OpenSearch Service têm snapshots automatizados, mas a frequência apresenta as seguintes diferenças:
-
Para domínios executando o OpenSearch ou Elasticsearch 5.3 ou posterior, o OpenSearch Service obtém snapshots automatizados a cada hora e retém até 336 deles por 14 dias. Os snapshots por hora são menos disruptivos em função de sua natureza incremental. Eles também fornecem um ponto de recuperação mais recente, caso haja problemas em domínios.
-
Para domínios executando o Elasticsearch 5.1 ou anterior, o OpenSearch Service obtém snapshots automatizados diários no horário especificado por você e retém até 14 deles, mas não retém nenhum dado de snapshot por mais de 30 dias.
Se o cluster entrar no status vermelho, todos os snapshots automatizados falharão enquanto o status do cluster persistir. Se você não corrigir o problema em até duas semanas, poderá perder permanentemente os dados do cluster. Para obter etapas sobre a solução de problemas, consulte Status de cluster vermelho.
Tópicos
Pré-requisitos
Para criar os snapshots manualmente, é necessário trabalhar com o IAM e o Amazon S3. Verifique se você atende aos seguintes pré-requisitos antes de tentar criar um snapshot:
Pré-requisito | Descrição |
---|---|
S3 bucket | Crie um bucket do S3 para armazenar snapshots manuais para o domínio do OpenSearch Service. Para obter mais informações, consulte Create a Bucket (Criar um bucket) no Manual do usuário do Amazon Simple Storage Service. Lembre-se do nome do bucket para usá-lo nos seguintes locais:
Não aplique uma regra de ciclo de vida do S3 Glacier a esse bucket. Os snapshots manuais não são compatíveis com a classe de armazenamento do S3 Glacier. |
IAM role (Função do IAM) | Crie uma função do IAM para delegar permissões ao OpenSearch Service. Para obter instruções, consulte Criação de funções do IAM (console) no Manual do usuário do IAM. O restante deste capítulo se refere a essa função como Anexar uma política do IAM Anexe a política a seguir ao
Para obter instruções de como associar uma política gerenciada a uma função, consulte Adição de permissões de identidade do IAM no Manual do usuário do IAM. Editar a relação de confiança Edite a relação de confiança de
Recomendamos o uso das chaves de condição Por exemplo, você poderia adicionar o bloco de condições a seguir na política de confiança:
Para obter instruções de como editar a relação de confiança, consulte Modificação da política de confiança de uma função no Manual do usuário do IAM. |
Permissões |
Para registrar o repositório de snapshots, você precisa ser capaz de passar
Se seu usuário ou função não tiver permissões
|
Registro de um repositório de snapshots manuais
Você deve registrar o repositório de snapshots com o OpenSearch Service antes de poder fazer snapshots de índices manuais. Esta operação única exige que você assine a solicitação da AWS com credenciais que têm permissão para acessar TheSnapshotRole
, conforme descrito em Pré-requisitos.
Etapa 1: Mapear a função de snapshot no OpenSearch Dashboards (se estiver usando um controle de acesso refinado)
O controle de acesso refinado introduz uma etapa adicional ao registrar um repositório. Mesmo se você usar a autenticação básica HTTP para todos os outros fins, será necessário mapear a função manage_snapshots
em seu usuário ou função do IAM que tem permissões iam:PassRole
para passar TheSnapshotRole
.
-
Navegue até o plugin OpenSearch Dashboards para seu domínio do OpenSearch Service. Você pode encontrar o endpoint do Dashboards no painel do seu domínio no console do OpenSearch Service.
-
No menu principal, escolha Security (Segurança), Roles (Funções) e selecione a função manage_snapshots.
-
Escolha Mapped users (Usuários mapeados) e Manage mapping (Gerenciar mapeamento).
-
Adicione o ARN do domínio do usuário ou função que tem permissões para passar
TheSnapshotRole
. Coloque ARNs de usuário em Users (Usuários) e ARNs de funções em Backend roles (Funções de backend).arn:aws:iam::
123456789123
:user/user-name
arn:aws:iam::
123456789123
:role/role-name
-
Selecione Map (Mapa) e confirme se o usuário ou função aparece em Mapped users (Usuários mapeados).
Etapa 2: Registrar um repositório
Para registrar um repositório de snapshots, envie uma solicitação PUT para o endpoint do domínio do OpenSearch Service. Você não pode usar curl
para executar essa operação porque ele não comporta a assinatura de solicitações da AWS. Em vez disso, use o cliente do Python de amostra, Postman
O cabeçalho assume o seguinte formato:
PUT
domain-endpoint
/_snapshot/my-snapshot-repo-name
{ "type": "s3", "settings": { "bucket": "s3-bucket-name
", "region": "region
", "role_arn": "arn:aws:iam::123456789012
:role/TheSnapshotRole
" } }
Os nomes dos repositórios não podem começar com “cs-”.
Se o domínio residir em uma nuvem privada virtual (VPC), o computador deverá estar conectado à VPC para que a solicitação registre o repositório de snapshots com êxito. O acesso a uma VPC varia de acordo com a configuração de rede, mas geralmente requer uma conexão com VPN ou rede corporativa. Para saber se você pode alcançar o domínio do OpenSearch Service, navegue até https://
em um navegador da Web e confira se você recebe a resposta JSON padrão.your-vpc-domain
.region
.es.amazonaws.com
Criptografia de repositórios de snapshots
No momento, você não pode usar chaves do AWS Key Management Service (KMS) para criptografar snapshots manuais, mas pode protegê-los usando criptografia no lado do servidor (SSE).
Para habilitar a SSE com chaves gerenciadas pelo S3 para o bucket que você usa como repositório de snapshots, adicione "server_side_encryption": true
ao bloco "settings"
da solicitação PUT. Para obter mais informações, consulte Proteção de dados usando criptografia no lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 no Manual do usuário do Amazon Simple Storage Service.
Você também pode usar chaves do AWS KMS para criptografia no lado do servidor no bucket do S3 que utiliza como repositório de snapshots. Se você usar essa abordagem, certifique-se de fornecer a permissão TheSnapshotRole
para a chave do AWS KMS usada para criptografar o bucket do S3. Para obter mais informações, consulte Usar políticas de chaves no AWS KMS.
Migração de dados para um domínio diferente
O registro de um repositório de snapshots é uma operação única. No entanto, para migrar de um domínio para outro, é necessário registrar o repositório de snapshots no domínio antigo e no novo. O nome do repositório é arbitrário.
Considere as seguintes diretrizes ao migrar para um novo domínio ou registrar o mesmo repositório com vários domínios por algum outro motivo:
-
Ao registrar o repositório no novo domínio, adicione
"readonly": true
para o bloco"settings"
da solicitação PUT. Essa configuração impede que você sobrescreva acidentalmente dados do domínio antigo. -
Se estiver migrando dados para um domínio em uma região diferente (por exemplo, de um domínio antigo e um bucket localizado em us-east-2 para um novo domínio em us-west-2), você poderá ver este erro 500 ao enviar a solicitação PUT:
The bucket is in this region: us-east-2. Please use this region to retry the request.
Se você encontrar esse erro, experimente substituir
"region": "us-east-2"
por"endpoint": "s3.amazonaws.com"
na instrução PUT e repita a solicitação.
Uso do cliente Python de exemplo
O cliente Python é mais fácil de automatizar do que uma simples solicitação HTTP, além de ser mais fácil reutilizá-lo. Se você optar por usar esse método para registrar um repositório de snapshots, salve o seguinte código de exemplo Python como um arquivo Python. Por exemplo, register-repo.py
. O cliente exige os pacotes AWS SDK for Python (Boto3)
Um código de exemplo baseado em Java está disponível em Assinar solicitações de HTTP.
Atualize as seguintes variáveis no código de exemplo: host
, region
, path
e payload
.
import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # include https:// and trailing / region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '_snapshot/
my-snapshot-repo-name
' # the OpenSearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name
", "region": "us-west-1
", "role_arn": "arn:aws:iam::123456789012
:role/TheSnapshotRole
" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '_snapshot/my-snapshot-repo-name/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indexes except Dashboards and fine-grained access control) # # path = '_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)
Obtenção manual de snapshots
Os snapshots não são instantâneos. Eles levam tempo para ser concluídos e não representam exibições pontuais perfeitas do cluster. Enquanto um snapshot está em andamento, você ainda pode indexar documentos e fazer outras solicitações ao cluster, mas novos documentos e atualizações em documentos existentes geralmente não são incluídos no snapshot. O snapshot inclui os fragmentos primários que já existiam quando o snapshot foi iniciado. Dependendo do tamanho do grupo de threads de snapshot, diferentes fragmentos podem ser incluídos no snapshot em momentos um pouco diferentes.
Armazenamento e performance de snapshots
Os snapshots do OpenSearch são incrementais, o que significa que eles armazenam somente os dados que foram alterados desde o último snapshot bem-sucedido. Essa natureza incremental significa que a diferença no uso de disco entre snapshots frequentes e infrequentes normalmente é mínima. Ou seja, criar snapshots por hora por uma semana (em um total de 168 snapshots) pode não usar muito mais espaço em disco do que criar um único snapshot no final da semana. Além disso, quanto maior a frequência da criação de snapshots, menos tempo eles demoram para serem concluídos. Por exemplo, snapshots diários podem levar de 20 a 30 minutos para serem concluídos, enquanto os snapshots por hora podem ser concluídos em poucos minutos. Alguns usuários do OpenSearch obtêm snapshots até mesmo a cada meia hora.
Faça um snapshot
Ao criar um snapshot, você especifica as seguintes informações:
-
O nome do repositório de snapshots
-
Um nome para o snapshot
Os exemplos neste capítulo usam curl
Para obter um snapshot manual, faça o seguinte:
-
Você não poderá obter um snapshot se houver um em andamento no momento. Para verificar, execute o seguinte comando:
curl -XGET '
domain-endpoint
/_snapshot/_status' -
Execute o comando a seguir para obter um snapshot manual:
curl -XPUT '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
'Para incluir ou excluir determinados índices e especificar outras configurações, adicione um corpo de solicitação. Para a estrutura da solicitação, consulte Fazer snapshots
na documentação do OpenSearch.
O tempo necessário para obter um snapshot aumenta de acordo com o tamanho do domínio do OpenSearch Service. As operações de snapshot de longa duração, às vezes, encontram o seguinte erro: 504 GATEWAY_TIMEOUT
. Normalmente, você pode ignorar esses erros e esperar até que a operação seja concluída com êxito. Execute o comando a seguir para verificar o estado de todos os snapshots de seu domínio:
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'
Restauração de snapshots
Se você usar aliases de índice, interrompa as solicitações de gravação para um alias ou mude o alias para outro índice antes de excluir seu índice. Parar as solicitações de gravação ajuda a evitar o seguinte cenário:
-
Você exclui um índice, que também exclui seu alias.
-
Uma solicitação de gravação com erro para o alias recém-excluído cria um novo índice com o mesmo nome do alias.
-
Você não pode mais usar o alias devido a um conflito de nomes com o novo índice.
Se você alternou o alias para outro índice, especifique "include_aliases": false
ao restaurar a partir de um snapshot.
Para restaurar um snapshot, faça o seguinte:
-
Identifique o snapshot que deseja restaurar. Para ver todos os repositórios de snapshots, execute o comando a seguir:
curl -XGET '
domain-endpoint
/_snapshot?pretty'Após identificar o repositório, execute o comando a seguir para ver todos os snapshots:
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'nota A maioria dos snapshots automatizados é armazenada no repositório
cs-automated
. Se o seu domínio criptografa dados em repouso, eles são armazenados no repositóriocs-automated-enc
. Se não encontrar o repositório de snapshots manuais que estava buscando, confirme se você o registrou no domínio. -
(Opcional) Exclua ou renomeie um ou mais índices no domínio do OpenSearch Service se você tiver conflitos de nomenclatura de índices no cluster e de índices no snapshot. Não é possível restaurar um snapshot de seus índices para um cluster do OpenSearch que já contenha índices com os mesmos nomes.
Você terá as seguintes opções em caso de conflitos de nomenclatura de índice:
-
Exclua os índices no mesmo domínio do OpenSearch Service e restaure o snapshot.
-
Renomeie os índices à medida que os restaura no snapshot e reindexe-os mais tarde.
-
Restaure o snapshot para um domínio diferente do OpenSearch Service (isso só é possível com snapshots manuais).
O seguinte comando exclui todos os índices existentes em um domínio:
curl -XDELETE '
domain-endpoint
/_all'No entanto, se você não planeja restaurar todos os índices, pode simplesmente excluir um:
curl -XDELETE '
domain-endpoint
/index-name
' -
-
Para restaurar um snapshot, execute o seguinte comando:
curl -XPOST '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
/_restore'Devido a permissões especiais no OpenSearch Dashboards e índices de controle de acesso refinado, as tentativas de restaurar todos os índices podem falhar, especialmente se você tentar fazer a restauração em um snapshot automatizado. O exemplo a seguir restaura apenas um índice
my-index
de2020-snapshot
no repositório de snapshotscs-automated
:curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' -d '{"indices": "my-index"}' -H 'Content-Type: application/json'Como alternativa, é possível restaurar todos os índices, exceto os índices de controle de acesso refinado e o Dashboards:
curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' -d '{"indices": "-.kibana*,-.opendistro*"}' -H 'Content-Type: application/json'
Se nem todos os fragmentos principais estiverem disponíveis para os índices envolvidos, o state
do snapshot poderá ser PARTIAL
. Esse valor indica que os dados de pelo menos um fragmento não foram armazenados com êxito. Mesmo assim é possível restaurar por meio de um snapshot parcial, mas pode ser necessário usar snapshots mais antigos para restaurar índices ausentes.
Excluir snapshots manuais
Para excluir um snapshot manual, execute o seguinte comando:
DELETE _snapshot/
repository-name
/snapshot-name
Automação de snapshots com o Gerenciamento de estados de índices
Você pode usar a operação snapshot
do Gerenciamento de estados de índices (ISM) para acionar automaticamente instantâneos de índices com base em alterações em sua idade, tamanho ou número de documentos. Para obter um exemplo de política do ISM usando a operação snapshot
, consulte Políticas de exemplo.
Uso do Curator para snapshots
Se o ISM não funcionar para o gerenciamento de índices e snapshots, você poderá usar o Curator. Ele oferece funcionalidade de filtragem avançada que pode ajudar a simplificar tarefas de gerenciamento em clusters complexos. Use o pip
pip install elasticsearch-curator
Você pode usar o Curator como uma interface de linha de comando (CLI) ou API do Python. Se você usar a API do Python, deverá usar a versão 7.13.4 ou anterior do cliente elasticsearch-py
Se você usar a CLI, exporte suas credenciais na linha de comando e configure o curator.yml
da seguinte maneira:
client: hosts: search-
my-domain
.us-west-1
.es.amazonaws.com port: 443 use_ssl: True aws_region:us-west-1
aws_sign_request: True ssl_no_validate: False timeout: 60 logging: loglevel: INFO