黑马程序员技术交流社区

标题: 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较 [打印本页]

作者: 播妞    时间: 2018-12-25 17:37
标题: 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较

1、Xen、KVM、VMware、hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件。

vmware是付费的虚拟化软件。

hyper-v比较特别,是微软windows 2008 R2附带的虚拟化组件,如果你买了足够的授权,hyper-v(包括hyper-v 2008 core)都可以免费使用。

如果是vmware或hyper-v虚拟windows系统,不管是虚拟化软件本身,还是其中的子系统,都要支付许可费用。

如果是vmware或hyper-v虚拟linux,虚拟化软件本身要支付许可费用,子系统可以用linux来节省成本。

如果是xen或kvm虚拟windows,其中的子系统要支付许可费用。

如果是xen或kvm虚拟linux,那么虚拟化软件本身和其中的子系统无需产生任何费用。

从性能上来讲,虚拟windows,如果都能得到厂商的支持,那么,性能优化可以不用担心。这几款软件全都能达到主系统至少80%以上的性能(磁盘,CPU,网络,内存),这时建议使用hyper-v来虚拟windows,微软自身的产品,虚拟windows是绝对有优势的。

如果是虚拟linux,建议首先使用xen,支持linux的半虚拟化,可以直接使用主系统的cpu和磁盘及网络资源,达到较少的虚拟化调度操作,可以达到非常高的性能,但xen操作复杂,维护成本较高。其次我们推荐kvm来虚拟linux,linux本身支持kvm的virtio技术,可以达到少量的虚拟化调度操作,得到较高的系统性能。

不推荐使用hyper-v来虚拟linux,太多的不兼容性导致linux基本无法在hyper-v上跑。

如果以上产品我们不打算买厂商支持,其中vmware和hyper-v,是不建议使用的,主要是授权问题。

这时就剩下kvm和xen了,如果虚拟windows,建议使用kvm,我们可以从redhat那里免费拿到针对windows优化过的磁盘和网络的驱动程序,可以达到较高的性能(几乎与hyper-v性能持平)。而xen的windows优化驱动不是那么容易就能拿到的(由于redhat以后不支持xen了,看看novell是否放水了,呵呵,就开放程度上来讲,redhat要好于novell)。

综上所述, 在有授权的情况下,虚拟windows,建议使用hyper-v 在有授权的情况下,虚拟linux,建议使用xen,如考虑到需要降低管理维护和学习成本,建议使用kvm。

在没有授权的情况下,虚拟windows,建议使用KVM

2、KVM基本介绍

在2010年4月发布的RHEL6.0版本中,去掉了XEN,这也许是第一个不包含Xen Hypervisor的知名linux发行版。KVM是指基于Linux内核的虚拟机(Kernel-base Virtual Machine),增加到Linux内核是Linux发展的一个重要里程碑,这也是第一个整合到Linux主线内核的虚拟化技术。在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,你可以在用户空间启动客户机操作系统,一个普通的Linux进程有两种运行模式:内核和用户,KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。

1 KVM虚拟机的管理工具

准确的来说,KVM仅仅是Linux内核的一个模块,管理和创建完整的KVM虚拟机,需要更多的辅助工具。

QEMU-KVM:在Linux系统中,首先我们可以用modprobe命令加载KVM模块,如果用RPM安装KVM软件包,系统会在启动时自动加载模块,QEMU是一个强大的虚拟软件,它可以虚拟不同的构架。

Virt-manager:尽管QEMU-KVM工具可以创建和管理KVM虚拟机,RedHat为KVM开发了更多的辅助工具,比如 libvirt libguestfs等,原因是QEMU工具效率不高,不易于使用。

2 安装配置KVM相关软件

2.1系统要求:

处理器需求:需要一台可以运行最新linux内核的Intel处理器(含VT虚拟化技术)或AMD处理器(含SVM安全虚拟机技术的AMD处理器,也叫AMD-V)

[root@vfeelit ~]# cat /etc/redhat-release

CentOS release 6.4 (Final)

2.2检查CPU:

[root@vfeelit ~]# egrep ‘vmx|svm’ /proc/cpuinfo

如果输出的结果包含VMX,它是Intel处理器虚拟机技术标志:如果包含SVM,它是AMD处理器虚拟机技术的标志,如果你什么都没有得到,那应你的系统并没有支持虚拟化的处理,不能使用KVM,另处linux发行版本必须在64bit环境中才能使用KVM。

3 更新系统

yum update

yum upgrade

4 安装KVM

[root@vfeelit ~]#yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v

[root@vfeelit ~]#vi /etc/sysconfig/selinux

SELINUX=disabled

[root@vfeelit ~]#reboot

5 重启后确认libvirtd是否正常启动

[root@vfeelit ~]# /etc/init.d/libvirtd restart

正在关闭 libvirtd 守护进程: [确定]

