libvirt: changer la configuration de dhcp sans redémarrer

11

J'utilise libvirt et kvm pour virtualiser mon serveur. J'ai configuré libvirt pour démarrer un serveur DHCP sur l'interface bridge-network pour donner aux vm leurs ips. Chaque machine virtuelle obtient toujours la même IP en fonction de son mac, ceci est configuré comme ceci:

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

Le problème: chaque fois que j'ajoute un nouvel hôte à la section dhcp, je dois redémarrer libvirt-bin qui redémarre tous mes vm . Cela ne peut pas être la solution car cela signifie un temps d'arrêt à chaque fois que j'ajoute un nouveau serveur. Y a-t-il une solution?

theomega
la source
Bonne question, je me suis dit qu'il s'agissait simplement de recréer le réseau après les modifications apportées au réseau à l'aide de virsh après avoir modifié le fichier xml comme avec les domaines. Mais cela ne semble pas être le cas. Comme virsh net-dumpxml montre clairement que libvirt a toujours le fichier d'origine mis en cache.
3dinfluence

Réponses:

7

La commande net-update ajoutée dans virsh devrait permettre une mise à jour de l'hôte dhcp sans redémarrer le réseau virtuel (je ne l'ai pas encore testé).

homme virsh:

section de commande réseau net-update xml [--parent-index index] [[--live] [--config] | [--actuel]]

Mettez à jour la section donnée d'une définition de réseau existante, les modifications prenant éventuellement effet immédiatement, sans avoir besoin de détruire et de redémarrer le réseau.

La commande est l'une de "add-first", "add-last", "add" (synonyme d'add-last), "delete" ou "modify".

la section est l'une de "bridge", "domain", "ip", "ip-dhcp-host", "ip-dhcp-range", "forward", "forward-interface", "forward-pf", "portgroup "," dns-host "," dns-txt "ou" dns-srv ", chaque section étant nommée par une concaténation de la hiérarchie des éléments xml conduisant à la modification de l'élément. Par exemple, "ip-dhcp-host" changera un <host>élément qui est contenu à l'intérieur d'un <dhcp>élément à l'intérieur d'un <ip>élément du réseau.

xml est soit le texte d'un élément xml complet du type en cours de modification (par exemple "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> ", soit le nom de un fichier qui contient un élément xml complet. L'ambiguïté se fait en regardant le premier caractère du texte fourni - si le premier caractère est "<", c'est du texte xml, si le premier caractère n'est pas "<", c'est le nom d'un fichier contenant le texte xml à utiliser.

L'option --parent-index est utilisée pour spécifier dans lequel de plusieurs éléments parents l'élément demandé est (basé sur 0). Par exemple, un <host>élément dhcp peut se trouver dans l'un des <ip>éléments multiples du réseau; si un parent-index n'est pas fourni, l' <ip>élément "le plus approprié" sera sélectionné (généralement le seul qui a déjà un <dhcp>élément), mais si --parent-index est donné, cette instance particulière de <ip>obtiendra la modification.

Si --live est spécifié, affectez un réseau en cours d'exécution. Si --config est spécifié, affectez le prochain démarrage d'un réseau persistant. Si --current est spécifié, affectez l'état actuel du réseau. Les drapeaux --live et --config peuvent être donnés, mais --current est exclusif. Le fait de ne spécifier aucun indicateur revient à spécifier --current.

Kees Boogert
la source
5

La procédure suivante a fonctionné pour moi avec la version libvirt: 0.7.5-5ubuntu27 sur un hôte 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

Cela fonctionne également pour d'autres réseaux à côté du réseau par défaut. Remplacez simplement le mot par défaut dans l'exemple par le nom du réseau.

pefu
la source
Je viens d'essayer celui-ci. Bien que la nouvelle configuration réseau ait effectivement pris effet, toutes les machines virtuelles ont perdu la connectivité réseau et ont dû être redémarrées.
user1202136
@ user1202136: Quel type de changement de configuration réseau avez-vous effectué? Et quel type de VM utilisiez-vous?
pefu
J'ai utilisé des machines virtuelles para-virtualisées Xen. Concernant le changement de configuration réseau, j'ai ajouté une nouvelle entrée DHCP statique.
user1202136
Outre le redémarrage manuel du dnsmaq, vous préféreriez redémarrer le service réseau.
Breno Leitão,
@Breno Leitão: Comment exactement? Et à quelles versions des versions de distribution Linux votre commentaire s'applique-t-il?
pefu
2

La solution de @ pefu l'a également fait pour CentOS 6.4!

L'utilisation de net-editin virshn'a pas mis à jour le fichier XML à /var/lib/libvirt/network/default.xmlni modifié l'état de la configuration réseau en cours d'exécution.

La net-editrelance a montré la version éditée même après un redémarrage mais elle n'était tout simplement pas chargée!

L'exporter vers un vrai fichier XML, le modifier et le recharger fonctionne!

Juge
la source
1

Je pense que libvirt utilise dnsmaq pour son serveur dhcp. Peut-être que vous pourriez simplement redémarrer dnsmasq et tout irait bien?

mxc
la source
1

Après une discussion sur la Mailinglist, j'ai découvert: ce n'est actuellement pas possible du tout!

theomega
la source
Je ne sais pas si cela est recommandé, mais je tue généralement le processus dnsmasq et le démarre en utilisant à nouveau les arguments avec lesquels il s'exécutait.
bkzland
La réponse doit spécifier la distribution Linux et la version à laquelle elle s'applique. Comme je l'ai démontré ci-dessous, c'est possible dans Ubuntu 10.04 LTS et plus récent.
pefu