Script de backup a quente para Citrix XenServer

Introdução

Citrix XenServer é um Hypervisor como o Microsoft Hyper-V ou o VMWare VSphere. Já escrevi antes sobre minha experiência com a virtualização usando esta ferramenta no artigo “O que aprendi virtualizando servidores com Citrix XenServer e Windows Server 2003“.

Uma das grandes vantagens da virtualização é realizar backups a quente, ou seja, com a VM (máquina virtual) ligada, mantendo disponibilidade 24×7 dos serviços. Mas, ao contrário de seus concorrentes, a maioria dos softwares de backup não se integram perfeitamente.

Após analisar e testar 4 softwares de backup de mercado, ainda restavam na lista outros 3 fornecedores. Como o período de testes nunca era inferior a 15 dias, poderia levar mais de 60 dias até definir uma solução com custo/benefício aceitáveis.

Como é alto o risco de ficar tanto tempo realizando backups de forma manual, com exportação de snapshots no Citrix, decidi buscar scripts de backup para automatizar um pouco esta tarefa.

Após entender como era a arquitetura do sistema e analisar diversos scripts, me deparei com o do Rafael Oliveira, que me autorizou a modificar seu código, acrescentando novas funcionalidades. É este resultado que irei postar aqui.

Objetivo

Criar um script para hosts Citrix XenServer 7.x com a finalidade de automatizar o processo de backup a quente, mantendo a disponibilidade 24×7 dos das maquinas virtuais (VMs).

Fator motivador

O principal fator motivador da criação deste script foi a necessidade de facilitar a operação de backup, permitindo que qualquer operador pudesse selecionar quais VMs teriam backup na segunda, na terça, etc. Além disso, como o repositório do backup é uma máquina Windows (poderia ser Linux com Samba também), o mesmo operador teria facilidade em analisar o Log do backup.

Requisitos

Servidor XenServer configurado, conhecimento básico no uso dos programas PuTTY e WinSCP, além de noções de sistema Linux e Shell Script.

Além disso foi implantado um servidor de backup para armazenamento que utiliza Windows Server 2012 com o data deduplication habilitado.

Download do script

Funcionamento do script de backup a quente para Citrix XenServer

O script é executado automaticamente todos os dias no mesmo horário no host XenServer através do Crontab (espécie de agendador de tarefas do Linux).

No script original todas as VMs cadastradas participavam do processo de backup. A principal mudança foi permitir a pessoas, sem conhecimento de Linux, agendar as vms e respectivos dias da semana de backup destas, através de modificação de um simples arquivo txt no servidor de backup.

Outra melhoria foi, antes de iniciar o processo, identificar a disponibilidade de servidor externo, para evitar que os arquivos sejam acumulados na storage local, causando travamento no host por falta de espaço.

Mais uma melhoria foi a verificação da % de uso da storage onde são criados os arquivos temporários de snapshot e nova VM: se estiver com 80% (valor configurável) o backup não é iniciado e um alerta é gravado no log. Isso tenta impedir o travamento do host por falta de espaço em disco durante o backup.

Prosseguindo nesta linha, também foi implementado no código uma verificação de existência de snapshots de backups antigos (que não foram apagados por qualquer motivo). Caso seja encontrado algum, o mesmo é apagado para evitar que o script seja interrompido.

A seguir existe a criação de um snapshot da VM, independente dela estar ligada ou desligada. O snapshot é convertido para template e este, para uma nova vm desligada, que será exportada para um servidor de backup. Ao final do processo, os arquivos temporários são apagados.

Por fim, são mantidos apenas os últimos x backups da VM, sendo x um número parametrizável na configuração do script.

Todo o processo é gravado no servidor de backup em um arquivo de Log, mantido por 15 dias, que também grava os tempos de backup individual e total.

Outra melhoria foi resumir no final do Log quantas VMs estavam previstas, quais tiveram sucesso e quais apresentaram erros no backup.

A ressalva é que o storage local deve possuir disponível no mínimo o dobro do espaço da VM em backup, porque é criado um snapshot e outra VM para exportação.

Explicação das etapas do script

  1. Declaração de variáveis
    1. Variáveis fixas

Variáveis de controle interno, não devem ser alteradas

  1. Variáveis de configuração

Configuração do script para execução, onde é definido UUID do storage local, servidor de backup, credenciais de acesso e dias de retenção de backup.

  1. Cria diretório local de backup para montar unidade externa
  2. Verifica se a storage possui menos de 80% (configurável) de espaço livre para início do backup.
  3. Verifica se existe o arquivo backup.txt com a lista de VMs no servidor de backup e interrompe a execução se não existir, para evitar gravação local dos arquivos finais.
  4. Verifica e apaga cópias antigas de snapshots de backup
  5. Cria snapshot de backup
  6. Converte snapshot em template
  7. Converte template em vm de backup para permitir exportação porque só é possível essa ação da exportação com a vm desligada, e a intenção do script é efetuar backup a quente (vm ligada).
  8. Exporta cópia da VM
  9. Apaga cópia da VM e VDI
  10. Apaga snapshot
  11. Apaga backups antigos
  12. Grava tempos no log
  13. Desmonta unidade de backup

Procedimento de instalação

Configurar o arquivo de script bkpvms.sh

Este arquivo de script deve ser aberto no editor de textos para configurar a seguintes variáveis:

storageSnapshot: UUID da Storage XenServer que armazenara os snapshots das VMs.

No PuTTY, o comando a seguir exibe as storages com respectivo UUID. Isso permite localizar o UUID da unidade local para armazenar os snapshots temporários.

xe sr-list

Img01

pathBackup:Caminho de rede no formato //IPSERVIDOR/PASTA_BACKUP do servidor e pasta de Backup para gravar os arquivos .xva de backup. Neste caminho, criar uma pasta “_log” para armazenar os arquivos de log.