启动 libvirtd 守护进程:2013-05-19 03:12:52.694+0000: 3070: info : libvirt version: 0.10.2, package: 18.el6_4.5 (CentOS BuildSystem , 2013-05-16-14:53:18, c6b7.bsys.dev.centos.org)

2013-05-19 03:12:52.694+0000: 3070: warning : virGetHostname:2265 : getaddrinfo failed for 'vfeelit': 未知的名称或服务

[确定]

6 检查KVM是否加载成功

显示结果如下表示kvm模块已经加载,如果没有输出信息,则表示没有加载成功:

[root@vfeelit ~]# lsmod | grep kvm

kvm_intel 53484 0

kvm 316506 1 kvm_intel

7 检查KVM是否成功安装

[root@vfeelit ~]# virsh list --all ##--all关闭的也会显示

Id 名称 状态

----------------------------------------------------

8 各版本查询

[root@vfeelit ~]# kvm --version

bash: kvm: command not found

[root@vfeelit ~]# virt-install --version

0.600.0

[root@vfeelit ~]# virsh --version

0.10.2

9 修改qemu.conf配置

[root@vfeelit ~]# vi /etc/libvirt/qemu.conf

vnc_listen = "0.0.0.0"修改vnc监听端口

二 配置网络桥接

参考:http://www.techotopia.com/index. ... ed_Bridge_Interface

1 安装tunctl:

yum install -y tunctl

2 禁用网络管理器:

chkconfig NetworkManager off ##和桥接有冲突,要关闭

service NetworkManager stop

3 修改eth0为物理网口,br0为桥接网口配置文件:

[root@vfeelit network-scripts]# cat ifcfg-br0

DEVICE=br0

TYPE=Bridge

BOOTPROTO=static

IPV6INIT=no

ONBOOT=yes

IPADDR=192.168.1.66

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

DNS1=8.8.8.8

DELAY=0

[root@vfeelit network-scripts]# cat ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

BRIDGE=br0

BOOTPROTO=none

IPV6INIT=no

ONBOOT=yes

附加说明:这里配置成桥接方式,实际上本机的数据包发送是通过br0发送的,br0的TYPE是Bridge,其它的信息跟配置一个物理网卡一样,本机的eth0通过桥接到br0(通过BRIDGE指定)进行通信,它根本不需要配置IP信息,实际上数据发送还是通过本机的物理网卡。

4 最后重启网络

[root@vfeelit network-scripts]# service network restart

5 查看桥接网络

[root@vfeelit ~]# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.0021cc6b6f2c no eth0

virbr0 8000.525400ac7ebe yes virbr0-nic

接口eth0通过br0进行桥接。birbr0-nic通过virbr0进行桥接,这个是默认的设置,当使用NAT时使用。

三 使用virt-install 工具安装guest 系统

[root@vfeelit /]# virt-install --name=centos64 --ram 1024 --vcpus=2 --disk path=/var/lib/libvirt/images/centos64.img,size=10 --accelerate --cdrom /mnt/CentOS64.iso --graphics vnc,password=123456,port=5920 --network bridge=br0 --force --autostart

使用virt-install 工具,工具自动创建磁盘,默认是raw格式。

[root@vfeelit]# qemu-img info centos.img

image: centos.img

file format: raw

virtual size: 10G (10737418240 bytes)

disk size: 1.4G

1 可以通过virt-viewer查看安装状态:

[root@vfeelit virtual]# virt-viewer name

2 使用virt-install 工具安装虚拟机后,在目录/etc/libvirt/qemu/下生成xml 配置文件。

[root@vfeelit ~]# cd /etc/libvirt/qemu

[root@vfeelit ~]# cat centos64.xml

虚拟机类型

centos 虚拟机名称

54da30ed-150d-514e-9803-4dc01bd50488 uuid唯一标示

1048576 指定虚拟机内存大小,给出了单位

2 虚拟机占用虚拟cpu个数,这里指物理cpu的核心数量

hvm 指定虚拟系统架构

启动类型,从硬盘启动

/usr/libexec/qemu-kvm 驱动程序,同上,使用的是qemu-kvm

指定磁盘类型

指定磁盘格式,这里是raw,也支持qcow2.

img文件路径

磁盘文件标示,驱动类型

自动生成,可以手动指定。

桥接到哪一个接口

3 使用virsh工具管理生成的虚拟机

[root@vfeelit ~]# virsh start centos64 启动虚拟机 reboot start shutdown

[root@vfeelit ~]# virsh list 列出当前运行的虚拟机

Id Name State

----------------------------------------------------

1 centos64 running

[root@vfeelit ~]# ll /var/lib/libvirt/qemu

total 12

srwxr-xr-x 1 root root 0 Aug 22 09:53 centos.monitor ##这里的文件,是libvirtd在重启后,虚拟机也随着自动重启。

