有没有办法即时编辑 Libvirt-Machine 的监听地址?目前好像要编辑监听地址,得先关闭对应的VM,再编辑xml,重新定义域。
我目前正在构建一个小型 Web 应用程序(libvirt 前端),我想在其中实现一个名为“启用/禁用 vnc”的功能 - 但是,如果唯一的方法是关闭虚拟机。
我正在使用 libvirt 的 virt-install 命令创建一个新的虚拟机。该命令使用 initrd-inject 从管理程序中提取本地预置文件:
virt-install \
--autostart \
--name vm1 \
--ram 4096 \
--location=http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/ \
--initrd-inject=/var/lib/libvirt/preseeds/vms/preseed.cfg \
--extra-args="locale=en_US console-setup/ask_detect=false keyboard-configuration/layoutcode=us hostname=virtual domain=unassigned-domain interface=auto" \
--vcpu=4 \
--vnc \
--vnclisten=0.0.0.0 \
--noautoconsole \
--os-type=linux \
--os-variant=ubuntukarmic \
-w bridge=br0 \
-w bridge=br1 \
-w network=default \
--disk format=qcow2,size=20,bus=virtio,path=/export/vm/vm1.qcow2
Run Code Online (Sandbox Code Playgroud)
一切正常,直到 preseed 的 late_command 部分动态打印一个 upstart 脚本到文件中;
d-i preseed/late_command string printf "description \"the run-once bootstrap\"\n\nstart on net-device-up\nstop on runlevel [!2345]\n\npre-start script\n wget -O /root/bootstrap.sh http://my.bootstrap/bootstrap;\nchmod +x /root/bootstrap.sh;\n /root/bootstrap.sh > …Run Code Online (Sandbox Code Playgroud) 我正在运行 KVM 作为虚拟化引擎。
有没有办法让 QEMU/libvirt 在来宾从内部关闭时在主机上运行脚本(现在关闭 -h)?
我希望能够在来宾停止时运行一些自定义清理任务。
我有一台 KVM 主机(在192.168.0.10),它目前有一个工作的 KVM 来宾(在192.168.0.12)。今天尝试安装一个新的 KVM 来宾时,我遇到了一个问题,即新来宾上的网络只能部分工作。
我可以从新来宾访问的唯一内容是网络内的资源。尝试访问任何其他网络资源(包括那些经过网关的资源)会导致到达目的地的 100% 数据包丢失。
客人通过连接在桥br0使用eth2访问网络。
主机网络按预期工作,另一个(当前只有一个)来宾上的网络也通过同一网桥连接,工作正常。关闭工作访客并不能解决问题。
两个来宾都通过 DHCP 获取他们的网络详细信息。
tcpdump在来宾的虚拟接口上从主机运行显示来宾尝试与外部世界通信,并且仅从主机和网关获得响应。
有问题的来宾当前正在通过 连接vnet0。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:1e:4f:34:dc:79 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc …Run Code Online (Sandbox Code Playgroud) 我遇到了架构挑战的各种障碍。我有一台运行 KVM 的服务器——它将包含许多来宾,一些运行虚拟化防火墙,其他一些,只是普通的 Web 服务器。
现在,这通常很简单,只需eth0在其中添加一个网桥,在网桥上添加几个 VLAN(vmbr0.1等等) - 然后为每个来宾(或其倍数)分配一个带有未标记 VLAN 的接口。
firewall1 (vlan 1,2,3,4)
switch ===== eth0 vmbr0 firewall2 (vlan 1,2,5,6)
(eth0) server1 (vlan 7)
server2 (vlan 8)
vlan trunk
(1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)
现在,如果您只有几个需要传递给来宾的接口,这可以正常工作。但是当您需要将 500 个 VLAN 放入防火墙时会发生什么。它的不切实际。
所以我无法弄清楚如何创建一个数字中继(具有公共 VLAN 和不同的 VLAN),并将它们分配给来宾。
到目前为止,我找到的最接近的解决方案是在主桥上创建 VLAN,然后对于服务器,只需从中分配一个 VLAN。
然后对于防火墙,为每个防火墙创建一个桥,其中只有来宾的tap接口,然后vlan为相应的桥创建未标记的接口,并将其添加到主vmbr0桥。
唯一的问题是离开未标记接口的流量当然是未标记的。
是否可以标记离开接口的流量?
——
否则,如何实现 KVM 来宾的不同中继,这些中继可能具有公共 VLAN 和不同的 VLAN(但绝不是所有 VLAN) - 并且能够分配单个未标记的 vlan 接口
假设您有一个 Linux VPS 托管帐户,并且您想在该 VPS 或虚拟机中添加多个 VPS,您该怎么做?
一个场景可能是我想安装一个 IIS 服务器,或者我想拥有多个用于不同目的的 Linux 虚拟机。
我不确定这在 VPS 上是如何实现的,比如如果它们都放在一个具有一个 IP 的 VPS 中,你将如何连接到不同的机器。
我之前已经设置了几个基于 KVM 的网络,但从未遇到过这个问题,我一生都无法想象我以前会设置什么不同的网络。
设置
基本上,我已经完全拥有戴尔堆栈:
所有机器都运行 CentOS6.5,hypervisor,基本上是标准安装,有一些 sysctl 调整。
目前,我有一些测试 VM 的设置,它们的设置与它们的主机相似(CentOS 6.X,基本安装带有基本的 puppet 驱动配置)。所有虚拟机都是:
所有 VM 都使用 virtio 来处理网络、块设备(基本上是运行 virt-install 命令的标准结果)——例如(例如 libvirt 配置)
Run Code Online (Sandbox Code Playgroud)<interface type='bridge'> <mac address='52:54:00:11:a7:f0'/> <source bridge='dmzbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
并且所有 VM 都可以访问 2 到 8 个 VCPU 以及 8 到 64GB 的 RAM,并且它们的驱动器是主机上的 LVM 卷
VM 中的一些简单文件副本和 dd 测试产生了完全可以接受的结果(在这些小规模综合测试中为 300MB/s - 800MB/s)
物理机之间的网络性能
我现在已经离开了 Jumbo …
我正在尝试使用virt-install. 安装程序抱怨说,“Windows 无法<ProductKey>从无人参与的应答文件中读取设置”,我一直无法弄清楚如何继续处理这一点。
我从以下autounattend.xml文件开始:
<unattend xmlns="urn:schemas-microsoft-com:unattend"
xmlns:ms="urn:schemas-microsoft-com:asm.v3"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup"
publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" processorArchitecture="x86">
<UserData>
<AcceptEula>true</AcceptEula>
<ProductKey>
<Key>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</Key>
<WillShowUI>OnError</WillShowUI>
</ProductKey>
</UserData>
<ImageInstall>
<OSImage>
<WillShowUI>Never</WillShowUI>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
<InstallFrom>
<MetaData>
<Key>/IMAGE/Name</Key>
<Value>Windows Longhorn SERVERSTANDARDCORE</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
</component>
</settings>
</unattend>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法将其烘焙成 ISO 映像mkisofs:
$ ls config/
autounattend.xml
$ mkisofs -o config.iso -J -r config
Run Code Online (Sandbox Code Playgroud)
然后我像这样开始安装:
virt-install -n ws2012 -r 2048 -w network=default,model=virtio \
--disk path=ws2012.qcow2,device=disk,bus=virtio \
--cdrom en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso \ …Run Code Online (Sandbox Code Playgroud) 在文档中不太清楚如何在 Ubuntu 12.04 中安装和使用 qemu-guest-agent。
任何人都可以帮助我吗?
http://wiki.libvirt.org/page/Qemu_guest_agent
它是在域内运行的守护程序,旨在帮助管理应用程序执行需要来宾操作系统帮助的功能。我想使用 guest-network-get-interfaces qemu-guest-agent 命令知道来宾 VM 的 IP 地址。
有没有其他方法可以找到来宾 VM 的 IP 地址?
arp -an, arpwatch ,echo syslog | grep $mac_address 在我的场景中没有用?
virsh save vm_name memdump然后virsh restore memdump恢复一个(正在运行的)VM 就好了。
但是,VM 在 之后关闭virsh save。我正在为 KVM 虚拟机编写“实时”备份和恢复脚本,因此在备份部分,我显然需要在备份后运行虚拟机。virsh restore memdump备份后立即执行不是问题,但在我看来基本上没有必要 - 我“应该”能够暂停虚拟机,将其内存保存到文件中,然后简单地恢复/取消挂起虚拟机。
这对于内存很少的虚拟机来说并不是真正的问题,但是如果虚拟机有相当大的工作内存,那么它会不必要地延长备份时间。
不幸的是,即使我virsh suspend在virsh save.
有没有办法做到这一点?(即暂停、保存、取消暂停)