numBackups: Quantidade de backups antigos (1 dia=1d) em retenção no Servidor de backup. Por exemplo, “1,2d” mantém os dois últimos backups enquanto “1,5d” mantem os últimos 5 backups.

winUser: Usuário com permissão de escrita no servidor de backup

winPwd: Senha do usuário do servidor de backup

winDomain: Domínio do servidor de backup

particao: Partição na storage local para análise de espaço disponível. Use o seguinte comando no PuTTY:

ls /dev/mapper

Se tiver dúvidas sobre qual resultado usar na variável, use o comando # df –aH seguido pelo mapeamento encontrado.

Img02

maxStorageUse: Valor máximo de uso da storage local para prosseguir com backup (em %). Por exemplo, o valor 80 indica que o backup não é realizado se o espaço utilizado da storage local for acima de 80%.

Gravar o arquivo de script no host XenServer

Acessar com o programa PuTTY o host do XenServer (ou o host máster do pool) e criar o diretório para armazenar o script

mkdir /etc/init.d/script

 Com o programa WinSCP, transferir o arquivo de script bkpvms.sh para a pasta  /etc/init.d/script no host XenServer.

Img03

Novamente no PuTTY é necessário atribuir permissão de execução para o arquivo bkpvms.sh através do comando:

chmod 775 /etc/init.d/script/bkpvms.sh

Configurar o arquivo com a lista de backups

No servidor de backup, na pasta raiz de backups, configurar o arquivo backup.txt com os nomes das vms e respectivos dias da semana de backup.

Os dias da semana são em inglês (Sunday, Monday, Thuesday, Wednesday, Thursday, Friday, Saturday).

Img04
Img05

Por exemplo, no host Xenserver temos as vms Joe, Moe, Shemp, Curly e Larry.

Para especificar backups na segunda, quarta e sexta para a VM Joe, no arquivo backup.txt devemos incluir as linhas:

  • Monday=Joe
  • Wednesday=Joe
  • Friday=Joe

Da mesma forma, se quisermos efetuar backup da vm Shemp todos os sábados, incluímos a linha:

  • Saturday=Shemp

Agora se quisermos executar o backup das VMs Curly e Larry todo domingo, acrescentamos as linhas:

  • Sunday=Curly
  • Sunday=Larry

É importante ressaltar que não deve haver espaços entre o dia e o nome da vm e que o nome da vm deve ser exatamente igual ao nome cadastrado no host, senão a vm não é localizada.

Também não deve haver espaços, acentos ou caracteres especiais nos nomes das vms.

Testar execução do backup

Após configurar o arquivo com os nomes das vms, é possível no PuTTY iniciar o script manualmente e analisar sua execução.  O comando para execução em segundo plano é:

/etc/init.d/scripts/bkpvms.sh &

Img06

Agendar execução do script no host

Podemos agendar a execução deste script no crontab. Para adicionar esta linha, após o comando no PuTTY

vi /etc/crontab

Aperte a tecla i (para editar) e acrescente a linha abaixo no final do arquivo para determinar a execução do script para as 22:00 todos os dias.

00 22 * * * root sh /etc/init.d/scripts/bkpvms.sh

Img07

Após acrescentar a linha, tecle ESC :wq ENTER para gravar as alterações e sair.

Em seguida use o comando date para verificar se o servidor está com data e hora atuais.

Análise do log

Na pasta de backup está contida a pasta _log que contém os logs de execução do backup.

Img08

Conclusão

Este arquivo de script de backup a quente para Citrix XenServer foi testado primeiro em ambiente de homologação e posteriormente em produção com resultados satisfatórios. Isso permitiu automatizar o backup até definir qual ferramenta de mercado será aplicada, pois a necessidade de backup inclui não apenas o XenServer, mas também backup do File Server e de bancos de dados.

Vagner Cezarino

Mais artigos deste autor »

Analista de Sustentação e Sistemas | MBA em Gestão e Governança de TI | SAP | TOTVS Datasul | Fluig | Scrum SFC | Gestão de Mudanças | Desenvolvimento | Projetos | Banco de Dados | Infraestrutura


5 Comentários

Antonio Emiliano
1

Rapaz, o meu só passou quando troquei os redirects de log nas linhas de comando do xe para “>> ${arqLog} 2>&1”. Ele não deixou eu usar &>> ${arqLog}.
A gente poderia trocar uma ideia pra tirar mais algumas dúvidas?

Matheus da Cruz
3

Olá Vagner,
Sou um completo novato na área de servidores e redes, e estou tentando utilizar o teu script no ambiente de servidores Xen de onde trabalho, porém quando inicio o script acontece o seguinte:
mount.cifs kernel mount options: ip=xxx.xx.x.xx,unc=\\xxx.xx.x.xx\xxxxx,user=xxxxx,domain=xxx.xx.x.xx,pass=********
Conectado ao servidor de backup
Storage local esta com 73% de uso!
Can’t remove /mnt/backup/backup.txt: Device or resource busy, skipping file.
Desconectado do servidor de backup
E após isso nada acontece… Olhei com o fuser neste diretório que ele fala como ‘ocupado’ mas aparentemente nenhum processo o utiliza. Teria alguma ideia do que possa ser? Te mandei uma solicitação no Linkedin, abraços!

Jeferson S Soares
4

Olá Vaganer, parabéns pela customização do script o Rafael fez um ótimo trabalho na criação e você conseguiu uma plus a mais. Comece a utilizar a sua versão e esta sendo ótimo, hoje cuido de 3 locais diferentes com xenserver, customizei algumas coisas para adequar ao processo de cada local. Parabéns pelo seu esforço e resultado, ficou um ótimo processo. Muito obrigado pelo seu serviço!

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!