动态查询kvm资源占用情况,每一台VM,对应一个qemu-kvm进程

[root@vfeelit ~]# top -d 1 | grep kvm

4 截取的kvm进程信息

[root@vfeelit ~]# ps -aux | grep kvm

其他问题

1、图形化配置:从菜单中启动,或者运行virt-manager进入图形管理界面,比较简单,不过img的位置需要注意一下,kvm安装后会有一个默认位置,不注意的话容易占满空间。或者直接硬盘分区时单独给/var分一个区。

2、虚拟机重新配置:

虚拟机的配置文件保存在/etc/libvirt/qemu目录下,扩展名是xml。修改相应的文件即可重新配置虚拟机。

3、虚拟机备份及恢复:

备份:拷贝/etc/libvirt/qemu目录下的xml配置文件,以及xml中设置的img文件。

恢复:进入virsh,执行define 目录下的xml文件路径

virsh # define /etc/libvirt/qemu/winxp.xml

4、开机自动启动虚拟机:

[root@vfeelit qemu]# virsh autostart Winxp

5、克隆KVM虚拟机:

[root@vfeelit ~]# virt-clone -o Winxp -n winxpclong -f /var/lib/libvirt/images/winxpclong.img

(-o 原始客体的名称,-n新客户端的名称,-f作为新客户端磁盘映像的新文件)

6、虚拟机意外关机报下述错误:

[root@vfeelit qemu]# virsh start winxp

错误:开始域 winxp 失败

错误:Unable to read from monitor: Connection reset by peer

解决方法:virsh managedsave-remove winxp

Virsh语法参考:

Autostart 自动开始一个域

Create 从一个 XML 文件创建一个域

Define 从一个 XML 文件定义(但不开始)一个域

edit 编辑某个域的 XML 配置

shutdown 关闭一个域

start 开始一个(以前定义的)非活跃的域

reboot 重新启动一个域

suspend 挂起一个域

resume 重新恢复一个域

vncdisplay vnc 显示

使用save来备份当前虚拟机的状态:

[root@vfeelit images]# virsh save –bypass-cache RedHat /var/lib/libvirt/images/test.img –running

上面这个命令将RedHat的当前状态保存到/opt/vm2_save文件中。–running参数表示下次restore回来的时候能够自动启动RedHat。

这个命令会导致RedHat被关闭。

现在还原:必须先关闭虚拟机

[root@vfeelit images]# virsh shutdown RedHat

[root@vfeelit images]# virsh restore /var/lib/libvirt/images/test.img –bypass-cache –running (还原时不要指定虚拟机名称)

3、KVM自动部署及基本操作

随着 IT 产业的不断发展, IT 技术的不断革新,近几年虚拟化、云计算技术火热,那我们今天来研究一下虚拟化技术,到底什么是虚拟化技术呢?我们为什么要使用虚拟化呢?

虚拟化 是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。

虚拟化技术 可以扩大硬件的容量,简化 软件 的重新配置过程。 CPU 的 虚拟化技术 可以单 CPU 模拟多 CPU 并行,允许一个平台同时运行多个操作系统,并且 应用程序 都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

目前主流的虚拟化技术主要有: KVM 、 Xen 、 VMware 、 VirtualBox ,虚拟化技术也越来越广泛的应用在企业中,今天我们来研究和复习一下 KVM 虚拟化集群的搭建。

1、系统版本:

CentOS 6.4 x86_64

2、处理器需求:

需要一台可以运行最新 linux 内核的 Intel 处理器(含 VT 虚拟化技术)或 AMD 处理器(含 SVM 安全虚拟机技术的 AMD 处理器,也叫 AMD-V )

[root@kvm~]# cat /etc/redhat-release

CentOSrelease 6.4 (Final)

3、CPU 支持需求 :

[root@localhost~]# egrep 'vmx|svm' /proc/cpuinfo

如果输出的结果包含 VMX ,它是 Intel 处理器虚拟机技术标志:如果包含 SVM ,它是 AMD 处理器虚拟机技术的标志,如果你什么都没有得到,那应你的系统并没有支持虚拟化的处理,不能使用 KVM ,另处 linux 发行版本必须在 64bit 环境中才能使用 KVM 。

4、KVM正式安装:

这里直接使用脚本,比较方便快捷,了解更多可以参官方网站。(仅供参考,后期不断优化)

#!/bin/sh

#Auto Make KVM Virtualization

#Author wugk 2013-12-06

#Defined Path

DAY_DIR=/data/backup/`date +%Y%m%d`

cat <

++++++++++++++++Welcome To Use Auto Install KVM Scripts ++++++++++++++++++

+++++++++++++++++++++++++This KVM Install Virtual ++++++++++++++++++++++++

+++++++++++++++++++++++++2013-12-06 Author wugk ++++++++++++++++++++++++++

