libvirt:无需重新启动即可更改dhcp-setup


11

我正在使用libvirt和kvm虚拟化服务器。我将libvirt配置为在网桥网络接口上启动dhcp服务器,以便为虚拟机提供IP。每个VM都基于其mac获得相同的ip,其配置如下:

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

问题:每当我将新主机添加到dhcp部分时,我都必须重新启动libvirt-bin,这将重新启动所有虚拟机。这不能成为解决方案,因为这意味着我每次添加新服务器时都会停机。有解决方案吗?


我认为这是一个好问题,这只是在编辑xml文件和域之后使用virsh对网络进行更改后重新创建网络的问题。但这似乎并非如此。正如virsh net-dumpxml清楚地表明,libvirt仍然具有原始文件的高速缓存。
3dinfluence 2010年

Answers:


7

virsh中添加的net-update命令应允许dhcp-host更新,而无需重新启动虚拟网络(我尚未测试过)。

男人病毒

net-update网络命令部分xml [--parent-index索引] [[--live] [--config] | [ - 当前]]

更新现有网络定义的给定部分,更改有选择地立即生效,而无需破坏并重新启动网络。

command是“ add-first”,“ add-last”,“ add”(add-last的同义词),“ delete”或“ modify”之一。

该部分是“网桥”,“域”,“ ip”,“ ip-dhcp-host”,“ ip-dhcp-range”,“ forward”,“ forward-interface”,“ forward-pf”,“ portgroup”之一”,“ dns-host”,“ dns-txt”或“ dns-srv”,每个节由xml元素层次结构的串联命名,导致元素发生更改。例如,“ ip-dhcp-host”将更改<host>包含在网络<dhcp>元素内部的<ip>元素内的元素。

xml是要更改类型的完整xml元素的文本(例如“ <host mac =” 00:11:22:33:44:55'ip ='1.2.3.4'/>“,或一个包含完整xml元素的文件。通过查看所提供文本的第一个字符来进行歧义消除-如果第一个字符为“ <”,则为xml文本;如果第一个字符不是“ <”,则为包含要使用的xml文本的文件名。

--parent-index选项用于指定请求的元素位于哪个父元素中(从0开始)。例如,dhcp <host>元素可以<ip>位于网络中多个元素中的任何一个元素中;如果未提供父索引,则将选择“最合适的” <ip>元素(通常是唯一已经具有该<dhcp>元素的元素),但是如果给出--parent-index,则该特定实例<ip>将得到修改。

如果指定了--live,则影响正在运行的网络。如果指定了--config,则影响持久网络的下一次启动。如果指定了--current,则影响当前网络状态。--live和--config标志都可以给出,但是--current是排他的。不指定任何标志与指定--current相同。


5

以下过程适用于libvirt版本:Ubuntu 10.04.4 LTS主机上的0.7.5-5ubuntu27:

  virsh net-dumpxml default > default.xml

  $EDITOR default.xml

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

这也适用于默认网络之外的其他网络。只需将示例中的default一词替换为网络名称即可。


我刚试过这个。虽然新的网络配置确实生效,但是所有VM都失去了网络连接,需要重新启动。
user1202136 2014年

@ user1202136:您执行了哪种网络配置更改?您使用的是哪种VM?
pefu 2014年

我使用了Xen半虚拟化VM。关于网络配置更改,我添加了一个新的静态DHCP条目。
user1202136 2014年

除了手动重新启动dnsmaq,您还希望重新启动网络服务。
BrenoLeitão2015年

@BrenoLeitão:到底如何?您的评论适用于哪些Linux发行版本?
pefu

2

@pefu的解决方案也适用于CentOS 6.4!

使用net-editin virsh不会更新XML文件,/var/lib/libvirt/network/default.xml也不会更改正在运行的网络配置的状态。

net-edit即使重新启动后,重新运行仍显示已编辑的版本,但它尚未加载!

将其导出为真实的XML文件,进行编辑并重新加载即可!


1

我认为libvirt将dnsmaq用于其dhcp服务器。也许您可以重新启动dnsmasq,一切都会好起来吗?


1

在对邮件列表进行讨论之后,我发现:目前根本不可能!


我不知道是否建议这样做,但是我通常只是杀死dnsmasq进程,然后使用它再次运行的参数来启动它。
bkzland 2015年

答案应指定适用于Linux的发行版和版本。如下所述,在Ubuntu 10.04 LTS和更高版本中是可能的。
pefu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.