Realizando e restaurando snapshots no ElasticSearch

Anselmo Borges
Rescue Point
Published in
6 min readMar 29, 2021
Como fazer aquele backup salvador dos seus indices

Nesse tutorial eu explico como realizar a configuração de um repositório em um cluster usando NFS e setando as configurações que vão possibilitar os meus backups. Segue abaixo como está configurado o meu ambiente em cluster.

Cluster Elasticsearch de 3 nodes

Como podem ver, tenho um cluster de 3 nodes com ElasticSearch 7.4 o Kibana fica apenas no primeiro node, configurei um disco de 1TB e estou entregando via NFS para os outro 2 servidores. Estou usando um disco apenas de 1TB e compatilhando com as outras maquinas pois não tenho mais 2 discos de 1TB e também que meu backup fica centralizado. Não sabe fazer NFS? O pai ajuda! rs

Configurando o NFS

Meus servidores são CentOS 7 então vou passar basicamente como fiz nele, nos 3 nodes eu instalei os seguintes pacotes:

yum install nfs-utils nfs-utils-lib -y

Feito a instalação no node 1 eu starto os serviços abaixo:

systemctl start rpcbind
systemctl start nfslock
systemctl start nfs

Nos outros 2 que serão clients starto somente o spcbind:

systemctl start rpcbind

Agora no node 1 eu configuro que diretório vou compartilhar, no meu caso é o “/repo”, devo realizar as entradas no arquivo “/etc/exports”

/repo   joanna02(rw,sync,no_root_squash,no_subtree_check,insecure)
/repo joanna03(rw,sync,no_root_squash,no_subtree_check,insecure)

Como eu tenho os hosts cadastrados no /etc/hosts da minha maquina eu coloquei a liberação por hosts (joanna02 e joanna03).

Agora com o arquivo configurado vamos efetivar o share desses discos no servidor joanna01.

exportfs -a
systemctl restart nfs

Feito isso vou nas maquinas clients (joanna02 e joanna03) e crio nelas também o diretório /repo.

mkdir /repo

Agora vamos editar o arquivo /etc/fstab para que essas montagens sejam efetivadas sempre que o servidor for rebootado. Insira as linhas abaixo para os 2 servers.

## Montagem NFS do diretorio de repositório
joanna01:/repo /repo nfs defaults 0 0

OBS: Joanna01 pois ela é nosso NFS server.

Agora com o arquivo ditado basta dar um “mount -a” e o disco vai ser montado e exibido em um df -h

[root@joanna02 ~]# df -h
Sist. Arq. Tam. Usado Disp. Uso% Montado em
devtmpfs 3,9G 0 3,9G 0% /dev
tmpfs 3,9G 0 3,9G 0% /dev/shm
tmpfs 3,9G 17M 3,9G 1% /run
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 400G 117G 284G 30% /
/dev/mapper/centos-home 49G 33M 49G 1% /home
/dev/sda1 1014M 190M 825M 19% /boot
joanna01:/repo 900G 32M 900G 1% /repo
tmpfs 799M 0 799M 0% /run/user/0

Configurando o repositório no ElasticSearch:

Agora que temos o /repo nos 3 nodes do cluster vamos adicionar a entrada de repositório no “/etc/elasticsearch/elasticsearch.yml” (pois realizei as instalações via RPM) adicionamos a entrada abaixo nesse arquivo nos 3 nodes:

## Repositório de backups do Elastic:
path.repo: /repo

Feito isso, rodo o comando de restart nos 3 nodes do elasticsearch:

systemctl restart elasticsearch

OBS: é importante que o /repo tenha os privilégios do user owner do elasticsearch, no meu caso é elasticsearch portanto rode o comando caso não seja root o owner:

chown elasticsearch:elasticsearch -R /repo

Agora pela interface do Kibana via Dev tools eu adiciono as entradas abaixo para registrar esse meu repositório.

PUT _snapshot/repositorio
{
"type": "fs",
"settings": {
"location": "/repo"
}
}

Na tela seria o seguinte:

Cole o comando ai e rode shift + Enter