EOF

KVM_SOFT=(

kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v libguestfs-tools

)

NETWORK=(

HWADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print

$1}'`

IPADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print

$2}'`

NETMASK=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print

$3}'`

GATEWAY=`route -n|grep "UG"|awk '{print $2}'`

)

#Check whether the system supports virtualization

egrep 'vmx|svm' /proc/cpuinfo >>/dev/null

if

[ "$?" -eq "0" ];then

echo 'Congratulations, your system success supports virtualization !'

else

echo -e 'OH,your system does not support virtualization !\nPlease modify the BIOS virtualization options (Virtualization

Technology)'

exit 0

fi

if

[ -e /usr/bin/virsh ];then

echo "Virtualization is already installed ,Please exit ...." ;exit 0

fi

yum -y install ${KVM_SOFT[@]}

/sbin/modprobe kvm

lsmod | grep kvm >>/dev/null

if

[ "$?" -eq "0" ];then

echo 'KVM installation is successful !'

else

echo 'KVM installation is falis,Please check ......'

exit 1

fi

cd /etc/sysconfig/network-scripts/

mkdir -p $DAY_DIR

if [ ! -e $DAY_DIR/ifcfg-eth0 ];then

cp ifcfg-eth* $DAY_DIR/

fi

if

[ -e /etc/sysconfig/network-scripts/ifcfg-br0 ];then

echo "The ifcfg-br0 already exist ,Please wait exit ......"

exit 2

else

cat >ifcfg-eth0 <

DEVICE=eth0

BOOTPROTO=none

${NETWORK[0]}

NM_CONTROLLED=no

ONBOOT=yes

TYPE=Ethernet

BRIDGE="br0"

${NETWORK[1]}

${NETWORK[2]}

${NETWORK[3]}

USERCTL=no

EOF

cat >ifcfg-br0 <

DEVICE="br0"

BOOTPROTO=none

${NETWORK[0]}

IPV6INIT=no

NM_CONTROLLED=no

ONBOOT=yes

TYPE="Bridge"

${NETWORK[1]}

${NETWORK[2]}

${NETWORK[3]}

USERCTL=no

EOF

fi

echo 'Your can restart Ethernet Service: /etc/init.d/network restart !'

echo '---------------------------------------------------------'

sleep 1

echo 'Your can restart KVM Service : /etc/init.d/libvirtd restart !'

echo

echo -e "You can create a KVM virtual machine: \nvirt-install --name=centos01 --ram 512 --vcpus=1 --disk

path=/data/kvm/centos01.img,size=7,bus=virtio --accelerate --cdrom /data/iso/centos58.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --

network bridge=br0,model=virtio --noautoconsole"

自此KVM简单安装到此结束,安装完毕,怎样来创建一个虚拟机并且安装呢,首先我们把需要安装的系统ISO镜像上传到/data/iso目录,然后新建/data/kvm虚拟机安装目录,然后启动如下脚本:

virt-install --name=centos01 --ram 512 --vcpus=1 --disk path=/data/kvm/centos01.img,size=7,bus=virtio --accelerate --cdrom /data/iso/centos58.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio

然后在客户端(PC机)使用VNC客户端连接KVM服务端5910端口,进行安装系统即可。

当安装完一台后,如何快速启动第二台呢,这里只需要复制我们刚安装的第一台的两个文件(/data/kvm/centos01.img /etc/libvirt/qemu/centos01.xml),然后做相应修改即可。

204720916.png

还可以使用命令克隆:

nohup virt-clone -o centos01 -n centos02 -f /data/kvm/centos02.img &

这样就配置完毕,怎样重启两台虚拟机呢?命令如下:

(参数主要有reboot、start、shutdown)

virsh reboot centos01 (重启)

virsh reboot centos02 (重启)

virsh start centos01 (启动)

virsh start centos02 (启动)

当我们启动新克隆的两台虚拟机,我们会发现网卡无法启动,原因是因为克隆改变新虚拟机的MAC地址,故eth0无法启动,新的虚拟机后网卡变成了eth1,那我们怎样修改为eth0呢,使用如下脚本,执行,然后重启网卡(或者重启系统)即可。

#!/bin/sh

#Auto Set Centos6.x eth1 MAC to eth0

NET=/etc/udev/rules.d/70-persistent-net.rules

ETH0=/etc/sysconfig/network-scripts/ifcfg-eth0

sed -i '/eth0/s/SUBSYSTEM/#SUBSYSTEM/g' $NET

HWADDR=`grep eth1 $NET|awk '{print $4}'|awk -F'==' '{print $2}'|sed 's/\,//g'`

sed -i "s/HWADDR.*/HWADDR=$HWADDR/g" $ETH0

