libvirt: Ändern Sie das DHCP-Setup ohne Neustart

11

Ich verwende libvirt und kvm, um meinen Server zu virtualisieren. Ich habe libvirt so konfiguriert, dass ein DHCP-Server auf der Bridge-Netzwerk-Schnittstelle gestartet wird, um den VMs ihre IPs zu geben. Jede VM erhält immer die gleiche IP basierend auf ihrem Mac. Dies ist wie folgt konfiguriert:

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

Das Problem: Immer wenn ich dem DHCP-Abschnitt einen neuen Host hinzufüge, muss ich libvirt-bin neu starten, wodurch alle meine VMs neu gestartet werden . Dies kann nicht die Lösung sein, da jedes Mal, wenn ich einen neuen Server hinzufüge, eine Ausfallzeit auftritt. Gibt es eine Lösung?

theomega
quelle
Gute Frage, ich dachte, es geht nur darum, das Netzwerk nach den Änderungen am Netzwerk mit virsh neu zu erstellen, nachdem Sie die XML-Datei wie bei Domains bearbeitet haben. Dies scheint jedoch nicht der Fall zu sein. Wie virsh net-dumpxml deutlich zeigt, hat libvirt noch die Originaldatei zwischengespeichert.
3dinfluence

Antworten:

7

Der hinzugefügte Befehl net-update in virsh sollte ein DHCP-Host-Update ermöglichen, ohne das virtuelle Netzwerk neu zu starten (ich habe es noch nicht getestet).

Mann virsh:

net-update Netzwerkbefehlsabschnitt xml [--parent-index index] [[--live] [--config] | [--Strom]]

Aktualisieren Sie den angegebenen Abschnitt einer vorhandenen Netzwerkdefinition, wobei die Änderungen optional sofort wirksam werden, ohne dass das Netzwerk zerstört und neu gestartet werden muss.

Der Befehl lautet "Add-First", "Add-Last", "Add" (ein Synonym für Add-Last), "Löschen" oder "Ändern".

Abschnitt ist einer von "Brücke", "Domäne", "IP", "IP-DHCP-Host", "IP-DHCP-Bereich", "Vorwärts", "Vorwärtsschnittstelle", "Vorwärts-Pf", "Portgruppe" "," dns-host "," dns-txt "oder" dns-srv ", wobei jeder Abschnitt durch eine Verkettung der XML-Elementhierarchie benannt wird, die zur Änderung des Elements führt. Beispielsweise ändert "ip-dhcp-host" ein <host>Element, das in einem <dhcp>Element innerhalb eines <ip>Elements des Netzwerks enthalten ist.

xml ist entweder der Text eines vollständigen xml-Elements des zu ändernden Typs (z. B. "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> "oder der Name von Eine Datei, die ein vollständiges XML-Element enthält. Die Disambiguierung erfolgt durch Betrachten des ersten Zeichens des bereitgestellten Textes. Wenn das erste Zeichen "<" ist, ist es XML-Text. Wenn das erste Zeichen nicht "<" ist, ist es das Name einer Datei, die den zu verwendenden XML-Text enthält.

Mit der Option --parent-index wird angegeben, in welchem ​​von mehreren übergeordneten Elementen sich das angeforderte Element befindet (0-basiert). Beispielsweise kann sich ein DHCP- <host>Element in einem von mehreren <ip>Elementen im Netzwerk befinden. Wenn kein übergeordneter Index angegeben ist, wird das "am besten geeignete" <ip>Element ausgewählt (normalerweise das einzige, das bereits ein <dhcp>Element enthält). Wenn jedoch --parent-index angegeben wird, erhält diese bestimmte Instanz von <ip>die Änderung.

Wenn --live angegeben ist, wirkt sich dies auf ein laufendes Netzwerk aus. Wenn --config angegeben ist, wirkt sich dies auf den nächsten Start eines dauerhaften Netzwerks aus. Wenn --current angegeben ist, wirkt sich dies auf den aktuellen Netzwerkstatus aus. Es können sowohl --live- als auch --config-Flags angegeben werden, aber --current ist exklusiv. Wenn Sie kein Flag angeben, entspricht dies der Angabe von --current.

Kees Boogert
quelle
4

Das folgende Verfahren funktionierte für mich mit libvirt Version: 0.7.5-5ubuntu27 auf einem Ubuntu 10.04.4 LTS-Host:

  virsh net-dumpxml default > default.xml

  $EDITOR default.xml

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

Dies funktioniert auch für andere Netzwerke neben dem Standardnetzwerk. Ersetzen Sie einfach das Wort default im Beispiel durch den Namen des Netzwerks.

Pefu
quelle
Ich habe es gerade versucht. Während die neue Netzwerkkonfiguration tatsächlich wirksam wurde, verloren alle VMs die Netzwerkverbindung und mussten neu gestartet werden.
user1202136
@ user1202136: Welche Art von Netzwerkkonfigurationsänderung haben Sie durchgeführt? Und welche Art von VMs haben Sie verwendet?
Pefu
Ich habe paravirtualisierte Xen-VMs verwendet. In Bezug auf die Änderung der Netzwerkkonfiguration habe ich einen neuen statischen DHCP-Eintrag hinzugefügt.
user1202136
Abgesehen vom manuellen Neustart von dnsmaq möchten Sie den Netzwerkdienst lieber neu starten.
Breno Leitão
@Breno Leitão: Wie genau? Und für welche Versionen von Linux Distribution gilt Ihr Kommentar?
Pefu
2

@ pefus Lösung hat es auch für CentOS 6.4 geschafft!

Durch die Verwendung von net-editin wurde virshdie XML-Datei weder aktualisiert /var/lib/libvirt/network/default.xmlnoch der Status der ausgeführten Netzwerkkonfiguration geändert.

Beim erneuten Ausführen wurde net-editdie bearbeitete Version auch nach einem Neustart angezeigt, sie wurde jedoch nicht geladen!

Es in eine echte XML-Datei exportieren, bearbeiten und neu laden funktioniert!

Richter
quelle
1

Ich denke, libvirt verwendet dnsmaq für seinen DHCP-Server. Vielleicht könnten Sie dnsmasq einfach neu starten und alles wäre gut?

mxc
quelle
1

Nach einer Diskussion auf der Mailingliste fand ich heraus: Dies ist derzeit überhaupt nicht möglich!

theomega
quelle
Ich weiß nicht, ob dies empfohlen wird, aber normalerweise beende ich den dnsmasq-Prozess und starte ihn mit den Argumenten, mit denen er erneut ausgeführt wurde.
Bkzland
Die Antwort sollte die Linux-Distribution und die Version angeben, für die sie gilt. Wie ich unten gezeigt habe, ist dies in Ubuntu 10.04 LTS und neuer möglich.
Pefu