Backup e restauração Elasticsearch Clusters com instantâneos

Backup e restauração Elasticsearch Clusters com instantâneos
Elasticsearch tem tudo a ver com dados e, como você provavelmente já sabe, os dados são importantes para você e o Elasticsearch. No entanto, tanto quanto você e os dados do Elasticsearch Love, podem ocorrer falhas de dados, levando à perda de dados.

Para ajudar a proteger contra a perda de dados, o Elasticsearch possui vários recursos que permitem garantir a disponibilidade de dados, mesmo nas instâncias de falha de dados.

Algumas das maneiras pelas quais o Elasticsearch usa para fornecer a disponibilidade de dados incluem:

  • Replicações de cluster cruzado, um recurso que permite replicar dados em um conjunto de clusters seguidores; Um cluster de seguidores é um cluster de espera usado em caso de falha do cluster mestre.
  • Outro método que elasticsearch usa para evitar dados usando backups-também chamados instantâneos de cluster. Se necessário, você pode usar esses instantâneos para restaurar dados em um cluster completamente novo.

Este tutorial mostra como criar instantâneos de cluster, o que ajudará você a estar pronto, caso ocorra um evento irreversível de falha de dados.

Vamos começar.

O que é um instantâneo de elasticsearch?

Como mencionado, um instantâneo elástico é uma cópia de backup de um cluster Elasticsearch em execução. Este instantâneo pode ser de um cluster inteiro ou índices e fluxos de dados específicos em um cluster específico.

Como você aprenderá em breve, um plug -in repositório gerencia instantâneos de elasticsearch. Esses instantâneos são armazenados em vários locais de armazenamento definidos pelo plug -in. Isso inclui sistemas locais e sistemas remotos, como armazenamento GCP, Amazon EC2, Microsoft Azure e muito mais.

Como criar um repositório de instantâneos de pesquisa de pesquisa

Antes de mergulharmos na criação de instantâneos do Elasticsearch, precisamos criar um repositório de instantâneos porque muitos dos serviços do Elasticsearch usam a API Snapshot para executar essas tarefas.

Algumas das tarefas tratadas pela API Snapshot são:

  • Coloque o repositório de instantâneos
  • Verifique o repositório de instantâneos
  • Obtenha repositório de instantâneos
  • Excluir repositório de instantâneos
  • Limpe o repositório de instantâneos
  • Crie instantâneo
  • Clone Snapshot
  • Obtenha instantâneo
  • Obtenha status de instantâneo
  • Restaure o instantâneo
  • Exclua instantâneo

Para criar um repositório de instantâneos, usamos o ponto final da API _SNAPSHOT, seguido pelo nome que queremos atribuir ao repositório de instantâneos. Considere a solicitação abaixo que cria um repositório chamado backup_repo

Put /_snapshot /backup_repo

"Tipo": "fs",
"configurações":
"Localização": "/home/root/backups",
"Compress": verdadeiro

Aqui está um comando curl para a solicitação acima:

Curl -xput "http: // localhost: 9200/_snapshot/backup_repo" -h 'content -type: application/json' -d '"type": "fs", "configurações": "location": "/" Home/raiz/backups "," Compress ": true '

Para passar no caminho do repositório instantâneo, você deve primeiro adicionar o caminho do sistema ou o diretório pai ao caminho.Entrada repositória no Elasticsearch.yml

O caminho.A entrada de repo deve ser semelhante a:

caminho.repo: ["/home/root/backups"]

Você pode encontrar o arquivo de configuração do Elasticsearch localizado em/etc/elasticsearch/Elasticsearch.yml

OBSERVAÇÃO: Depois de adicionar o caminho.Repo, pode ser necessário reiniciar os clusters Elasticsearch. Além disso, os valores suportados para o caminho.O repositório pode variar muito, dependendo da plataforma que executa o Elasticsearch.

Como ver o repositório de instantâneos

Para confirmar a criação bem -sucedida do repositório de instantâneos, use a solicitação GET com o endpoint _SNAPSHOT como:

Get /_snapshot /backup_repo

Você também pode usar o seguinte comando curl:

Curl -xget "http: // localhost: 9200/_snapshot/backup_repo"

Isso deve exibir informações sobre o repositório de backup, por exemplo:


"backup_repo":
"Tipo": "fs",
"configurações" :
"Compress": "Verdadeiro",
"Localização": "" "/home/root/backups" ""


Se você tiver mais de um repositório de instantâneos e não se lembra do nome, poderá omitir o nome do repo e chamar o endpoint _SNAPSHOT para listar todos os repositórios existentes.