sed -i -e '/^SUBSYSTEM/s/eth1/eth0/' -e '/#SUBSYSTEM/s/eth0/eth1/' -e 's/#SUBSYSTEM/SUBSYSTEM/' $NET

#This script applies only two NIC configuration

COUNT=`grep "SUBSYSTEM" $NET|awk '{print $NF}'|sed 's/[^0-9]//g'|awk 'NR==2'`

if

[ $COUNT == 0 ];then

echo 'The IP MAC Change Successfully !'

else

echo "The IP MAC Change Fails,Please rerun the Shell Scripts"

fi

KVM简单操作就先介绍到这里,更多功能和维护在后期会更新。

本文参考如下文章,非常感谢:

http://koumm.blog.51cto.com/703525/1290191

http://g.51cto.com/netengineer/216414

4、KVM常见问题

1.error:no hypervisor options were found ofr this connection

this usually means that qemu or kvm is not installed on your machine,or the kvm kernel modules are not loaded.

解决方法:开启bios虚拟化并加载modprobe kvm以及kvm_intel.

2.Unable to migrate guest: unsupported configuration: Domain requires KVM, but it is not available. Check that virtualization is enabled in the host BIOS, and host configuration is setup to load the kvm modules.

解决方法:方法同上.

3.Unable to migrate guest: Unable to allow access for disk path /img/musf-clone1-2-clone.img: No such file or directory

解决方法:迁移与被迁移主机的共享目录一定要一样.即server1目录为/img server2目录也要为/img.

4.Unable to migrate guest: unable to connect to server at 'kvm3:49153': Connection refused

解决方法:1.开启防火墙上端口或关闭防火墙.

2.在virt-manager的迁移中添加迁移端口.

5.Unable to migrate guest: Timed out during operation: cannot acquire state change lock

解决方法:...求科普..而且是大部分虚拟机都可以迁移就一个不成..找不到北ing...

1.虚拟机起不来的情况下.使用kill -9 `ps -ef|grep 'libvirtd --daemon'|grep -v grep |awk '{print $2}'`杀死libvirt --daemon进程并重启libvirtd --daemon

6.error: Unable to initialize network sockets. Check /var/log/messages or run without --daemon for more info.

事件还原:使用virtual host模式安装完centos,并且yum安装好vdsm之后,开启vdsm不能,开启libvirtd不能。显示该错误如上。

解决方法:进入/etc/libvirt/libvirtd.conf修改listen_tls为0即可.

7.Host 25 installation failed. SSH command failed while executing at host 'root@192.168.20.25', refer to logs for further information。

事件还原:安装vdsm之后从ovirt管理界面加入当前vdsm主机时出现错误。原因之一为vdsm-cli未安装。安装即可。

8.在ovirt-engine中添加data/nfs作为存储域时并不能成功。

解决方法:1.可以试试查看一下将要共享的文件夹权限是否是vdsm:kvm。若不是使用chown -R命令即可。

authentication name

9.vdsm在加入ovirt时会使用sasl再次加密libvirt,所以使用virt-manager连接libvirt时需要输入 authentication name & passowrd。

解决方法:使用saslpassword2 -a命令创建另一组认证名和密码用于virt-manager对libvirt的访问即可。

命令格式: saslpasswd2 -a libvirt 用户名

10.部分主机创建虚拟机成功,开启虚拟机时出现error...

VM CentOS6.3T is down. Exit message: internal error Process exited while reading console log output: bind(unix:/var/lib/libvirt/qemu/channels/CentOS6.3T.com.redhat.rhevm.vdsm): Permission denied chardev: opening backend "socket" failed

由于../channels这个文件夹的权限是vdsm qemu。root用户可能不能读取并创建其中的文件。我采用的方法是手动在qemu.conf中注释掉.user = root 以及 group = root并重启libvirtd。

之后出现错误:VM CentOS6.3T is down. Exit message: internal error client socket is closed.

还有VM test is down. Exit message: cannot open file '/rhev/data-center/78e07dee-36bc-439b-b71e-72cfd87a2bb3/f84e3679-281e-41d4-9ea9-b8221085fa7b/images/2e93290e-f1b5-42b2-bdf6-fad695de2ccb/ef334a97-e01b-4d7c-afb0-814ffbe537f0': Permission denied.

这两个错误都是由于libvirt设置问题才报错的.

我直接覆盖了libvirtd.conf qemu.conf以及vdsm.conf文件.最近权限问题整的我焦头烂额啊.以后再找具体错误.

1.系统(处理器)需求?

你将需要一台运行最新Linux内核的Intel处理器(含VT虚拟化技术)或AMD处理器(含SVM安全虚拟机技术的AMD处理器, 也叫AMD-V)。

2.什么是Intel VT/AMD-V?

Intel VT和AMD’s AMD-V是一套与支持该技术的虚拟机监视器相结合的硬件增强特性(指令集扩展)。kvm可在原始硬件速度下通过运行完全隔离的虚拟机来执行任务。

