O KVM pode suspender ou encerrar convidados automaticamente no encerramento do host?
16
Temos um host KVM do CentOS 5.5, executando convidados com várias versões do CentOS e possivelmente outros sistemas operacionais posteriormente.
Gostaríamos de poder (a) enviar automaticamente um desligamento da ACPI para todos os convidados ou (b) suspender todos os convidados para o disco, no desligamento do host.
Existe um método padrão para realizar um desses, ou é uma situação do tipo faça você mesmo? Obrigado!
O virsh shutdowncomando (ou outras implementações de "shutdown" usando libvirt, como em virt-manager) instrui o SO convidado a desligar corretamente. Na página do manual:
shutdown domain-id
Gracefully shuts down a domain. This coordinates with the domain
OS to perform graceful shutdown, so there is no guarantee that it
will succeed, and may take a variable length of time depending on
what services must be shutdown in the domain.
The exact behavior of a domain when it shuts down is set by the
on_shutdown parameter in the domain’s XML definition.
Com o KVM, isso deve enviar um evento system_powerdown da ACPI.
No Fedora e RHEL 6, um libvirt-guestsscript init sai da caixa configurado para suspender todos os convidados no desligamento do sistema. Porém, não é particularmente mágico, portanto, pode-se copiar isso para o CentOS 5 com poucas modificações.
Hmmmm. Sim, também está ausente no código . O que o libvirt-guestsscript realmente faz é executar virsh managedsave. (Parece que talvez apenas o driver UML suporte system_powerdown.) Obrigado pela captura! Vou atualizar minha resposta e arquivar um bug na documentação.
mattdm
4
Este é agora um recurso padrão no recente Fedora e RHEL 6.
Até onde eu sei, não existe esse script padrão para o CentOS. É possível codificar, mas um pouco perigoso, pois você precisa lidar com convidados que demoram muito tempo para desligar. Apenas matá-los após um tempo limite pode destruir os dados, enquanto esperar por eles pode deixar seu desligamento suspenso.
Em vez disso, é melhor desligar os convidados manualmente antes de fazer uma reinicialização. Por um tempo, tive um script que substituiu o desligamento e a reinicialização. Esse script me avisou se havia algum convidado em execução (lc simples na lista de máquinas virtuais) e bloqueou o comando se houvesse convidados em execução.
Os convidados KVM são apenas processos do espaço do usuário. você deve ter algum monitoramento de processo em vigor. o mais comum lá fora parece ser libvirt (desenvolvido pela RedHat, então acho que deve estar disponível no CentOS).
libvirt-guests
script realmente faz é executarvirsh managedsave
. (Parece que talvez apenas o driver UML suporte system_powerdown.) Obrigado pela captura! Vou atualizar minha resposta e arquivar um bug na documentação.Este é agora um recurso padrão no recente Fedora e RHEL 6.
fonte
Até onde eu sei, não existe esse script padrão para o CentOS. É possível codificar, mas um pouco perigoso, pois você precisa lidar com convidados que demoram muito tempo para desligar. Apenas matá-los após um tempo limite pode destruir os dados, enquanto esperar por eles pode deixar seu desligamento suspenso.
Em vez disso, é melhor desligar os convidados manualmente antes de fazer uma reinicialização. Por um tempo, tive um script que substituiu o desligamento e a reinicialização. Esse script me avisou se havia algum convidado em execução (lc simples na lista de máquinas virtuais) e bloqueou o comando se houvesse convidados em execução.
fonte
Os convidados KVM são apenas processos do espaço do usuário. você deve ter algum monitoramento de processo em vigor. o mais comum lá fora parece ser libvirt (desenvolvido pela RedHat, então acho que deve estar disponível no CentOS).
fonte