A partir das novas versões adotadas pelo Xen Server foi desabilitada a inicialização automática de VMs ao reinicializar o host. Neste artigo vamos demostrar como iniciar as máquinas virtual de forma automática ao reiniciar nosso Xen Server.
CONSIDERAÇÕES
Iremos utilizar o Xen Server 7, última versão adotada no momento da elaboração deste artigo. Vamos levar em consideração que já possua um servidor Xen instalado e configurado, além de possuir uma VM ativa para realizar os testes.
1) CRIAÇÃO DE SCRIPT.
Para que possamos iniciar nossas VMs de forma automática, precisamos criar um script. Este script será responsável por iniciar nossas máquinas virtuais assim que o host iniciar. Vamos criar um arquivo dentro do diretório “/etc/init.d” de nosso Xen Server, conforme ilustrado abaixo.
touch /etc/init.d/inicia-vms
Antes de editar nosso novo arquivo, precisamos saber qual o UUID da(s) VM(s) armazenada(s) em nosso host que desejamos iniciar automaticamente. Para isso, execute o comando conforme ilustrado abaixo.
xe vm-list
Ao executar o comando, será mostrado em tela todas as VMs disponíveis em seu Xen. Copie o UUID de todas as VMs que deseja realizar a inicialização automática conforme ilustrado abaixo.
Acesse o arquivo criado com seu editor de preferência, insira o conteúdo ilustrado abaixo, salve e saia do arquivo.
Nota: Neste script fiz a implementação de um arquivo de log, isso lhe auxiliará na identificação de possíveis erros.
#!/bin/sh #Incia as VMs. ######################################################################### #' Criado por: Rafael Oliveira # # Fone:(27) 99981-4409 # # e-mail: faelolivei@gmail.com # ######################################################################### echo "==============================================================================" > /var/log/inicia-vms.log sleep 60 data=`date +%c` # Data e hora atual. echo "1) Iniciando VM Ubuntu1 em ${data}." >> /var/log/inicia-vms.log xe vm-start uuid=84a09501-a30b-f22c-2021-35b1bc208f6d &>> /var/log/inicia-vms.log if [ $? -eq 0 ]; then { echo "A VM foi iniciada com sucesso!" >> /var/log/inicia-vms.log echo "------------------------------------------------------------------------------" >> /var/log/inicia-vms.log } else { echo "Problemas na inicialização da VM, verifique o arquivo de log." >> /var/log/inicia-vms.log echo "==============================================================================" >> /var/log/inicia-vms.log } fi; echo "==============================================================================" >> /var/log/inicia-vms.log sleep 45 data=`date +%c` # Data e hora atual. echo "2) Iniciando VM Ubuntu2 em ${data}." >> /var/log/inicia-vms.log xe vm-start uuid=9056c9f7-f93f-2f74-ef43-baffff45e33b &>> /var/log/inicia-vms.log if [ $? -eq 0 ]; then { echo "A VM foi iniciada com sucesso!" >> /var/log/inicia-vms.log echo "------------------------------------------------------------------------------" >> /var/log/inicia-vms.log } else { echo "Problemas na inicialização da VM, verifique o arquivo de log." >> /var/log/inicia-vms.log echo "==============================================================================" >> /var/log/inicia-vms.log } fi; echo "==============================================================================" >> /var/log/inicia-vms.log sleep 45 data=`date +%c` # Data e hora atual. echo "3) Iniciando VM WinServer2008R2 em ${data}." >> /var/log/inicia-vms.log xe vm-start uuid=2a5a4e18-fa86-3290-bc3a-3b29e62b8d6c &>> /var/log/inicia-vms.log if [ $? -eq 0 ]; then { echo "A VM foi iniciada com sucesso!" >> /var/log/inicia-vms.log echo "------------------------------------------------------------------------------" >> /var/log/inicia-vms.log } else { echo "Problemas na inicialização da VM, verifique o arquivo de log." >> /var/log/inicia-vms.log echo "==============================================================================" >> /var/log/inicia-vms.log } fi; echo "==============================================================================" >> /var/log/inicia-vms.log exit 0
Para que nosso script funcione, precisamos dar poder de execução ao mesmo. Para isso, execute o comando conforme ilustrado abaixo.
chmod 755 /etc/init.d/inicia-vms
2) ADICIONANDO O SCRIPT A INICIALIZAÇÃO DO XEN.
Para que seja possível inciar nosso script na inicialização do XenServer, vamos precisar adiciona-lo a alguma runlevel do sistema. Para o nosso exemplo, queremos que o mesmo seja inicializado no “runlevel 5” ou “graphical.target”. Muitos comandos Linux são desabilitados por padrão no XenServer, um destes comandos é o “update-rc.d” comando normalmente utilizado para adicionar scripts a inicialização. Uma alternativa é habilitar os repositórios do CentOS no Xen e realizar a instalação do mesmo, ou realizar a configuração de forma manual. Neste artigo iremos utilizar a forma manual. Para isso, execute o comando conforme ilustrado abaixo.
ln -s /etc/init.d/inicia-vms /etc/rc5.d/S51inicia-vms
Agora vamos verificar se nosso script está habilitado na inicialização, confira se o link foi criado corretamente conforme comando ilustrado abaixo.
ls -laF /etc/rc5.d/
Pronto, agora já podemos realizar o teste, reinicie seu Xen Server e aguarde suas máquinas virtuais serem capazes de inicializar automaticamente assim que o Xen estiver em execução.
CONCLUSÃO
Neste artigo foi demostrado de uma maneira simples, fácil e objetiva, como habilitar a inicialização automática de VMs hospedadas em um Xen Server 7.
Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.
Att,
Rafael Oliveira
SysAdmin
4 respostas
Rafael, muito legal o seu script, mas, estou com um problema.
Se eu executo o script (./inicia-vms) as vms inciam normalmente.
Quando eu coloco pra inciar junto com o sistema, que é o objetivo rs, ele só inicia a primeira VM e não mostra nada nos log´s. Tem uma ideia de como posso resolver isto?
Obs.: Já aumentei o tempo de inicialização e não resolveu.
Obrigado por compartilhar.
Bom dia Nicomedis! Que bom que gostou, fico feliz em poder contribuir. Referente ao seu problema creio que está relacionado ao UUID das máquinas virtuais que deseja startar. Você precisa informar no script todos as VMs que deseja inicializar. Provavelmente só informou o UUID da primeira. Att,
Otimo tutorial,
Tiver que alterar o sleep da primeira VM, aparentemente o servidor ainda não tinha iniciado por completo e não iniciava as primeiras maquinas.
Primeiro sleep ficou em 180.
Att Lucas.
Show Lucas, varia de ambiente para ambiente, o bom que pegou o conceito. Abr.