3.如何确认处理器含有Intel VT或AMD-V技术?

在最新的Linux内核下运行: egrep ‘^flags.*(vmx|svm)’ /proc/CPUinfo

如有显示,您的处理器具有VT功能。你也可以通过厂商网站查询处理器型号的名称(在/proc/cpuinfo)。

注:一些厂商禁止了机器BIOS中的VT选项, 这种方式下VT不能被重新打开。

./proc/cpuinfo仅从Linux 2.6.15(Intel)和Linux 2.6.16(AMD)开始显示虚拟化方面的信息. 请使用uname -r命令查询您的内核版本。

如有疑问, 请联系硬件厂商。

4.kvm支持哪些用户空间工具?

kvm使用稍改动的qemu程序来创建虚拟机. 一旦运行后, 虚拟机是一个标准的进程. 你可以使用top(1),kill(1),taskset(1)和类似的工具来管理虚拟机。

5.kvm支持哪些虚拟磁盘格式?

kvm从qemu继承了丰富的磁盘格式, 包括裸映象(raw images), 原始qemu格式(qcow), VMware格式和更多。

6.kvm和Xen有何区别?

Xen是一个外部的hypervisor程序(虚拟机管理程序);它能够控制虚拟机和给多个客户机分配资源. 另一方面, kvm是linux的一部分, 可使用通常的linux调度器和内存管理. 这意味着kvm更小更易使用。

另一方面, Xen同时支持全虚拟化和半虚拟化(修改过的客户机能有更好的性能). kvm当前不支持半虚拟化。

7.kvm和VMware有何区别?

VMware是一个专利产品. kvm是一个遵守GPL的自由(开源)软件。

8.kvm和QEMU有何区别?

Qemu使用模拟器; kvm使用处理器扩展实现虚拟化。

Array.kvm有Windows上的版本吗?

当前没有。

10.kvm支持哪些内核版本?

kvm可以运行在最新的内核版本下(2.6.16或更高, 最好是用最新的内核)

11.我需要多什么RAM(内存)才能运行kvm?

你需要足够的内存在主机上运行单个或多个虚拟机. 建议主机内存至少1GB。

12.KVM上的虚拟机支持哪些操作系统?

我们已经测试了Linux(32/64位)和Windows(32位), 其它也许能够运行或不能运行。不支持64位的Windows操作系统, 该问题会在qemu-0.83发布和整合后修复。

Intel处理器上几个Linux发行版在启动时候会挂起。工作区需要取消grub中的splashscreen选项。

13.KVM支持动态迁移功能吗(在不离线的情况下把虚拟机从一个主机移到另一个主机上)?

现在kvm支持非动态迁移,当内存数据需转移的时候,系统需要停止。动态迁移功能正在开发当中。

14.kvm能够在64为主机上运行32位的客户机吗? 什么是PAE?

kvm支持在64位主机上运行32位客户机, 也可以是任何PAE或非PAE客户机和主机组合。但不支持在32位主机上运行64位客户机。

15.如果我对一个VM进程使用kill -Array将会发生什么?

从客户机的角度来看,就如你猛地把电源线从主机上拔出一样。从主机的角度来看,进程被杀掉,进程占用的所有资源被施放。

16.kvm支持SMP主机吗?

支持。

17.如何安装windows客户机?

当前Windows客户机安装存在一点问题,问题在APIC的实现上。现在APIC由qemu来模拟, 而qemu还没有完全整合到kvm虚拟cpu中。我们正加紧在kvm中实现APIC功能。

到现在, 启动qemu请使用-no-acpi参数,如果你的客户机需使用APIC HAL,建议参考下面步骤:

1. 关闭kvm运行客户机(-no-kvm)

My Computer -> PropertIEs -> Hardware -> Device Manager -> [Whatever under Computer] -> Properties -> Update Driver -> Not at this time -> Next -> Install from a list -> Next -> Don’t search -> Next -> Standard PC -> Next.

“Standard PC”是无acpi支持的HAL.

18.Qumranet提供哪些产品?

umranet是一家由Qequoia Capital和Norwest Venture Partners (NVP)投资的初创公司,当前公司处于准备运营当中(正在加紧开发公司的产品)。(T002)

5、KVM使用经验

虚拟化技术已经成为未来计算机技术的一个重要的发展方向。linux在虚拟化方面已经有了很多中解决方案: VMware、 VirtualBox、Xen和KVM。KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行。Xen也是Linux下的一个虚拟化解决方案,也将很快被编入内核中。Xen的实现方法是,运行支持Xen功能的kernel……

一.KVM简介

虚拟化技术已经成为未来计算机技术的一个重要的发展方向.linux在虚拟化方面已经有了很多中解决方案,:VMware,VirtualBox,Xen和KVM。

KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。

Xen与KVM的比较

Xen也是Linux下的一个虚拟化解决方案,也将很快被编入内核中。Xen的实现方法是,运行支持Xen功能的kernel,这个kernel是工作在Xen的控制之下,叫做Domain0,使用这个kernel启动机器后,你可以在这个机器上使用qemu软件,虚拟出多个系统。Xen的缺点是,如果你需要更新Xen的版本,你需要重新编译整个内核,而且,稍有设置不慎,系统就无法启动。

相比较,KVM就简化的多了。它不需要重新编译内核,也不需要对当前kernel做任何修改,它只是几个可以动态加载的.ko模块。它结构更加精简,代码量更小,所以,出错的可能性更小。并且在某些方面,性能比Xen更胜一筹。

二.KVM的使用

现在以Turbolinux 11版本为基础,介绍KVM的使用方法。

在安装之前,你需要先确认,你的CPU是否支持虚拟化技术,执行:

# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

如果有输出返回,则表示,你的CPU支持虚拟化技术。

1.KVM的安装

从官方网站下载KVM源码包:http://kvm.qumranet.com/

我们使用KVM-33版本

# tar zxf kvm-33.tar.gz

# cd kvm-33

# ./configure --prefix=/usr/local/kvm-33

# make

# make install

make install后,kvm的模块会安装到/lib/modules/$KernelVersion/extra/目录下.其他相关文件会安装到/usr/local/kvm-33/目录下。

将kvm相关目录连接到系统目录中

# ln -s /usr/local/kvm-33/bin/* /usr/bin/

# ln -s /usr/local/kvm-33/lib/* /usr/lib/

