segunda-feira, 18 de dezembro de 2017

Linux - Restore de volume group no mesmo servidor


Olá pessoal, tudo bem?

Podemos nos deparar com algumas situações complicadas em nosso dia a dia de trabalho e com certeza uma das mais complicados é quando perdemos algo, como um arquivo importante, um FS, um banco de dados ou até mesmo um servidor.

Temos que recorrer as nossas soluções de contorno como replicação, servidores que fazem pares e o mais comum, que é recorrer ao backup.

Mas e quando o backup não "funciona corretamente"?

Coloquei entre aspas, pois as vezes podemos nos deparar com cenários que deveriam funcionar sem problemas mas por alguma incompatibilidade seja pela versão do SO, ou do time de FS que estamos utilizando, dentre outras, pode impactar o restore de um determinado dado.

Pois bem...
Pensando no mundo virtual que temos hoje em dia, é muito comum vários ambientes rodarem em cima de virtualização.
E por consequência disso temos que ter soluções de backup que se adéquem ao nosso ambiente.

Temos soluções de backup que podem fazer snapshot de máquinas virtuais e voltar dados granulares, ou seja, de algum arquivo que precisamos e não do servidor todo.

Mas e se isso não funcionar?
Podemos subir um novo servidor e pegar os dados também?
Claro, podemos também.

Mas depois como eu copio o que preciso?
Muito provavelmente neste cenário aqui iremos utilizar rede e precisaremos de um IP temporário para este novo servidor e dependendo do time que cuida disso pode ser um tanto quanto demorado. Podemos esbarrar em problemas de regra de firewall, etc.

Vou mostrar aqui uma solução que pode ser seguida como uma alternativa.

Primeiro vamos ao cenário:

1 - Nos testes estou utilizando duas máquinas virtuais rodando em cima de Oracle Virtual Box;
2 - Cada servidor está instalado com CentOS, inicialmente para montar o ambiente cada servidor com um disco de 8GB adicional para APP, ambos com o mesmo nome de VG e LVs;
3 - Criado dados aleatórios para podermos ver os dados no servidor de destino;
4 - Por fim, o servidor que serial o meu "backup/snapshot", irá ser desligado e o disco dele apresentado para o servidor destino que irá fazer o restore e que está em produção;

Imaginando que o restore do snapshot tenha finalizado para um novo servidor, vamos desmontar os filesystems que compõem o VG em que estão e fazer o export do VG.

#umount /app1
#umount /app_bkp


#vgexport vg_app

Feito isso, o VG deve aparecer com o status de exported quando executarmos o comando vgdisplay.

Agora é só desligar o servidor.
#shutdown -h now

Através da console de administração do seu ambiente virtual, adicionar o disco no servidor que recebera o restore, lembrando que devemos selecionar o disco existente corretamente.

Feito isso, no servidor que será feito o restore dos dados, precisamos verificar se o disco foi reconhecido e suas configurações.
Claro que podemos ter o path dele alterado, como por exemplo, no servidor antigo estava como /dev/sdb1 e no novo aparecer como /dev/sdc1.

Rodando o comando vgdisplay, já podemos ver os dois VGs com o mesmo nome mas o que vamos utilizar no restore ainda com a informação de exported.

Como não é possível iniciarmos dois VGs com o mesmo nome, antes de tudo temos que alterar o nome do VG que está como exported. Para isso precisamos utilizar o VG UUID que é único:

#vgrename paOEZB-mqVS-3oHX-Gf5n-iAJ2-tLvG-zba1aD vg_app-RESTORE

Agora na saída do comando vgdisplay devemos ver o antigo VG com o nome vg_app-RESTORE.

Feito isso, podemos fazer o import do VG com o comando:
#vgimport vg_app-RESTORE

Agora o status do VG deve aparecer com o status de resizable.

Mas se já tentarmos montar os LVs deste VG, iremos receber um erro informando que não temos o LV em questão para montar.
Isso por que eles ainda estão inativos, como podemos ver com o comando:

#lvscan

A saída deste comando irá mostrar o status inactive.

Como não precisamos de todos os LVs neste exemplo, vamos escolher apenas o que vamos utilizar para o restore e habilitá-lo com o comando:

#lvchange -a y /dev/vg_app-RESTORE/lv_app_bkp

Feito isso o status do LV deve aparecer como ACTIVE.

Podemos montá-lo agora no path que queremos.
No meu caso eu criei um diretório com o nome de /restore

#mount /dev/vg_app-RESTORE/lv_app_bkp /restore/

E pronto, os dados que precisamos estão aqui.

Neste exemplo eu tentei demonstrar com uma necessidade de restore e devido a um problema da ferramenta de backup não conseguirmos fazer o restore de forma granular, mas isso se aplica em outros cenários também, onde precisaremos copiar dados ou utilizar os mesmos discos em um novo servidor visto que o antigo pode ter dado problemas.

Espero que essa dica ajude e seja útil.

Abraços
:wq!