libvirt: Zmień konfigurację dhcp bez ponownego uruchamiania

11

Używam libvirt i kvm do wirtualizacji mojego serwera. Skonfigurowałem libvirt, aby uruchamiał serwer dhcp na interfejsie sieciowym mostu, aby dać VM swoje IP. Każda maszyna wirtualna otrzymuje zawsze ten sam adres IP na podstawie swojego komputera Mac, konfiguracja jest następująca:

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

Problem: Ilekroć dodam nowego hosta do sekcji dhcp, muszę ponownie uruchomić libvirt-bin, który restartuje wszystkie moje vm . To nie może być rozwiązanie, ponieważ oznacza przestój za każdym razem, gdy dodam nowy serwer. Czy jest jakieś rozwiązanie?

theomega
źródło
Dobre pytanie Uznałem, że to tylko kwestia odtworzenia sieci po zmianach w sieci za pomocą virsh po edycji pliku XML tak, jak w przypadku domen. Ale wydaje się, że tak nie jest. Ponieważ virsh net-dumpxml wyraźnie pokazuje, że libvirt nadal ma buforowany oryginalny plik.
3dinfluence 11.01.10

Odpowiedzi:

7

Dodane polecenie net-update w systemie virsh powinno pozwolić na aktualizację hosta dhcp bez restartowania sieci wirtualnej (jeszcze go nie testowałem).

człowiek virsh:

net-update sekcja komend sieciowych xml [--index-index index] [[--live] [--config] | [--obecny]]

Zaktualizuj podaną sekcję istniejącej definicji sieci, a opcjonalnie zmiany zaczną obowiązywać natychmiast, bez potrzeby niszczenia i ponownego uruchamiania sieci.

polecenie to jeden z „dodaj pierwszy”, „dodaj ostatni”, „dodaj” (synonim „dodaj ostatni”), „usuń” lub „zmodyfikuj”.

sekcja jest jednym z „most”, „domena”, „ip”, „ip-dhcp-host”, „ip-dhcp-range”, „forward”, „forward-interface”, „forward-pf”, „portgroup ”,„ dns-host ”,„ dns-txt ”lub„ dns-srv ”, przy czym każda sekcja jest nazwana przez konkatenację hierarchii elementów xml prowadzącą do zmiany elementu. Na przykład „ip-dhcp-host” zmieni <host>element znajdujący się w <dhcp>elemencie wewnątrz <ip>elementu sieci.

xml jest tekstem kompletnego zmienianego elementu xml typu (np. „<host mac =” 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> ”lub nazwa plik zawierający pełny element xml. Ujednoznacznienie polega na spojrzeniu na pierwszy znak podanego tekstu - jeśli pierwszym znakiem jest „<”, to jest to tekst xml, jeśli pierwszym znakiem nie jest „<”, to jest to nazwa pliku zawierającego tekst xml, który ma zostać użyty.

Opcja --parent-index służy do określenia, w którym z kilku elementów nadrzędnych znajduje się żądany element (w oparciu o 0). Na przykład <host>element dhcp może znajdować się w jednym z wielu <ip>elementów w sieci; jeśli indeks nadrzędny nie zostanie podany, wybrany zostanie „najbardziej odpowiedni” <ip>element (zazwyczaj jedyny, który już ma <dhcp>element), ale jeśli podano - indeks nadrzędny, to konkretna instancja <ip>otrzyma modyfikację.

Jeśli podano opcję --live, wpływa na działającą sieć. Jeśli podano opcję --config, wpływa na następne uruchomienie trwałej sieci. Jeśli podano opcję --current, wpływa na bieżący stan sieci. Można podać flagi --live i --config, ale --current jest wyłączny. Nieokreślenie żadnej flagi jest tym samym, co określenie --current.

Kees Boogert
źródło
5

Poniższa procedura działała dla mnie z libvirt Wersja: 0.7.5-5ubuntu27 na hoście 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

Działa to również w innych sieciach poza siecią domyślną. Po prostu zamień słowo domyślne w przykładzie na nazwę sieci.

pefu
źródło
Właśnie tego spróbowałem. Chociaż nowa konfiguracja sieci rzeczywiście zaczęła obowiązywać, wszystkie maszyny wirtualne straciły połączenie sieciowe i musiały zostać zrestartowane.
user1202136
@ user1202136: Jaką zmianę konfiguracji sieci wykonałeś? A jakiego rodzaju maszyn wirtualnych używałeś?
pefu
Użyłem wirtualnych maszyn wirtualnych Xen. Jeśli chodzi o zmianę konfiguracji sieci, dodałem nowy statyczny wpis DHCP.
user1202136,
Oprócz ręcznego restartowania dnsmaq wolisz zrestartować usługę sieciową.
Breno Leitão,
@Breno Leitão: Jak dokładnie? I do których wersji smaków dystrybucji Linux dotyczy Twój komentarz?
pefu
2

Rozwiązanie @ pefu zrobiło to również dla CentOS 6.4!

Użycie net-editw virshnie zaktualizowało pliku XML /var/lib/libvirt/network/default.xmlani nie zmieniło stanu uruchomionej konfiguracji sieci.

Ponowne uruchomienie net-editpokazało edytowaną wersję nawet po ponownym uruchomieniu, ale po prostu nie została załadowana!

Eksportowanie go do prawdziwego pliku XML, edycja i ponowne ładowanie działa!

Sędzia
źródło
1

Myślę, że libvirt używa dnsmaq dla swojego serwera dhcp. Może po prostu uruchomisz ponownie dnsmasq i wszystko będzie dobrze?

MXC
źródło
1

Po dyskusji na liście mailowej dowiedziałem się: obecnie nie jest to w ogóle możliwe!

theomega
źródło
Nie wiem, czy jest to zalecane, ale zwykle po prostu zabijam proces dnsmasq i uruchamiam go przy użyciu argumentów, z którymi był uruchomiony ponownie.
bkzland,
Odpowiedź powinna określać dystrybucję systemu Linux i wersję, której dotyczy. Jak wykazałem poniżej, jest to możliwe w Ubuntu 10.04 LTS i nowszych.
pefu