(若为x86_64系统,则执行: ln -s /usr/local/kvm-33/lib64/* /usr/lib64/)

# ln -s /usr/local/kvm-33/include/kvmctl.h /usr/include/

# ln -s /usr/local/kvm-33/include/linux/* /usr/include/linux/

# ln -s /usr/local/kvm-33/share/qemu /usr/share/

2.KVM的使用

a.你需要先建立一个映像文件,作为虚拟系统的硬盘

# mkdir /images

# cd /images

# /usr/bin/qemu-img -f qcow gtes11.img 20G

b.创建网络配置脚本

# echo '/sbin/ifconfig $1 10.0.1.1 netmask 255.255.255.0' > /etc/qemu-ifup

c.加载KVM模块

Intel CPU使用:

# modprobe kvm-intel

AMD CPU使用:

# modprobe kvm-amd

d.安装虚拟系统

# /usr/bin/qemu-i386 -m 512 -k en-us -M pc -hda /images/gtes11.img -cdrom /iso/zuma-SP3-rc3-6-

disc1-20061031.iso -net nic,vlan=1,model=rtl8139,macaddr=00:00:00:00:99:01 -net tap,vlan=1,ifname=tap0,

script=/etc/qemu-ifup -vnc localhost:1 -boot d

在另一个终端执行:

# vncviewer localhost:1

参数分析:

我们为虚拟系统分配512MB内存.使用gtes11.img作为它的第一块硬盘,使用Turbolinux10.5的disc1作为它的光盘。

并从光盘引导.它有一块rtl8139的网卡,MAC地址为:00:00:00:00:99:01,并把这个网卡与主机的tap0接口连接。

tap0接口使用/etc/qemu-ifup脚本进行初始化.虚拟系统的输出作为一个vnc服务器,绑定在主机的localhost:1上。

注:

1.若为x86_64系统,则使用/usr/bin/qemu-system-x86_64 代替qemu-i386

2.在64位系统上,可以安装32位和64位的虚拟系统.但在32位系统上,只能安装32位的虚拟系统。

qemu参数介绍:

-da 映像文件: 使用映像文件作为虚拟系统的第一块硬盘.同样还可以使用hdb,hdc,hdd指定第2,3,4块硬盘。

-drom 光盘映像文件: 使用光盘映像文件作为虚拟系统的光盘。

-oot [a|c|d|n]: 设置虚拟系统的引导顺序,a为软驱,c为硬盘,d为光驱,n为网络。

- 内存大小: 设置虚拟系统使用的内存大小,单位为MB。

- 语言: 设置虚拟系统键盘类型。

-et nic[,vlan=n][,macaddr=addr][,model=type]

建立一个虚拟网卡,并把它连接到VLAN的n端口上。

-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]

把主机的TAP网络接口连接到VLAN的n端口上,并使用script指定的脚本进行初始化。

6、VNC Viewer 连接成功后闪退的解决方法

2013年12月3日Linux技术VNCVNC ViewerVNC闪退1 Comment

VNC是个不错的工具,今天掏出VNC Viewer来连接一台N久没登陆的服务器看看,输入密码连上后直接闪退,可能是ColourLevel的问题。

依次点Option-->Advanced-->Expert找到ColourLevel,默认值是pal8,修改为rgb222或full。

重新连接,没有问题了。

yum grouplist 检查已安装的组

yum groupinstall "X Window System"

yum groupinstall "GNOME Desktop Environment"

startX

7、CentOS用yum安装X Window

安装CentOS 5.6系统的时候我没有先装任何组件,现在用X Window,需要再安装X Window,就可以启动图形界面了,但是默认的图形界面是很简陋的界面,可以根据需要再安装GNOME或KDE桌面环境

安装X图形界面

#可查询哪些组件是否已经安装(可用来对照组件名称)

yum grouplist

#安装X图形界面系统

yum list 列出所有可安装的软件包 可以通过 yum grouplist 来查看可能批量安装哪些列表 比如 #yum groupinstall "DNS Name Server" //安装 bind 及 bind-chroot 套件

yum groupinstall "X Window System" -y

#安装GNOME桌面环境

yum groupinstall "GNOME Desktop Environment" -y

#安装KDE桌面环境

yum groupinstall "KDE (K Desktop Environment)"

卸载

卸载GNOME桌面环境

yum groupremove GNOME Desktop Environment'

卸载KDE桌面环境

yum groupremove 'K Desktop Environment'

启动X图形界面的方法

1、startx

2、设置开机自动启动,修改/etc/inittab

id:3:initdefault: ------> id:5:initdefault:

3、init 5

默认桌面环境选择

一、设置GNOME或者KDE为默认的启动桌面环境

方法1:修改/etc/sysconfig/desktop,根据需要将“DESKTOP”后面的参数设置为KDE或GNOME。

方法2:在当前用户目录下建立“.xinitrc”这个文件,文件的内容就一行startkde或gnome-session。

二、GNOME和KDE的切换

1、如果需要切换到GNOME:

#switchdesk gnome

2、如果需要切换到KDE:

#switchdesk kde

2、如果需要切换到KDE:

#startkde

图形界面与字符界面的切换

在Linux中是有多控制台的,其中前6个是字符界面,第七个是图形界面。

如果你需要切换到字符界面,可以使用CTRL+ALT+Fn来实现,其中Fn是F1-F6中的任何一个,

当然如果你是在字符界面之间互相切换就没必要CTRL了,直接ALT Fn

8、安装VNC

yum -y install vnc *vnc-server*

vim /etc/sysconfig/vncservers

vncpasswd

/etc/init.d/vncserver start

9、vCPU数量配置

vCPU,顾名思义,是虚拟CPU。 创建虚拟机时,需要配置vCPU资源。 因此vCPU是虚拟机的部件。 因此脱离VM,谈论vCPU是没有意义的。

虚拟化管理系统如何调度vCPU,取决于系统内的虚拟机数目以及虚拟机配置的vCPU的情况。

大致的情况如下:

1、当系统内VM所需的vCPU总数少于物理CPU的核数(包括超线程Core)时,虚拟化管理系统为vCPU分配的资源不超过一个物理CPU核。 vCPU与物理核的分配关系可以是绑定的,也可能是动态的。

比如服务器有20个核心,你创建了2个VM,每个VM 4个vCPU,那么这两个VM最多能够使用服务器的8个核心。

2、当系统内的VM所需要的vCPU核大于物理CPU核数时,虚拟化管理系统首先按照时间片轮流调度一遍,然后如果还有剩余的CPU资源,则给所需要的vCPU。 比如系统配置了40个vCPU,只有20个物理核。那么平均每个vCPU获取一个核心50%的资源。由于一些VM忙,一些VM空闲,虚拟化系统会在一个调度周期内,划分出若干时间片,轮流给每个vCPU使用。忙的vCPU可以使用完整个时间片,而闲的vCPU用不完整个时间片,会提前释放资源。这样在一个调度周期内,对每个vCPU都调度一遍后还有空闲的时间,调度器会把用这剩余的资源去调度忙的vCPU。 这样兼顾公平和效率。 这中调度算法具体下来,大致是如下效果:系统有1个CPU 2.0 Ghz,两个VM,分配1个vCPU。 如果VM1 和 VM2都忙,那么各自相当于拥有一个1.0 Ghz的CPU。 如果VM1很忙,VM1只需要 500Mhz的处理能力,那么在VM1看来,相当于暂时获得了 1.5Ghz的处理器。

3、通过对Xen的测试,系统所有虚拟机的vCPU的总数目小于和等于CPU核数时,VM的性能是比较稳定的。 VM的vCPU基本上绑定到了一个CPU核。 当vCPU数目大于物理核数时,VM的性能稳定性变差。

本文版权归传智播客云计算大数据学院所有,欢迎转载,转载请注明作者出处。谢谢!

作者:传智播客云计算大数据学院

首发:http://www.itcast.cn/javayun






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2