Para validarmos se nosso repositório foi criado, podemos ir pela tela de configuração do kibana > ElasticSearch > Snapshot and Restore e clicamos na guia repositório.

Todos os repositórios configurados são listados nessa tela.

Fizemos a criação do repositório na mão via código, mas poderíamos ter ido nessa tela e clicado em “Register a repository”

Criando um repositório no modo Windows, rs

Bom agora que temos nosso repositório vou iniciar um snapshot de um indice qualquer. No meu caso estou fazendo do heartbeat e estou dando o nome do snapshot de “backup_heartbeat”.

PUT _snapshot/repositorio/backup_heartbeat
{
"indices": "heartbeat-7.3.2",
"ignore_unavailable": true,
"include_global_state": true
}

Rodo ele pelo “Dev Tools” assim como a criação, lembrando que mais uma vez estamos fazendo na mão.

Rodando a criação do snapshot na mão via Dev tools

Podemos conferir agora se o snapshot foi gerado de algumas formas . A primeira é dando um “ls” lá na nossa pasta repo.

[root@joanna02 repo]# cd /repo
[root@joanna02 repo]# ls -lh
total 496K
-rw-r--r--. 1 elasticsearch elasticsearch 186 Out 2 18:43 index-0
-rw-r--r--. 1 elasticsearch elasticsearch 8 Out 2 18:43 index.latest
drwxr-xr-x. 3 elasticsearch elasticsearch 36 Out 2 18:43 indices
-rw-r--r--. 1 elasticsearch elasticsearch 482K Out 2 18:43 meta-fqczYe46REGwTIDSicg34A.dat
-rw-r--r--. 1 elasticsearch elasticsearch 268 Out 2 18:43 snap-fqczYe46REGwTIDSicg34A.dat

Podemos também rodar o comando abaixo no dev tools ou via API. Sendo “repositório” o repositório criado a pouco.

GET _snapshot/repositorio/_all

Aqui já conseguimos ver que foram criados arquivos e a outra é no “nutella mode” na pagina do Kibana, configurações > elasticsearch > snapshots and restore.

Listagem dos snapshots realizados.

Podemos pelo modo gráfico criar um snapshot agendado de um indice em “Policies”. Nesse exemplo coloquei pra fazer todo dia a 1 da manhã.

Criando a policy.

Nessa próxima tela eu posso escolher se vou fazer o snapshot de todos os indices ou se vou fazer apenas de alguns.

Caso você não queira fazer o snapshot de todos basta setar quais.

Agora ele dá um review da policy criada, estando tudo certo só criar.

Criando a Policy.

Restaurando um indice:

Agora a parte que ninguém quer usar mas todo mundo deve saber, como restaurar. O restore do indice é bem simples pelo modo gráfico, vou deletar aquele indice do heartbeat para testarmos. Caso queira deletar rode esse comando abaixo no “dev tools” com o indice que você fez o backup (vai que vc deleta o indice errado, rs)

DELETE /heartbeat-7.3.2

Com meu indice deletado agora vamos restaurar lá pela tela que já vimos dos snapshots, basta clicar em restore.

Restaurando o snapshot

Clicando no ícone do restore essa tela com algumas opções vai ser exibida.

Restaurando o indice.
Caso queira modificar algo como shard e outras configurações é aqui que pode ser feito
Pronto, fácil demais!

O meu restore foi concluído, e é exibido o status na tela a seguir.

Restore concluído.

Caso você queira restaurar na mão, pode usar o comando abaixo.

POST _snapshot/repositorio/backup_heartbeat/_restore
{
"indices": "heartbeat-7.3.2",
"ignore_unavailable": true,
"include_global_state": false
}

Podemos validar também indo fazer uma consulta nesse índice pelo “dev tools”.

Olha o indice ae!!

Bom era isso, se fizer merda já sabe onde vir procurar como desfazer, mas seria melhor se você tivesse backup, rs.

Anselmo Borges.

--

--

Anselmo Borges
Rescue Point

Bigdata Engineer, Cloud Architect, Nerd, Alcoholic, Brazilian Jiujitsu Black belt and hide and seek World champion.