大纲:
一、部署安装kvm虚拟机
二、virsh常见命令解释
三、KVM虚拟机克隆
四、KVM快照
五、让GuestOS支持 console
六、添加网卡
七、磁盘扩容
八、动态迁移
前言:
虚拟化的理论知识我就不啰嗦了,可以参见/thread-24347-1-1.html,kvm全称Kernel-based Virtual Machine, 其实kvm只是一个内核模块,提供虚拟cpu和内存管理的模块,至于其它的设备是由qemu模拟的,如网卡,显卡,磁盘等。后来redhat联合IBM以及Linux社区创造了libvirt,模拟的设备性能要比qemu的好很多,并提供了一系列的管理工具和api,整个集成了kvm虚拟化的解决方案。Linux(redhat系)装载kvm模块后,妖神一变成为了VM Monitor,也称为Hypervisor,部署使用简单,需要硬件支持虚拟化。
一. 部署虚拟机
1). 检测硬件是否支持虚拟化
#egrep'(vmx|svm)'--color=always/proc/cpuinfo
#modprobekvm
#modprobekvm_intel||modprobekvm_amd
如果含有vmx或者svm字样,则表示支持CPU虚拟化,Intel是vmx,AMD是svm,也需要检测是否有kvm_xxx模块,如果装载不成功,可能是没有开启硬件虚拟化,需要bios中开启,具体开启方式请联系厂家
2). 安装rpm包,并启动服务
#yum-yinstallkvmpython-virtinstlibvirttunctlbridge-utilsvirt-managerqemu-kvm-tools \
virt-viewervirt-v2vlibguestfs-tools
#servicelibvirtdstart
3). 检查是否有kvm模块,如果有则继续
#lsmod|grepkvm
kvm_intel5257030
kvm3147391kvm_intel
4). 配置桥接网络 br0
#cd/etc/sysconfig/network-scripts/
#cpifcfg-eth0ifcfg-br0
ifcfg-eth0:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BRIDGE="br0"
BOOTPROTO=static
IPADDR="192.168.2.149"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.2"
ifcfg-br0:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR="192.168.2.149"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.2"
#servicenetworkrestart
#ifconfig
br0...
eth0...
lo...
virbr0...
5). 部署安装虚拟机(GuestOS)
① 建立磁盘文件,如果使用的是raw格式就不需要了,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持快照镜像,zlib磁盘压缩,AES加密等。这里使用qcow2格式
#mkdir/opt/vms
#qemu-imgcreate-fqcow2/opt/vms/centos63-webtest.img40G
② 建立虚拟机, 下面展示多种方式建立虚拟机
###########使用使用iso来安装###########
#virt-install\
--name=centos5\
--os-variant=RHEL5\
--ram=512\
--vcpus=1\
--diskpath=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio\
--accelerate\
--cdrom/data/iso/CentOS5.iso\
--vnc--vncport=5910\
--vnclisten=0.0.0.0\
--networkbridge=br0,model=virtio\
--noautoconsole
###########使用使用nat模式网络###########
#virt-install\
--name=centos5\
--os-variant=RHEL5\
--ram=512\
--vcpus=1\
--diskpath=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio\
--accelerate\
--cdrom/data/iso/CentOS5.iso\
--vnc--vncport=5910\
--vnclisten=0.0.0.0\
--network network=default,model=virtio\
--noautoconsole
#########从http中启动,使用ks安装#########
#virt-install\
--name=centos63-webtest\
--os-variant=RHEL6\
--ram=4096\
--vcpus=4\
--virt-typekvm\
--diskpath=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio\
--accelerate\
--locationhttp://192.168.130.4/centos63\
--extra-args"linuxip=192.168.73.22netmask=255.255.255.224gateway=192.168.73.1ks=http://192.168.130.4/ks/xen63.ks"\
--vnc--vncport=5910\
--vnclisten=0.0.0.0\
--networkbridge=br0,model=virtio\
--force\
--noautoconsole
##########从http安装,使用ks,双网卡,启用console########
#virt-install\
--name=centos63-webtest\
--os-variant=RHEL6\
--ram=4096\
--vcpus=4\
--virt-typekvm\
--diskpath=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio\
--accelerate\
--locationhttp://111.205.130.4/centos63\
--extra-args"linuxip=59.151.73.22netmask=255.255.255.224gateway=59.151.73.1ks=http://111.205.130.4/ks/xen63.ksconsole=ttyS0serial"
--vnc--vncport=5910--vnclisten=0.0.0.0\
--networkbridge=br0,model=virtio\
--networkbridge=br1,model=virtio\
--force\
--noautoconsole
##########安装windows ########
#virt-install\
--name=win7-test\
--os-variant=win7\
--ram=4096\
--vcpus=4\
--diskpath=/opt/vms/centos63-webtest.img,size=100\
--accelerate\
--cdrom=/opt/iso/win7.iso
--vnc--vncport=5910--vnclisten=0.0.0.0\
--networkbridge=br0\
--force\
--noautoconsole
## 不能使用virtio,因为默认windows没有virtio的硬盘和网卡驱动
参数说明:
--name指定虚拟机名称
--ram分配内存大小。
--vcpus分配CPU核心数,最大与实体机CPU核心数相同
--disk指定虚拟机镜像,size指定分配大小单位为G。
--network网络类型,此处用的是默认,一般用的应该是bridge桥接。可以指定两次也就是两块网卡
--accelerate加速
--cdrom指定安装镜像iso
--location从ftp,http,nfs启动
--vnc启用VNC远程管理
--vncport指定VNC监控端口,默认端口为5900,端口不能重复。
--vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
--os-type=linux,windows
--extra-args指定额外的安装参数
--os-variant=[win7vistawinxpwin2k8rhel6rhel5]
--force如果有yes或者no的交互式,自动yes
③ 安装系统 有三种方式,通过VNC来安装, 通过virt-manager来安装 , 通过console配合ks来安装
Ⅰ. 通过VNC来安装
下载TightVNC来连接上vnc安装,只需要TightVNC Client即可,如果使用在RealVNC,就设置ColourLevel=rgb222才能连接,端口号是安装时指定的,以后的安装流程和普通的是一样的
Ⅱ. 通过virt-manager, 如果你使用xshell那么可以不用安装x window就可以使用virt-manager, 需要安装 x11相关软件
#yum-yinstalllibX11xorg-x11-server-utilsxorg-x11-proto-develdbus-x11\
xorg-x11-xauthxorg-x11-drv-ati-firmwarexorg-x11-xinit
#virt-manager
Ⅲ. 通过virt console, 如果你安装时启用了 console可以使用 console来安装, Ctrl+] 可以退出console
#virshconsolecentos63-webtest
VI. 通过virt-viewer来安装
# yum -y install virt-viewer xorg-x11-font*
# virt-viewer centos63-webtest
二. virsh常见命令解释
1.virsh进入交互模式,在该交互模式下有命令不全补全,详细帮助
virsh#lis[tab补全]
virsh#helplist详细帮助
2.virshlist--all查看虚拟机状态
3.virshstartinstanceName虚拟机开机
4.virshshutdowninstanceName虚拟机关机
需要Linux母体机电源管理
serviceacpidstart
5.virshdestroyinstanceName强制关机
6.virshcreate/etc/libvirt/qemu/wintest01.xml通过以前的配置文件创建虚拟机
7.virshautostartinstanceName配置自启动
8.virshdumpxmlwintest01>/etc/libvirt/qemu/wintest02.xml导出配置文件
9.virshundefinewintest01删除虚拟机配置文件,不会真的删除虚拟机
10.mv/etc/libvirt/qemu/wintest02.xml/etc/libvirt/qemu/wintest01.xml
virshdefine/etc/libvirt/qemu/wintest01.xml
重新定义虚拟机
11.virsheditwintest01编辑虚拟机配置文件
12.virshsuspendwintest01挂起虚拟机
13.virshresumewintest01恢复挂起虚拟机
三. 克隆
1). 使用virt-manager来克隆,这个太简单了,就不演示了,需要注意的是,如果启用了VNC, 记得更改VNC的端口,否则启动会失败的,见命令方式修改VNC修改
2). 使用命令克隆虚拟机
#virt-clone-ocentos63_webtest-ncentos63_webtest2-f/opt/vms/centos_webtest2.img
参数说明:
-o –-original 原来实例name
-n –-name 新实例名称
-f –-file 新实例磁盘存放位置
3). 如果你启用了vnc, 修改配置文件中的vnc端口,否则启动失败,配置文件为 /etc/libvirt/qemu对应实例名字的xml文件,先来一张配置文件解释图,很重要
#cd/etc/libvirt/qemu
#ls
#virsheditcentos63_webtest
<graphicstype='vnc'port='5915'............
4). 启动克隆机器 (有的Linux版本可能生成的网卡有问题,请修改 /etc/udev/rules.d/70-persistent-cd.rules, 重启虚拟机)
#virshstartcentos63_webtest1
四. 快照
快照相信大家都知道是什么意思,如果不知道,亲去补补课吧,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。 要使用镜像功能,磁盘格式必须为qcow2。下面开始kvm虚拟机快照的过程。
1). 查看磁盘格式
#qemu-imginfo/opt/vms/centos63-119.22.img
image:/opt/vms/centos63-119.22.img
fileformat:qcow2
virtualsize:40G(42949672960bytes)
disksize:136K
cluster_size:65536
2). 如果不是qcow2需要关机转换磁盘格式,如果是请跳过
#cpcentos63-119.22.imgcentos63-119.22.raw
#qemu-imgconvert-fraw-Oqcow2centos63-119.22.rawcentos63-119.22.img
3). 启动vm, 建立快照,以后可以恢复
#virshstartcentos63-119.22
#virshsnapshot-createcentos63-119.22
4). 快照位置
快照配置文件在/var/lib/libvirt/qemu/snapshot/虚拟机实例名称/下
5). 恢复快照,可以建立一些测试文件,准备恢复
先将虚拟机关闭,查看快照名称,然后恢复快照
#ls/var/lib/libvirt/qemu/snapshot/centos63-119.22
1410341560.xml
#virshsnapshot-revertcentos63-119.221410341560
6). 删除快照
#qemu-imginfocentos63-119.22
11410341560228M-04-0810:26:4000:21:38.053
#virshsnapshot-deletecentos63-119.21410341560
五. 让已安装的虚拟机GuestOS支持 virsh console
virsh console vmname 可以进入到vm的console模式,但是有时只显示链接到vm,提示如下,回车没有反应,这是因为guestos不支持console,下面来启用guestos的console
Connectedtodomaincentos63-119.22
Escapecharacteris^]
1). 修改grub.conf,给内核传递参数 console=ttyS0
#vim/etc/grub.conf
kernel/vmlinuz-2.6.32-279.el6.x86_64roroot=UUID=25756cd7-3597-4e45-8dd
db-79d091c6d17frd_NO_LUKSKEYBOARDTYPE=pcKEYTABLE=usLANG=en_US.UTF-8rd_NO_MM
DSYSFONT=latarcyrheb-sun16console=ttyS0rd_NO_LVMcrashkernel=autorhgbquiet
rd_NO_DM
2). 在/etc/inittab中添加agetty
#echo"S0:12345:respawn:/sbin/agettyttyS0115200">>/etc/inittab
3). 添加到/etc/securetty
#echo"ttyS0">>/etc/securetty
4). 重启GuestOS
六. 添加网卡
线上服务器是双网卡,一个走内网,一个走外网,我们也需要虚拟机这么来工作,但是初始安装虚拟机的时候没有指定两个网卡,这样需要我们来添加一个网卡了,比如说我们已经将br1桥接到em2了,如果不会见刚开始br0桥接em1
1). 通过virt-manager来添加
简单说一下 选中虚拟机 -- Open -- Details – AddHardware 选择网卡模式,mac不要重复,确定即可
2). 通过命令来添加
Ⅰ. 使用virsh attach-interface命令为虚拟机添加网卡
#virshattach-interfacecentos63-119.23--typebridge--sourcebr1--modelvirtio
Ⅱ. 导入配置文件并覆盖原来的, 因为attach-interface添加后,只是在虚拟机中生效了,配置文件并没有改变
#cd/etc/libvirt/qemu
#virshdumpxmlcentos63-119.23>centos63-119.23.xml
Ⅲ. 修改GuestOS中网卡配置文件,为另一个网卡配置IP
#cd/etc/sysconfig/network-scripts
略
Ⅳ. 重启网卡
七. 硬盘扩容
原来的/opt目录随着使用,空间渐渐满了,这时候我们就需要给/opt的挂载分区扩容了,有两种情况 1. 该分区是lvm格式 2. 不是lvm格式,且不是扩展分区
1). 分区是lvm格式 这种很简单,添加一块磁盘,lvm扩容
virt-manager添加方式和添加网卡一样,不再赘述,下面是使用命令来添加
Ⅰ. 建立磁盘,并附加到虚拟机中
# qemu-imgcreate-fraw 10G.img10G
#virshattach-diskcentos63-119.23/opt/kvm/10G.imgvdb
------------------------------添加qcow2磁盘-----------------------------------
# qemu-imgcreate-fqcow2 10G.img10G
#virshattach-diskcentos63-119.23/opt/kvm/10G.imgvdb --cache=none --subdriver=qcow2
---------------------------------------------------------------------------
说明:
centos63-119.23虚拟机的名称
/opt/kvm/10G.img附加的磁盘
vdb添加为哪个磁盘, 也就是在guestos中的名字
Ⅱ. 导出并覆盖原来的配置文件,和网卡一样,attach后只是在虚拟机中生效
#virshdumpxmlcentos63-119.23>centos63-119.23.xml
Ⅲ. 使用lvm在线扩容,详见 /cmsd/p/3964118.html
2). 分区不是lvm格式,该分区不是扩展分区, 需要关机离线扩展
Ⅰ. 新建一个磁盘,大于原来的容量,比如原来是40G,你想对某个分区扩容20G那么
#qemu-imgcreate-fqcow260G.img60G
Ⅱ. 备份原来的磁盘,以防三长两短
#cpcentos63-119.27.imgcentos63-119.27.img.bak
Ⅲ. 查看原来的磁盘决定扩容哪一个分区
#virt-filesystems--partitions--long-acentos63-119.27.img
#virt-dfcentos63-119.27.img
Ⅳ. 扩容GuestOS的sda2
#virt-resize--expand/dev/sda2centos63-119.27.img60G.img
说明:
/dev/sda2 扩容guestos的/dev/sda2
centos63-119.27.img 原来的磁盘文件
60G 第一步建立的更大的磁盘文件
Ⅴ. 使用新磁盘启动
#mv60G.imgcentos63-119.27.img
#virshstartcentos63-119.27
virt-resize其实就是将原来磁盘中的文件复制到新的文件中,讲想要扩大的分区扩大了
八. 动态迁移
用过vSphere 或者 xenserver的都知道动态迁移,最大程度上减少宕机时间 , 比如将正在运行在A上的虚拟机不关机迁移到B上,会将原来虚拟机的内存,CPU状态等迁移到新的主机上,动态迁移需要一些条件
1. 该虚拟机使用共享存储,在两台主机上的位置一样 比如 A,B都讲C的 /opt/vms 挂载到了自己的/opt/vms中,A,B对nfs可读可写,虚拟机在共享存储中
2. 目标主机最好与源主机型号一样,或者CPU支持的指令集更多
3. 目标主机CPU,内存充足
4. 能通过root用户ssh连接到目的主机上
5. hostname和ip解析一致, 迁移是通过hostname的,修改/etc/hosts,可以ping通对方的Hostname
下面来迁移试试,假设上述条件都满足, nfs已经挂载,如果nfs不会请google如何建立nfs
1). 使用virt-manager来迁移
简单来说 File – Add Connect -- 填写对方的ip,用户名,密码, 然后右击虚拟机,Migrate
注. 由于原来的22没有建在共享存储上,新建了一个29的虚拟机来完成迁移的,切记 hostname要和ip对应, 虚拟机存储是共享存储
2). 通过命令来动态迁移
#virshmigratecentos63-119.27--liveqemu+ssh://192.168.119.11:9741/system –unsafe
说明:
centos63-119.27迁移的实例名称
--live 动态迁移
qemu+ssh ssh的方式
--unsafe 强制迁移,即使可能出现问题
先写到这里吧,一些基本的用得到的都写了一下, 感谢您有耐心看到这里, 写个博客确实不容易,livewriter写的文章,传到博客上格式全变了,囧,凑合看吧, 亲随手给个赞, 希望能帮的到您, 有问题可以给我留言或者发邮件给我 ibuler@,
补充:
#vim/etc/qemu-ifup.sh#设置一下网络,为了使用httpks#!/bin/bash#switch=br1if[-n$1];theniplinkset$1upbrctladdif${switch}$1exit0elseecho"Nointerface"exit1fi#chmod+x/etc/qemu-ifup.sh#/usr/libexec/qemu-kvm-m1024\-cdrom/tmp/CentOS-6.3-x86_64-bin-DVD1.iso\-drivefile=/opt/vms/centos63-x86_64-template.img,if=virtio\-netnic,model=virtio-nettap,script=/etc/qemu-ifup.sh\-bootd\-nographic\-vnc:01启动:/usr/libexec/qemu-kvm-m1024\-drivefile=/opt/vms/centos63-x86_64-template.img,if=virtio\-netnic,model=virtio-nettap,script=no\-netnic,model=virtio-nettap,script=no\-nographic-vnc:02