libvirt: modifica dhcp-setup senza riavviare


11

Sto usando libvirt e kvm per virtualizzare il mio server. Ho configurato libvirt per avviare un server dhcp sull'interfaccia di rete bridge per fornire ai loro vm i loro ips. Ogni VM ottiene sempre lo stesso IP in base al suo mac, questo è configurato in questo modo:

<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>

Il problema: ogni volta che aggiungo un nuovo host alla sezione dhcp devo riavviare libvirt-bin che riavvia tutti i miei VM . Questa non può essere la soluzione perché significa un tempo di inattività ogni volta che aggiungo un nuovo server. C'è una soluzione?


Buona domanda, ho pensato che fosse solo una questione di ricreare la rete dopo le modifiche alla rete usando virsh dopo aver modificato il file xml come con i domini. Ma questo sembra non essere il caso. Come virsh net-dumpxml mostra chiaramente che libvirt ha ancora nella cache il file originale.
3dinfluenza

Risposte:


7

Il comando net-update aggiunto in virsh dovrebbe consentire un aggiornamento dhcp-host senza riavviare la rete virtuale (non l'ho ancora testato).

uomo virsh:

sezione comandi di rete net-update xml [--parent-index index] [[- - live] [--config] | [--attuale]]

Aggiorna la sezione data di una definizione di rete esistente, con le modifiche opzionalmente attive immediatamente, senza la necessità di distruggere e riavviare la rete.

Il comando è uno di "aggiungi-primo", "aggiungi-ultimo", "aggiungi" (un sinonimo di aggiungi-ultimo), "elimina" o "modifica".

la sezione è una di "bridge", "domain", "ip", "ip-dhcp-host", "ip-dhcp-range", "forward", "forward-interface", "forward-pf", "portgroup "," dns-host "," dns-txt "o" dns-srv ", ogni sezione viene nominata da una concatenazione della gerarchia dell'elemento xml che porta all'elemento che viene modificato. Ad esempio, "ip-dhcp-host" cambierà un <host>elemento contenuto all'interno di un <dhcp>elemento all'interno di un <ip>elemento della rete.

xml è il testo di un elemento xml completo del tipo che viene modificato (ad es. "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> ", oppure il nome di un file che contiene un elemento xml completo. La disambiguazione si ottiene osservando il primo carattere del testo fornito: se il primo carattere è "<", è il testo xml, se il primo carattere non è "<", è il nome di un file che contiene il testo XML da utilizzare.

L'opzione --parent-index è usata per specificare in quale dei vari elementi padre si trova l'elemento richiesto (basato su 0). Ad esempio, un <host>elemento dhcp potrebbe trovarsi in uno di più <ip>elementi nella rete; se non viene fornito un indice genitore, <ip>verrà selezionato l'elemento "più appropriato" (di solito l'unico che ha già un <dhcp>elemento), ma se viene fornito --parent-index, quella particolare istanza <ip>otterrà la modifica.

Se viene specificato --live, influisce su una rete in esecuzione. Se viene specificato --config, influisce sul successivo avvio di una rete persistente. Se si specifica --current, influisce sullo stato corrente della rete. Possono essere dati sia i flag --live che --config, ma --current è esclusivo. Non specificare alcun flag equivale a specificare --current.


5

La seguente procedura ha funzionato per me con la versione di libvirt: 0.7.5-5ubuntu27 su un 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

Questo funziona anche per altre reti oltre alla rete predefinita. Sostituisci semplicemente la parola default nell'esempio con il nome della rete.


Ho appena provato questo. Sebbene la nuova configurazione di rete abbia effettivamente avuto effetto, tutte le macchine virtuali hanno perso la connettività di rete e dovevano essere riavviate.
user1202136

@ user1202136: che tipo di modifica alla configurazione di rete hai eseguito? E che tipo di VM stavi usando?
pefu,

Ho usato macchine virtuali virtualizzate para-virtualizzate Xen. Per quanto riguarda la modifica della configurazione di rete, ho aggiunto una nuova voce DHCP statica.
user1202136

Oltre a riavviare dnsmaq manualmente, si preferisce riavviare il servizio di rete.
Breno Leitão,

@Breno Leitão: esattamente? E a quali versioni di Linux Distribution si applica il tuo commento?
Pefu,

2

La soluzione di @ pefu l'ha fatto anche per CentOS 6.4!

L'utilizzo di net-editin virshnon ha aggiornato il file XML /var/lib/libvirt/network/default.xmlné ha modificato lo stato della configurazione di rete in esecuzione.

La riesecuzione ha net-editmostrato la versione modificata anche dopo un riavvio ma non è stata caricata!

Esportarlo in un vero file XML, modificarlo e ricaricarlo funziona!


1

Penso che libvirt usi dnsmaq per il suo server dhcp. Forse potresti semplicemente riavviare dnsmasq e tutto andrebbe bene?


1

Dopo una discussione sulla Mailinglist ho scoperto: questo attualmente non è affatto possibile!


Non so se questo è consigliato, ma di solito uccido solo il processo dnsmasq e lo avvio usando gli argomenti con cui stava funzionando di nuovo.
bkzland,

La risposta dovrebbe specificare la distribuzione Linux e la versione a cui si applica. Come ho dimostrato di seguito, è possibile in Ubuntu 10.04 LTS e versioni successive.
pefu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.