我正在测试 Openstack,我想知道如何了解实例(虚拟机)内的资源利用率。
Openstack 在我的测试环境中使用 kvm、qemu 和 libvirt。有没有办法在不登录机器的情况下获取这些统计信息(CPU、内存、交换、网络流量)?我想从管理程序或通过 libvirt 收集这些数据。
有什么建议?
我们有一小群 KVM/libvirt 主机,上面有几百个虚拟机,由不同位置的一组系统管理员管理。我遇到了一个问题,我通过 SSH 连接到虚拟机,但我无法弄清楚拥有它的裸机主机的名称。有谁知道从虚拟机内部找到裸机主机名称的方法?
如果这不是 KVM 开箱即用的功能,是否有任何配置示例可以应用于我们所有的管理程序以公开这些信息?
我们确实使用库存管理软件来跟踪我们的虚拟机及其裸机主机 - 但是它有错误,并且有时我们会忘记主机拥有虚拟机。我会解决这个问题 - 但无论如何,从 VM 内部查找 KVM 主机的概念都会很有用。
我知道这违背了共享环境中采用的许多安全原则,其中每个虚拟机都是出售给不同客户的产品 - 但在我们拥有主机的环境中,安全性不是问题。
是否可以在不让 libvirt 引导虚拟机的情况下将 XML 文件导入 libvirt?
如果我做:
virsh create centos63.xml
Run Code Online (Sandbox Code Playgroud)
然后 libvirt 会导入 XML 文件并立即尝试启动映像,这不是我想要的。
(我有几个脚本将 libvirt 域作为参数,该域对应于当前未运行的 VM,这就是我要执行此操作的原因)。
有很多用于 Kvm-networking 的配置。但是我无法从主人或外面接触到客人。我正在 Ubuntu 11.04 上工作。在来宾上,我有一个带 dhcp 的 WindowsXp。
我希望来宾在主机的同一网络中。我试过使用 ip 别名
我已经在 /etc/network/interfaces 中设置了桥接网络
auto eth0
iface eth0 inet manual
auto eth0:1
iface eth0:1 inet static
address 192.168.0.11
netmask 255.255.255.0
auto br0
iface br0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Run Code Online (Sandbox Code Playgroud)
然后更改 /etc/libvirtd/qemu/network/default.xml 中的默认网络
<network>
<name>default</name>
<uuid>831a93e1-0b84-0b0e-9ca2-23c407983968</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.100' end='192.168.122.254' />
<host mac='52:54:00:7c:df:88' name='vm' ip='192.168.122.99' />
</dhcp>
</ip>
</network> …Run Code Online (Sandbox Code Playgroud) 我在通过 libvirt/qemu-kvm 执行虚拟化时遇到问题,其中我的桥接网络设置似乎无法正常工作。我遵循了我能找到的每一个教程,并花了几个小时浏览论坛,但目前无济于事。
主机和来宾都使用 Centos6。
这是主机的设置:
[root@node2 ~]# ifconfig -a
bridge0 Link encap:Ethernet HWaddr BC:30:5B:E8:C0:4F
inet addr:10.59.190.253 Bcast:10.59.190.255 Mask:255.255.255.0
inet6 addr: fe80::be30:5bff:fee8:c04f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5315 errors:0 dropped:0 overruns:0 frame:0
TX packets:3350 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:316961 (309.5 KiB) TX bytes:3943630 (3.7 MiB)
eth0 Link encap:Ethernet HWaddr BC:30:5B:E8:C0:4F
inet6 addr: fe80::be30:5bff:fee8:c04f/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:5286 errors:0 dropped:0 overruns:0 frame:0
TX packets:5325 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 …Run Code Online (Sandbox Code Playgroud) 我的设置的性能非常好(geekbench,感觉如何,...)甚至磁盘吞吐量(原始 lvm 分区上的 libvirt)也非常接近服务器上的原始性能)但IOP/s 低至100-200 来宾端(与 ~1000 主机端相比)在 linux 和 Windows 来宾上。
这是一件可以忍受的事情(kvm 不能做得更好)还是我做错了什么?
有趣的是,我能够通过更改设置(qcow2 vs raw-image vs raw-partition)或配置(缓存或 io-scheduling)和变化来影响吞吐量,但 IOP 保持在所有这些相同的低点组合。
• supermicro dual xeon E5520 with 24GB RAM
• 2x seagate constellation 1TB(RAID1 on Adaptec 3405)
• 2x seagate cheetah(RAID1 on Adaptec 6405)。
• ubuntu 11.10 3.0.0-13-server
• kvm/QEMU 模拟器版本 0.14.1 (qemu-kvm-0.14.1)
• 对来自主机和来宾的磁盘(bonnie++、hdparm)进行基准测试(windows 上的 bonnie++、hdparm、hdtune) )
我测试了几种光盘配置,当前设置是:
(他们只是“不需要”高 IO 性能,所以我保留了更舒适的
磁盘文件)• 我星座上 lvm 上的 qcow2 磁盘文件
• qemu/ide
<disk type='file' …Run Code Online (Sandbox Code Playgroud) 我正在使用 libvirt 在运行 Debian Squeeze amd64 的相当新的(核心 i3)主机上控制 kvm。主机和 Linux 来宾工作并且感觉快速且响应迅速。简单地使用适用于 windows7 的 virt-manager 标准配置文件安装 Win7 需要永远。我主要归咎于磁盘 io,但 Windows 通常似乎不像 linux 来宾那样响应。
您对 kvm 上的 Win7 客户机的性能优化设置有一些提示吗?
(抱歉有很多转储,但我认为它们可以作为参考。)
主机配置:
kvm: Version: 1:0.12.5+dfsg-5+squeeze8
libvirt-bin: Version: 0.8.3-5+squeeze2
Run Code Online (Sandbox Code Playgroud)
虚拟转储xml:
<domain type='kvm' id='27'>
<name>win7-template</name>
<uuid>a4eb05fa-0d4e-5ced-2ff1-e15507795d1b</uuid>
<memory>2097152</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc-0.12'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/win7-template.img'/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' …Run Code Online (Sandbox Code Playgroud) 类似这样的Bugzilla的旧请求的Fedora 8,我希望事情已经从那以后改变或有人知道的另一种方式。
我想手动管理 iptables 规则——一刀切的自动规则根本不适合我。这些规则似乎是在网络启动和销毁时添加和删除的。有没有办法完全阻止添加这些规则,或者将脚本挂接到网络启动中,然后恢复默认规则。
现在,我正在使用一种非常粗糙的方法cron,但我希望有更好的方法:
* * * * * root iptables-restore < /etc/sysconfig/iptables
Run Code Online (Sandbox Code Playgroud) 我有一台运行 KVM + Libvirt 的 Ubuntu Trusty 机器来管理小型虚拟机,并使用标准 NetworkManager 连接到常规网络。
我希望能够从主机通过 DNS 访问虚拟机。
Libvirt 使用虚拟专用子网 (192.168.122.0/24),NAT 可通过我的 eth0 上的网桥 (virbr0) 访问世界其他地方。Dnamasq 将该虚拟网络的 DHCP+DNS 私有化。
这是虚拟网络的 libvirt 配置:
<network>
<name>default</name>
<uuid>400c59ff-c276-4154-ab73-9a8a8d1c6be3</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:f4:bd:37'/>
<domain name='kvm'/>
<dns forwardPlainNames='no'>
<forwarder addr='127.0.1.1'/>
<host ip='192.168.122.1'>
<hostname>host</hostname>
<hostname>host.kvm</hostname>
</host>
</dns>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
Run Code Online (Sandbox Code Playgroud)
Libvirt 启动一个 dnsmasq 实例,侦听 192.168.122.1:53,它回答对 .knv 的所有请求并将任何其他请求转发到我的主机。这个 dnsmasq 配置是由 libvirt 自动生成的:
/var/lib/libvirt/dnsmasq/default.conf
##WARNING: THIS …Run Code Online (Sandbox Code Playgroud) domain-name-system internal-dns libvirt dnsmasq kvm-virtualization
如何防止 VM 用户/客户端访问他不拥有但通过 KVM/Libvirt 上的同一网桥路由的 IP 地址?
IP 地址路由到由 /24 254 可用地址组成的 cisco 交换机 vLan,例如。105.100.1.0/24。
这是设置的示例。
VM1 - 105.100.1.5
VM2 - 105.100.1.6
VM3 - 105.100.1.7
Run Code Online (Sandbox Code Playgroud)
如何防止 VM1 访问他不拥有的地址?
libvirt ×10
qemu ×3
centos ×1
dnsmasq ×1
hard-drive ×1
internal-dns ×1
iptables ×1
monitoring ×1
networking ×1
openstack ×1
performance ×1
routing ×1
vps ×1
windows-7 ×1