最近整理公司的几台服务器,由于机器少应用多,就总是觉得服务器资源紧张,所以痛 下决心使用虚拟机。考察了一番决定使用KVM,因为机器配置不是很高,使用KVM性能 会比较好。


基础系统选用CentOS5.4,下面列出具体的安装配置过程



1. 安装CentOS操作系统



下载CentOS5.4,安装是使用Server模式,不安装任何桌面,毕竟图形桌面太占资源,在选择软件时启用下面的几项:



  • 开发工具
  • 开发库
  • 虚拟化--KVM



虚拟化--KVM



kvm-amd模块时总是不成功!



安装完成后首先启用内核的kvm-amd模块,如果你的机器是intel的就改成kvm-intel,命令如下



[root@localhost ~]# modprobe kvm-amd



如果没有提示任何错误就成功了,可以使用 lsmod | grep kvm查看是否装载成功,命令如下



[root@localhost ~]# lsmod | grep kvm


kvm_amd                68648  1 


kvm                   223264  2 ksm,kvm_amd



看到如上类似的输出就表示启用kvm模块成功!



2. 编译安装KVM



CentOS的yum源里提供的kvm版本太低,所以我决定自己编译安装。首先 下载kvm源码包,然后解压,命令如下



[root@localhost ~]# tar zxvf qemu-kvm-0.12.3.tar.gz



接下来开始编译、安装,进入解压后的目录,命令如下:



[root@localhost /]# ./configure --prefix=/usr
[root@localhost /]# make
[root@localhost /]# make install



编译很快,基本上几秒就完成了,如果没有出现什么错误,那么恭喜你!KVM已经成功安装了!



KVM版本



目前官方的最高版本是 0.13.0,可是我使用发现无法通过vns连接虚拟机,所以只好放弃,使用 0.12.3版本就一切正常。



3. 搞定虚拟机网桥



bridge-utilstunctl



bridge-utils可以使用yum安装,命令如下:



yum install bridge-utils



tunctl在源里没有找到,需要下载rpm包手工安装,命令如下:



[root@localhost /]# wget -c 'ftp://194.199.20.114/linux/EPEL/5Server/x86_64/tunctl-1.5-2.el5.x86_64.rpm'
[root@localhost /]# rpm -ivh tunctl-1.5-2.el5.x86_64.rpm



接下来编辑网桥配置文件,新建一个名字为 vmbridge.sh的shell文件,使用vim编辑,命令如下



[root@localhost /]# vim vmbridge.sh



然后在新建的文件中加入如下内容



#!/bin/bash


modprobe tun                            


tunctl -t tap0 -u root                  


tunctl -t tap1 -u root


tunctl -t tap2 -u root


tunctl -t tap3 -u root


tunctl -t tap4 -u root


tunctl -t tap5 -u root


tunctl -t tap6 -u root


brctl addbr br0                         


ifconfig eth0 0.0.0.0 promisc           


brctl addif br0 eth0                    


ifconfig br0 up                         


dhclient br0                            


brctl addif br0 tap0                    


brctl addif br0 tap1


brctl addif br0 tap2


brctl addif br0 tap3


brctl addif br0 tap4


brctl addif br0 tap5


brctl addif br0 tap6


ifconfig tap0 up                        


ifconfig tap1 up


ifconfig tap2 up


ifconfig tap3 up


ifconfig tap4 up


ifconfig tap5 up


ifconfig tap6 up


chmod a+rw /dev/net/tun




加载tun模块


首先是新建一个名为tap0的虚拟网卡,所有者为当前用户。


新建一个名为br0的网桥


使eth0进入promiscuous模式,不过执行此步之前最好记录原来eth0的IP,避免后面出现IP冲突。


将eth0加入br0.


激活br0


获取br0的IP


将tap0加入br0


激活tap0



例 1. vmbridge.sh



以上的9个步骤就设置了一个虚拟网卡 tap0,上面的例子中我一共创建了7个虚拟网卡,如果想设置更多的网卡参考上次的内容自行添加即可。



接下来给 vmbridge.sh赋予可执行权限,命令如下:



[root@localhost /]# chmod a+x vmbridge.sh



然后把它加入系统启动里,这样每次启动系统就自动创建了7个虚拟网卡。命令如下:



[root@localhost /]# echo '/kvm/vmbridge.sh' >> /etc/rc.local



OK! 虚拟网卡已经配置完毕,你可以手动执行下 vmbridge.sh,或者马上重启下系统,然后使用 ifconfig命令查看一下是否出现了新建的虚拟网卡。



4. 安装VNC服务器



这步简单,两条命令搞定,命令如下:



[root@localhost /]# yum install vnc-server

[root@localhost /]# service vncserver start



现在可以查看一下VNC是否已经运行,执行下面的命令查看



[root@localhost /]# service vncserver status

Xvnc 已停



虽然显示 Xvnc 已停,但其实是运行的,可以正差访问



5. 创建KVM虚拟机



所有的前期配置都OK了,下面可以创建KVM虚拟机了。



首先创建一个大小为40G的镜像文件用来安装WinXP虚拟机。命令如下



[root@localhost /]# qemu-img create -f qcow2 /kvm/vmimg/kvm-xp.img 40G



现在开始安装WinXP虚拟机,使用如下命令:



[root@localhost /]# qemu-system-x86_64 -m 1024 -drive file=/kvm/vmimg/kvm-xp.img,cache=writeback -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot d -cdrom /home/lm/iso/winxp.iso -smp 2 -soundhw es1370 -vnc 192.168.1.1:1 &



解释一下参数都是什么意思



root@localhost /]# qemu-system-x86_64 -m 1024 -drive file=/kvm/vmimg/kvm-xp.img,cache=writeback -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot d -cdrom /home/lm/iso/winxp.iso -smp 2 -soundhw es1370 -vnc 192.168.1.1:1




-m 1024 表示安装虚拟机时使用1024MB内存


file=/kvm/vmimg/kvm-xp.img 指向刚刚创建的虚拟机镜像文件


ifname=tap0 指定一个虚拟网卡


-cdrom /home/lm/iso/winxp.iso 指定WinXP的iso安装文件


-smp 2 指定使用CPU的核数


-soundhw es1370 启用声卡


-vnc 192.168.1.1:1 指定VNC访问IP和端口



然后用VNC客户端连接 192.168.1.1:1,就看到安装界面了。安装就不说,和以往安装XP一样的。



接下来可以访问安装好的虚拟机了。使用如下命令:



[root@localhost /]# qemu-system-x86_64 -m 1024 -drive file=/kvm/vmimg/kvm-xp.img -localtime -net nic,vlan=0,macaddr=00:00:00:00:20:02 -net tap,vlan=0,ifname=tap0,script=no -boot c -smp 2 -clock rtc -soundhw es1370 -vnc 192.168.1.1:1



命令格式基本和安装差不多,需要说明的是 macaddr硬件地址要自己指定一个不冲突的,虚拟机可以用DHCP自动获取一个IP地址。最后用VNC客户端连接 192.168.1.1:1就可看到XP启动界面了。如果你安装的是Linux,可以直接用SSH访问,比较方便。