libvirt: Altere o dhcp-setup sem reiniciar


11

Estou usando libvirt e kvm para virtualizar meu servidor. Eu configurei o libvirt para iniciar um servidor dhcp na interface de rede de ponte para dar aos vm seus ips. Cada VM recebe sempre o mesmo IP com base em seu Mac, e é configurado da seguinte maneira:

<dhcp>
 <range start='10.1.1.2' end='10.1.1.254' />
 <host mac='54:52:00:21:01:ba' name='virstvm' ip='10.1.1.10' />
 <host mac='00:16:36:2d:71:f9' name='secvm' ip='10.1.1.20' />
</dhcp>

O problema: sempre que adiciono um novo host à seção dhcp, tenho que reiniciar o libvirt-bin, que reinicia todos os meus vm . Esta não pode ser a solução, pois significa um tempo de inatividade toda vez que adiciono um novo servidor. Há uma solução?


Boa pergunta: imaginei que era apenas uma questão de recriar a rede após as alterações na rede usando o virsh depois de editar o arquivo xml como nos domínios. Mas isso parece não ser o caso. Como o virsh net-dumpxml mostra claramente que a libvirt ainda tem o arquivo original em cache.
3dinfluence

Respostas:


7

O comando net-update adicionado no virsh deve permitir uma atualização dhcp-host sem reiniciar a rede virtual (ainda não a testei).

homem virsh:

seção de comando net-update network xml [--parent-index index] [[--live] [--config] | [--atual]]

Atualize a seção especificada de uma definição de rede existente, com as alterações entrando em vigor opcionalmente imediatamente, sem a necessidade de destruir e reiniciar a rede.

O comando é um dos "add-first", "add-last", "add" (sinônimo de add-last), "delete" ou "modify".

A seção é uma das "bridge", "domain", "ip", "ip-dhcp-host", "ip-dhcp-range", "forward", "forward-interface", "forward-pf", "forward-pf", "portgroup "," dns-host "," dns-txt "ou" dns-srv ", cada seção sendo nomeada por uma concatenação da hierarquia de elementos xml, levando à alteração do elemento. Por exemplo, "ip-dhcp-host" alterará um <host>elemento que está contido dentro de um <dhcp>elemento dentro de um <ip>elemento da rede.

xml é o texto de um elemento xml completo do tipo que está sendo alterado (por exemplo, "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> "ou o nome de um arquivo que contém um elemento xml completo. A desambiguação é feita observando o primeiro caractere do texto fornecido - se o primeiro caractere for "<", é um texto xml, se o primeiro caractere não for "<", é o nome de um arquivo que contém o texto xml a ser usado.

A opção --parent-index é usada para especificar em qual dos vários elementos pai o elemento solicitado está (com base em 0). Por exemplo, um <host>elemento dhcp pode estar em qualquer um dos vários <ip>elementos da rede; se um índice pai não for fornecido, o elemento "mais apropriado" <ip>será selecionado (normalmente o único que já possui um <dhcp>elemento), mas se --parent-index for fornecido, essa instância específica <ip>receberá a modificação.

Se --live for especificado, afete uma rede em execução. Se --config for especificado, afetará a próxima inicialização de uma rede persistente. Se --current for especificado, afeta o estado atual da rede. Os sinalizadores --live e --config podem ser fornecidos, mas --current é exclusivo. Não especificar nenhum sinalizador é o mesmo que especificar --current.


5

O procedimento a seguir funcionou para mim com a versão libvirt: 0.7.5-5ubuntu27 em um host Ubuntu 10.04.4 LTS:

  virsh net-dumpxml default > default.xml

  $EDITOR default.xml

  virsh net-destroy default
  virsh net-define default.xml
  virsh net-start default

Isso também funciona para outras redes ao lado da rede padrão. Apenas substitua a palavra padrão no exemplo pelo nome da rede.


Eu apenas tentei este. Embora a nova configuração de rede tenha efetivamente efeito, todas as VMs perderam a conectividade de rede e precisaram ser reinicializadas.
user1202136

@ user1202136: Que tipo de alteração na configuração de rede você realizou? E que tipo de VMs você estava usando?
pefu

Eu usei VMs para-virtualizadas do Xen. Em relação à alteração na configuração da rede, adicionei uma nova entrada DHCP estática.
user1202136

Além de reiniciar o dnsmaq manualmente, você prefere reiniciar o serviço de rede.
Breno Leitão

@Breno Leitão: Como exatamente? E a quais versões dos tipos de distribuição Linux o seu comentário se aplica?
pefu

2

A solução da @ pefu também fez isso no CentOS 6.4!

O uso de net-editin virshnão atualizou o arquivo XML /var/lib/libvirt/network/default.xmlnem alterou o estado da configuração de rede em execução.

A nova execução net-editmostrou a versão editada mesmo após uma reinicialização, mas ela simplesmente não foi carregada!

Exportar para um arquivo XML real, editar e recarregar funciona!


1

Eu acho que libvirt usa dnsmaq para seu servidor dhcp. Talvez você possa simplesmente reiniciar o dnsmasq e tudo ficaria bem?


1

Depois de uma discussão na Mailinglist, descobri: isso atualmente não é possível!


Não sei se isso é recomendado, mas geralmente acabo com o processo dnsmasq e o inicio usando os argumentos com os quais estava sendo executado novamente.
bkzland

A resposta deve especificar a distribuição e a versão do Linux às quais se aplica. Como demonstrei abaixo, é possível no Ubuntu 10.04 LTS e mais recente.
pefu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.