Get/_SNAPSHOT ou CURL CURL -XGET http: // localhost: 9200/_snapshot

Como criar um instantâneo de elasticsearch

Criando um instantâneo de Elasticsearch para um repositório específico de instantâneo é tratado pela API Create Snapshot. A API requer o nome do repositório instantâneo e o nome do instantâneo.

OBSERVAÇÃO: Um único repositório de instantâneo pode ter mais de um instantâneo dos mesmos clusters, desde que tenham identidades/nomes únicos.

Considere a seguinte solicitação para adicionar um instantâneo chamado snapshot_2021 ao repositório backup_repo.

Put/_snapshot/backup_repo/snapshot_2021

Para usar o CURL, use o comando:

Curl -xput “http: // localhost: 9200/_snapshot/backup_repo/snapshot_2021”

O comando deve retornar uma resposta do Elasticsearch com 200 ok e aceito: true


"Aceito": verdadeiro

Como não especifica quais fluxos de dados e índices você deseja ter backup, chamando a solicitação acima backups de todos os dados e o estado do cluster. Para especificar quais fluxos de dados e índices fazer backup, adicione isso ao corpo de solicitação.

Considere o seguinte solicitação que backups .Índice Kibana (um índice de sistema) e especifica qual usuário autorizou o instantâneo e o motivo.

Put/_snapshot/backup_repo/snapshot_2

"índices": ".kibana ",
"ignore_unavilable": verdadeiro,
"Incluir_global_state": true,
"Metadata":
"Taken_by": "ElastastAdmin",
“Taken_because”: “Backup diário”

O comando Curl para isso é:

Curl -xput "http: // localhost: 9200/_snapshot/backup_repo/snapshot_2" -h 'content -type: Application/json' -d '"índices": ".kibana "," ignore_unavilable ": true," incluir_global_state ": true," metadata ": " Taken_by ":" elasticAdmin "," Taken_because ":" diariamente backup " ''

O ignore_unavilable define um estado booleano que retorna um erro se algum fluxo de dados ou índices especificados no instantâneo estiverem ausentes ou fechados.

O parâmetro incluído_global_state salva o estado atual do cluster se verdadeiro. Algumas das informações de cluster salvas incluem:

  • Configurações persistentes de cluster
  • Modelos de índice
  • Modelos de índice herdado
  • Ingestão de dutos
  • Políticas do ciclo de vida do ILM

OBSERVAÇÃO: Você pode especificar mais de um índices separados por vírgulas.

Um argumento comum usado com o endpoint _snapshot é wait_for_completion, um valor booleano que define se (true) ou não (false) a solicitação deve retornar imediatamente após a inicialização do instantâneo (padrão) ou aguardar uma conclusão de instantâneos.

Por exemplo:

Put/_snapshot/backup_repo/snapshot_3?espera_for_completion = true

"índices": ".kibana ",
"ignore_unavilable": verdadeiro,
"Incluir_global_state": false,
"Metadata":
"Taken_by": "ElastastAdmin",
“Taken_because”: “Backup semanal”

O comando Curl é:

Curl -xput "http: // localhost: 9200/_snapshot/backup_repo/snapshot_3?wait_for_completion = true "-h 'content -type: Application/json' -d '" índices ":".kibana "," ignore_unavilable ": true," incluir_global_state ": false," metadata ": " Taken_by ":" elasticAdmin "," Taken_because ":" weekly backup " ''

Quando você tiver o parâmetro wait_for_completion definido como true, você fornecerá uma saída semelhante à mostrada abaixo:


"Snapshot":
"Snapshot": "Snapshot_3",
"uuid": "tquhyofirngmmtw0agbacq",
"Version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"Data_streams": [],
"Incluir_global_state": false,
"Metadata":
"Taken_by": "ElastastAdmin",
“Taken_because”: “Backup semanal”
,
"estado": "sucesso",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"Duration_in_millis": 818,
"Falhas": [],
"Shards":
"Total": 1,
"falhou": 0,
"bem -sucedido": 1


Como visualizar instantâneos

A API Get Snapshot lida com a funcionalidade View Snapshots.

Tudo o que você precisa passar na solicitação é o repositório instantâneo e o nome do instantâneo que você deseja ver os detalhes.

O instantâneo deve responder com detalhes sobre um instantâneo especificado. Esses detalhes incluem:

  • Valores de início e término
  • A versão do Elasticsearch que criou o instantâneo
  • Lista de índices incluídos
  • O estado atual do instantâneo
  • Lista de falhas que ocorreram durante o instantâneo

Por exemplo, para visualizar os detalhes sobre o snapshot_3 criado acima, use a solicitação mostrada abaixo:

