Realizando e restaurando snapshots no ElasticSearch
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.
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:
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.
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”
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.
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.
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ã.
Nessa próxima tela eu posso escolher se vou fazer o snapshot de todos os indices ou se vou fazer apenas de alguns.
Agora ele dá um review da policy criada, estando tudo certo só criar.
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.
Clicando no ícone do restore essa tela com algumas opções vai ser exibida.
O meu restore foi concluído, e é exibido o status na tela a seguir.
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”.
Bom era isso, se fizer merda já sabe onde vir procurar como desfazer, mas seria melhor se você tivesse backup, rs.
Anselmo Borges.