Elastic Search

Backup e restauração de clusters Elasticsearch com instantâneos

Backup e restauração de clusters Elasticsearch 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, na medida em que você e o Elasticsearch adoram dados, podem ocorrer falhas de dados, levando à perda de dados.

Para ajudar na proteção contra perda de dados, Elasticsearch tem vários recursos que permitem garantir a disponibilidade dos dados, mesmo em casos de falha de dados.

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

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

Vamos começar.

O que é um instantâneo do Elasticsearch?

Conforme 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 específicos e fluxos de dados dentro de um determinado cluster.

Como você aprenderá em breve, um plugin de repositório gerencia instantâneos do Elasticsearch. Esses instantâneos podem ser armazenados em vários locais de armazenamento definidos pelo plug-in. Isso inclui sistemas locais e sistemas remotos, como GCP Storage, Amazon EC2, Microsoft Azure e muitos mais.

Como criar um repositório Elasticsearch Snapshot

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 de instantâneo para executar essas tarefas.

Algumas das tarefas gerenciadas pela API Snapshot são:

Para criar um repositório de instantâneos, usamos o ponto de extremidade 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",
"definiçõ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", "settings": "location": "/ home / root / backups "," compress ": true '

Para passar o caminho do repositório de instantâneos, você deve primeiro adicionar o caminho do sistema ou o diretório pai ao caminho.entrada repo em elasticsearch.yml

O caminho.a entrada do repo deve ser semelhante a:

caminho.repo: [“/ home / root / backups”]

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

NOTA: Depois de adicionar o caminho.repo, pode ser necessário reiniciar clusters Elasticsearch. Além disso, os valores suportados para path.O repo pode variar muito, dependendo da plataforma que executa o Elasticsearch.

Como visualizar o repositório de instantâneos

Para confirmar a criação bem-sucedida do repositório de instantâneo, 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",
"definições" :
"compress": "true",
"localização": "" "/ home / root / backups" ""


Se você tiver mais de um repositório de instantâneos e não se lembrar do nome, pode 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 do Elasticsearch

A criação de um instantâneo Elasticsearch para um repositório de instantâneo específico é tratada pela API de criação de instantâneo. A API requer o nome do repositório de instantâneo e o nome do instantâneo.

NOTA: Um único repositório de instantâneos pode ter mais de um instantâneo dos mesmos clusters, desde que tenham identidades / nomes exclusivos.

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 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: verdadeiro


"aceito": verdadeiro

Uma vez que não especifica quais fluxos de dados e índices você deseja fazer backup, chamar a solicitação acima faz backup de todos os dados e do estado do cluster. Para especificar quais fluxos de dados e índices fazer backup, adicione isso ao corpo da solicitação.

Considere a seguinte solicitação que faz backup do .índice kibana (um índice do sistema) e especifica qual usuário autorizou o instantâneo e o motivo.

PUT / _snapshot / backup_repo / snapshot_2

"índices": ".kibana ",
"ignore_unavailable": verdadeiro,
"include_global_state": verdadeiro,
"metadados":
"taken_by": "elasticadmin",
“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 '"indices": ".kibana "," ignore_unavailable ": true," include_global_state ": true," metadata ": " taken_by ":" elasticadmin "," taken_because ":" Backup diário " '

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

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

NOTA: Você pode especificar mais de um índice separado por vírgulas.

Um argumento comum usado com o ponto de extremidade _snapshot é wait_for_completion, um valor booleano que define se (verdadeiro) ou não (falso) a solicitação deve retornar imediatamente após a inicialização do instantâneo (padrão) ou esperar pela conclusão do instantâneo.

Por exemplo:

PUT / _snapshot / backup_repo / snapshot_3?wait_for_completion = true

"índices": ".kibana ",
"ignore_unavailable": verdadeiro,
"include_global_state": false,
"metadados":
"taken_by": "elasticadmin",
“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 '" indices ":".kibana "," ignore_unavailable ": true," include_global_state ": false," metadata ": " taken_by ":" elasticadmin "," taken_because ":" Backup semanal " '

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


"instantâneo":
"instantâneo": "instantâneo_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadados":
"taken_by": "elasticadmin",
“Taken_because”: “Backup semanal”
,
"state": "SUCCESS",
"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": [],
"fragmentos":
"total": 1,
"falhou": 0,
"bem-sucedido": 1


Como visualizar instantâneos

A API GET snapshot lida com a funcionalidade de visualização de instantâneos.

Tudo que você precisa para passar na solicitação é o repositório de instantâneos 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:

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 cURL, use o comando abaixo:
[cc lang = "texto" largura = "100%" altura = "100%" escaped = "verdadeiro" tema = "quadro-negro" 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": [

"instantâneo": "instantâneo_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadados":
"taken_by": "elasticadmin",
“Taken_because”: “Backup semanal”
,
"state": "SUCCESS",
"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": [],
"fragmentos":
"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 agora.

Digamos que você deseja visualizar informações sobre todos os instantâneos em um repositório de instantâneos específico; nesse caso, você pode passar um caractere 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": [
"meu_index",
"single_index_with_body",
"meu_index_2",
"single_index",
".kibana_1 ",
"teste"
],
"data_streams": [],
"include_global_state": verdadeiro,
"state": "SUCCESS",
"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": [],
"fragmentos":
"total": 7,
"falhou": 0,
"bem-sucedido": 7

,

"instantâneo": "instantâneo_2",
"uuid": "w58IrYmORAub8VC7cg04Wg",
"version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadados":
"taken_by": "elasticadmin",
"taken_because": "Backup diário"
,
"state": "SUCCESS",
"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": [],
"fragmentos":
"total": 1,
"falhou": 0,
"bem-sucedido": 1

,

"instantâneo": "instantâneo_3",
"uuid": "tQUHyofIRnGMMtw0AGBACQ",
"version_id": 7100299,
"versão": "7.10.2 ",
"índices": [
".kibana_1 "
],
"data_streams": [],
"include_global_state": false,
"metadados":
"taken_by": "elasticadmin",
“Taken_because”: “Backup semanal”
,
"state": "SUCCESS",
"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": [],
"fragmentos":
"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 DELETE 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âneo ausente como:


"erro":
"causa raiz" : [

"tipo": "snapshot_missing_exception",
"reason": "[backup_repo: snapshot_2021] está faltando"

],
"tipo": "snapshot_missing_exception",
"reason": "[backup_repo: snapshot_2021] está faltando"
,
"status": 404

Conclusão

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

Obrigado por ler.

Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...
Como usar o GameConqueror Cheat Engine no Linux
O artigo cobre um guia sobre como usar o mecanismo de cheat GameConqueror no Linux. Muitos usuários que jogam no Windows costumam usar o aplicativo “C...
Melhores emuladores de console de jogo para Linux
Este artigo irá listar software de emulação de console de jogo popular disponível para Linux. A emulação é uma camada de compatibilidade de software q...