Get/_snapshot/backup_repo/snapshot_3
Para usar o CURL, use o comando abaixo:
[cc lang = "text" width = "100%" altura = "100%" escape = "true" tema = "Blackboard" Nowrap = "0"]
Curl -xget “http: // localhost: 9200/_snapshot/backup_repo/snapshot_3”

A solicitação deve retornar uma resposta com os detalhes do instantâneo como:


"Instantâneos": [

"Snapshot": "Snapshot_3",
"uuid": "tquhyofirngmmtw0agbacq",
"Version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"Data_streams": [],
"Incluir_global_state": false,
"Metadata":
"Taken_by": "ElastastAdmin",
“Taken_because”: “Backup semanal”
,
"estado": "sucesso",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"Duration_in_millis": 818,
"Falhas": [],
"Shards":
"Total": 1,
"falhou": 0,
"bem -sucedido": 1


]

Você também pode personalizar o corpo da solicitação para obter detalhes específicos sobre um instantâneo. No entanto, não vamos analisar isso por agora.

Digamos que você queira visualizar informações sobre todos os instantâneos em um repositório específico de instantâneo; Nesse caso, você pode passar um curinga de asterisco na solicitação como:

Get/_snapshot/backup_repo/*

O comando Curl para isso é:

Curl -xget “http: // localhost: 9200/_snapshot/backup_repo/*”

A resposta é um despejo detalhado de todos os instantâneos nesse repositório como:


"Instantâneos": [

"Snapshot": "Snapshot_2021",
"uuid": "7cfighzvrtyzw07c60d2iw",
"Version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
"My_index",
"single_index_with_body",
"my_index_2",
"single_index",
".kibana_1 ",
"teste"
],
"Data_streams": [],
"Incluir_global_state": true,
"estado": "sucesso",
"start_time": "2021-01-19T13: 28: 48.172Z ",
"start_time_in_millis": 1611062928172,
"end_time": "2021-01-19T13: 28: 50.831z ",
"end_time_in_millis": 1611062930831,
"Duration_in_millis": 2659,
"Falhas": [],
"Shards":
"Total": 7,
"falhou": 0,
"bem -sucedido": 7

,

"Snapshot": "Snapshot_2",
"uuid": "w58irymoraub8vc7cg04wg",
"Version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"Data_streams": [],
"Incluir_global_state": false,
"Metadata":
"Taken_by": "ElastastAdmin",
"Taken_because": "Backup diário"
,
"estado": "sucesso",
"start_time": "2021-01-19T13: 33: 34.482Z ",
"start_time_in_millis": 1611063214482,
"end_time": "2021-01-19T13: 33: 35.921z ",
"end_time_in_millis": 1611063215921,
"Duration_in_millis": 1439,
"Falhas": [],
"Shards":
"Total": 1,
"falhou": 0,
"bem -sucedido": 1

,

"Snapshot": "Snapshot_3",
"uuid": "tquhyofirngmmtw0agbacq",
"Version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"Data_streams": [],
"Incluir_global_state": false,
"Metadata":
"Taken_by": "ElastastAdmin",
“Taken_because”: “Backup semanal”
,
"estado": "sucesso",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
"Duration_in_millis": 818,
"Falhas": [],
"Shards":
"Total": 1,
"falhou": 0,
"bem -sucedido": 1


]

Os curingas são muito úteis para filtrar informações específicas sobre os instantâneos.

Como excluir um instantâneo

Excluir um instantâneo é muito simples: tudo o que você precisa fazer é usar a solicitação de exclusão como:

Delete/_snapshot/backup_repo/snapshot_2021/

O comando Curl é:

Curl -xdelete “http: // localhost: 9200/_snapshot/backup_repo/snapshot_2021/”

A resposta deve ser reconhecida: verdadeiro


"Reconhecido": verdadeiro

Se o instantâneo não existir, você receberá um código de status 404 e um erro de instantânea que está ausente como:


"Erro":
"causa raiz" : [

"Tipo": "Snapshot_missing_exception",
"Razão": "[backup_repo: snapshot_2021] está faltando"

],
"Tipo": "Snapshot_missing_exception",
"Razão": "[backup_repo: snapshot_2021] está faltando"
,
"Status": 404

Conclusão

Neste guia, discutimos como criar instantâneos de Elasticsearch usando a API Snapshot. O que você aprendeu deve ser suficiente para permitir que você crie um repositório de instantâneos, veja os repositórios de instantâneos, crie, visualize e exclua instantâneos. Embora haja personalizações que você possa fazer com a API, o conhecimento deste guia deve ser suficiente para você começar.

Obrigado pela leitura.