一、虚拟化介绍
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
1)、虚拟化模型
处于底层是整个物理系统,也就是我们可以看的见,摸得着的系统硬件,主要包括:处理器、内存、输入输出设备。
在物理系统之上,与以往熟悉的操作系统模型不同,运行的是虚拟机监控器(缩写为VMM或Hypervisor)。虚拟机监控器的主要职能是:管理真实的物理硬件平台,并为每个虚拟客户机提供对应的虚拟硬件平台。
在虚拟机监控器之上就是虚拟机实例了,每个虚拟机看起来就像是一个小的但是完整的计算机系统,具有自己的“系统硬件”,包括自己的处理器、内存和输入输出设备。在这个计算机系统上,运行着虚拟机自己的操作系统,例如Linux和Windows。
模型如下:
虚拟机实例1 虚拟机实例2 虚拟机实例3
虚拟机监视器(VMM)
硬件系统
2)、虚拟化分类
从虚拟平台角度划分,主要有全虚拟化和类(半)虚拟化。
(1)、全虚拟化是指VMM虚拟出来的平台是现实中存在的平台,因此对于客户机来说,并不知道自己是运行在虚拟的平台上。正因如此,全虚拟化中的客户机操作系统是不需要做任何修改的。
(2)、类(半)虚拟化是指通过对客户机进行源码级的修改,让客户机可以使用虚拟化的资源。由于需要修改客户机内核,因此类虚拟化一般都会被顺便用来优化I/O,客户机的操作系统通过高度优化的I/O协议,可以和VMM紧密结合达到近似于物理机的速度。
这里两者的区别:半虚拟化是需要更改系统内核才得以实现虚拟化,而完全虚拟化是不需要修改内核。
Xen虚拟机有两种运行方式:完全虚拟化(full virtualization)和半虚拟化(para virtualization)。完全虚拟化提供底层物理系统的全部抽象化,且创建一个新的虚拟系统,客户机操作系统可以在里面运行。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)。半虚拟化需要对运行在虚拟机上的客户机操作系统进行修改(这些客户机操作系统会意识到它们运行在虚拟环境里)并提供相近的性能,但半虚拟化的性能要比完全虚拟化更优越。(KVM、vmware属于全虚拟化;Xen属于版虚拟化)
从实现结构来看,主要分为Hypervisor型虚拟,宿主模型虚拟,混合模型虚拟:
(1)Hypervisor虚拟是指,硬件资源之上没有操作系统,而是直接由VMM作为Hypervisor接管,Hypervisor负责管理所有资源和虚拟环境支持。这种结构的主要问题是,硬件设备多种多样,VMM不可能把每种设备的驱动都一一实现,所以此模型支持有限的设备。目前主要的产品是VMware EX Server,是当前最高端和成熟的虚拟化产品。
(2)宿主模型,是在硬件资源之上有个普通的操作系统,负责管理硬件设备,然后VMM作为一个应用搭建在宿主OS上负责虚拟环境的支持,在VMM之上再加载客户机。此方式由底层操作系统对设备进行管理,因此VMM完全不用操心实现设备驱动。而它的主要缺点VMM对硬件资源的调用依赖宿主机,因此效率和功能受宿主机影响较大。目前主要产品是VMware Server,Virtual PC/Server。
(3)混合模型,是综合了以上两种实现模型的虚拟化技术。首先VMM直接管理硬件,但是它会让出一部分对设备的控制权,交给运行在特权虚拟机中的特权操作系统来管理(称之为Domain 0)。VMM和Domain 0合作搭建起虚拟环境,在其上运行客户虚拟机(Domain N)。这个模型还是具有一些缺点,由于在需要特权操作系统提供服务时,就会出现上下文切换,这部分的开销会造成性能的下降。Xen。
从虚拟化支持的层次划分,主要分为软件辅助的虚拟化和硬件支持的虚拟化:
软件辅助的虚拟化是指通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化处理。主要使用的技术是优先级压缩和二进制代码翻译。
a)、优先级压缩是指让客户机运行在Ring 1级别,由于处于非特权级别,所以客户机的指令基本上都会触发异常,然后宿主机进行接管。
b)、但是有些指令并不能触发异常,因此就需要二进制代码翻译技术来对客户机中无法触发异常的指令进行转换,使之无法逃出宿主机的控制。
通过软件级的全虚拟化,可以让一台x86的物理机运行64位操作系统。更有胜者,通过IA64机型模拟古老的Mainframe虚拟机,从而把Mainframe机器的系统迁移至新机型中。
硬件辅助的虚拟化主要是由于在技术层面上用软件手段达到全虚拟化非常麻烦,而且效率较低,才由Intel等处理器厂商直接在芯片上提供了对虚拟化的支持。硬件直接可以对敏感指令进行虚拟化执行。比如Intel的VT-x技术。
3)、Linux下的虚拟化软件
Linux下开源的虚拟化软件主要有KVM、Xen、OpenVZ、VirtualBox和Lguest,而主要是KVM和Xen使用的最广泛。
(1)、KVM
KVM全称Kernel Virtual Machine,是针对包含虚拟化扩展(Intel VT 或 AMD-V)的X86硬件上的完全原生的虚拟化解决方案。 是以色列Qumranet开发,基于Linux内核,2008年9月4日RedHat公司收购KVM。 RHEL5/CentOS5默认是Xen,RHEL6/CentOS6版本默认是KVM。
KVM的架构
(a)、KVM驱动:作为Linux内核的一个模块,其主要负责虚拟机的创建,虚拟机的分配,VCPU寄存器的读写已经VCPU的运行
(b)、Qemu:用于模拟虚拟机用户空间组件,提供I/O设备模型,访问外设的途径
(c)、Libvirt,virsh:由于Qemu工具效率不高,RedHat为KVM开发了辅助工具,比如:libvirt、libguestfs等。Libvirt是一套提供了多种语言接口的API,为各种虚拟化工具提供一套方便、可靠的编程接口,而且支持Xen,使用libvirt,只需要通过libvirt提供的函数连接到KVM或者Xen宿主机,便可以用同样的命令控制不同的虚拟机。
Libvirt不仅提供了API,还自带一套基于文本的管理虚拟机的命令virsh,可通过使用virsh命令来使用libvirt的全部功能
(d)、virt-manager是一套用python编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机,利用libvirt的API实现的。
(2)、Xen
Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。
Xen可以支持全虚拟化和半虚拟化
KVM和Xen比较
(1)不管CPU是否支持虚拟化,Xen都可以安装,而KVM必须要有CPU支持虚拟化才可以
(2)Xen支持半虚拟化也支持全虚拟化,KVM仅支持全虚拟化
(3)安装Xen后,Xen会替代原来的内核接管系统管理,而KVM仅仅是系统的 内核的一个模块,依然又系统原有的内核管理系统
(4)KVM是后起之秀,历史没有Xen早,但是KVM得到广大Linux内核开发者喜爱,因为KVM不需要
(5)Xen被Ctrix收购,有商业版本Xen Server,KVM被RedHat收购,会得到RedHa的大力支持,已经作为ReaHat系统的默认虚拟化工具
(6)在Xen的体系结构中Xen Hypervisor运行在硬件之上,并且将系统资源进行了虚拟化,将虚拟化的资源分配在上层的虚拟机(VM),然后通过虚拟机来运行相应的客户机操作系统。
二、KVM的安装和使用管理
由于KVM的安装需要处理支持虚拟化,就目前的硬件来说,肯定是支持的,需要在主板的BIOS上把虚拟化的支持选项打开。可以使用如下命令检查是否已经打开支持虚拟化了。
操作系统平台:CentOS 6.7
KVM虚拟机安装方式:文本命令行模式
1)、检查系统是否已经支持虚拟化,其中intel cpu支持会有vmx,amd cpu支持会有svm
# grep --color -E ‘vmx|svm‘ /proc/cpuinfo 或者
# cat /proc/cpuinfo |egrep --color ‘vmx|svm‘
2)、关闭SELinux
# vim /etc/selinux/config
把 SELINUX=enforcing 修改为:SELINUX=disabled
或者,懒人模式:
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config
临时关闭:setenforce 0,永久关闭修改修改配置文件后重启系统。
3)、关闭iptables
# iptables -F
# /etc/init.d/iptables save
# /etc/init.d/iptables stop
4)、使用yum安装KVM虚拟化软件包
# yum install kvm virt-* libvirt bridge-utils qemu-img
说明:
kvm:软件包中含有KVM内核模块,它在默认linux内核中提供kvm管理程序
libvirts:安装虚拟机管理工具,使用virsh等命令来管理和控制虚拟机。
bridge-utils:设置网络网卡桥接。
virt-*:创建、克隆虚拟机命令,以及图形化管理工具virt-manager
qemu-img:安装qemu组件,使用qemu命令来创建磁盘等。
5)、安装完成,检查是否已经加载kvm模块
# lsmod |grep kvm
6)、配置KVM虚拟网桥(虚拟机网络设置)
KVM内部 虚拟机使用的是桥接的方式,配置如下:
# cd /etc/sysconfig/network-scripts/ #进入网卡配置目录
# cp ifcfg-eth0 ifcfg-br0 #拷贝网卡配置文件
分别修改ifcfg-eth0和ifcfg-br0
# vim ifcfg-eth0 #编辑物理机的配置文件
DEVICE=eth0
HWADDR=00:0C:29:41:DA:81
TYPE=Ethernet
UUID=21501ff5-e313-494c-a402-50f2a84f1f5c
ONBOOT=yes
NM_CONTROLLED=yes
#BOOTPROTO=static #注释或者修改为none
#IPADDR=192.168.17.14 #注释或者删除
#NETMASK=255.255.255.0 #注释或者删除
#GATEWAY=192.168.17.1 #注释或者删除
BRIDGE=br0 #增加
修改ifcfg-br0配置
# vim ifcfg-br0 #编辑共享桥接的网卡配置文件
DEVICE=br0 #修改为br0
#HWADDR=00:0C:29:A6:5D:37 #注释
TYPE=Bridge #由Ethernet修改为Bridge
#UUID=65704412-9944-4797-b1c9-eea55c8af6b3 #注释
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.17.100
NETMASK=255.255.255.0
GATEWAY=192.168.17.1
DNS1=114.114.114.114
然后重启网络服务
# service network restart #重启网络服务
重启网卡服务后,可以使用ifconfig命令查看,已经有了一块网卡。
启动libvirtd服务和messagebus服务,可以查看到网络接口列表
# /etc/init.d/libvirtd start #启动 libvirtd 守护进程
# /etc/init.d/messagebus start #启动系统消息总线
# brctl show #可以查看网络接口列表
7)、创建和安装虚拟机实例
安装虚拟机有以下几种方法,一种是将镜像文件拷贝一份放到宿主机(物理机)的一个目录上,虚拟机直接访问安装;一种是配置nfs文件系统安装;一种是http的方式安装。这个安装的介质是在创建虚拟机的时候设定的。
安装的虚拟机需要有一个比较大的分区,这里创建一个vmdata目录存放虚拟机磁盘文件。
# mkdir vmdata #存放虚拟机磁盘文件的目录
创建虚拟机的命令是virt-install,创建一台名叫 vmbalich01 的虚拟机。格式如下:
# virt-install \
> --name vmbalich01 \ ## -name 指定虚拟机的域名
> --ram 512 \ ## -ram 指定内存分配多少
> --disk path=/vmdata/vmbalich01.img,size=15 \ ##--disk path 指定虚拟磁盘存放目;size 大小,单位G。
> --vcpus 1 \ ##--vcpus 指定分配cpu几个
> --os-type linux \ ##--os-type 指定系统类型为linux
> --os-variant rhel6 \ ##--os-variant 指定系统版本
> --network bridge=br0 \ ##-network 指定网络类型
> --graphics none \ ##--graphics 指定安装通过哪种类型
> --accelerate \ ##加速
> --console pty,target_type=serial \ ## --console 指定控制台类型
> --cdrom=/mnt/CentOS-6.7-x86_64-bin-DVD1.iso ##安装介质及路径
> --extra-args ‘console=ttyS0,115200n8 serial‘ ##设定内核参数
说明:
--name #指定虚拟机的域名
--ram #指定虚拟机的内存大小
--disk path #指定虚拟机的磁盘路径,磁盘的格式有raw,这个不支持做快照;另外有qcow2,这个可以做快照,使用之前需要先创建。
--vcpus #指定分配几个CPU
--os-type #指定操作系统的类型
--os-variant #操作系统版本
--network #网络的类型
--graphics #是否启用图像,图像可以指定vnc
--accelerate #启用加速
--console #控制台类型
--location #指定安装介质和路径,如果是本地的iso镜像可以之间使用cdrom指定。
#--location ‘http://mirrors.sohu.com/centos/6.7/os/x86_64/‘ 这个是在线的资源安装
--cdrom #使用光盘镜像安装,如果有本地的资源,如果没有使用--location,可以使用在线的资源或者本地的nfs,需要配置网络联网
--extra-args #设定内核参数
另外,如果是使用qcow2的磁盘格式安装,需要首先创建,创建磁盘的命令是qemu-img create,操作如下:
/vmdata目录下创建一个大小为15G,名字为vmbalich02.img 的qcow2格式的磁盘,操作如下:
# qemu-img create -f qcow2 -o preallocation=metadata /vmdata/vmbalich02.qcow2 15G
在创建虚拟机的时候,定义磁盘的配置操作如下:
--disk path=/vmdata/vmbalich02.qcow2,size=15,bus=virtio ##使用的是qcow2格式,总线为virtio
在指定安装介质的时候,如果是NFS或者http,ftp,这是需要虚拟机可以连接网络的(外网)。
检查上述的配置,如果没有错误就可以按下回车(Enter)开始安装了。整个过程和实际物理机上安装是一样的。
8)、KVM虚拟机的常用操作
a)、在母机上查看已经在运行的虚拟机 ,可以看到状态
# virsh list
# virsh list --all #加上参数all后可以查看到所有的虚拟机,包括没有运行的
b)、宿主机登录到虚拟机和退出虚拟机的方法
# virsh console 虚拟机域名
如:
# virsh console vmbalich01
连接到域 vmbalich01
Escape character is ^]
如果要从当前的虚拟机上的终端退出来,就需要按住Ctrl+] 就可以退出。
c)、关闭虚拟机
virsh shutdown 虚拟机域名 或者
virsh destroy 虚拟机域名(相当于断开电源)
virsh shutdown 虚拟机域名 实际上还没有关闭虚拟机,如果想在母机上操控虚拟机,需要在虚拟机上安装一个软件acpid。
#yum install acpid ##在虚拟机上安装
# /etc/init.d/acpid start #启动服务
# chkconfig pacpid on #开机启动
d)、开启指定的虚拟机,并进入控制台
virsh start 虚拟机域名--console
如:virsh start vmbalich01 --console
e)、虚拟机随宿主机(物理机)开机就启动
virsh autostart 虚拟机域名
取消开机启动是:
virsh disable 虚拟机域名
f)、挂起虚拟机
virsh suspend 虚拟机域名
g)、恢复挂起的虚拟机
virsh resume 虚拟机域名
f)、删除虚拟机
、virsh destroy 虚拟机域名
、virsh undefine 虚拟机域名
、rm –f 虚拟机的文件路径,如:rm -f /vmdata/vm1.img
如果是把磁盘文件都删除了,虚拟机就彻底删除了,无法恢复了。
9)、KVM的克隆
在部署大量的虚拟机的时候,我们不可以都是一台一台的安装,首先是安装好一台模版机,然后就是从这台模版机上克隆即可。
kvm的克隆,就是对磁盘拷贝一份,和重新定义配置文件,克隆需要虚拟机是关机的状态,否则会报错。
克隆的命令是 virt-clone
克隆的命令的格式:
virt-clone --original vmbalich02 --name vmbalich03 --file /vmdata/vmbalich03.img
克隆命令 源 克隆的名字 克隆后的机器名字 指定克隆后的机器的文件存放路径
如:
# virt-clone --original vmbalich01 --name vmbalich11 --file /vmdata/vmbalich11.img
# virsh start vmballich11 –console #克隆完整后可以这样启动
10)、KVM的快照管理
KVM创建快照需要qcow2的磁盘格式,如果是raw格式,则需要先转换为qcow2格式才能支持快照。
a)、raw格式转换qcow2格式,操作如下:
raw格式的磁盘转换为qcow2格式的命令:qemu-img convert –f raw –O qcow2 “原磁盘路径”“转换磁盘路径”
修改配置文件,修改磁盘格式需要修改为qcow2格式的那个磁盘。
实例操作如下:
转换格式:
# qemu-img convert -f raw -O qcow2 /vmdata/vmbalich01.img /vmdata/vmbalich01.qcow2
修改配置文件:
# virsh edit vmbalich01
找到:
<driver name=‘qemu‘ type=‘raw‘ cache=‘none‘/>
<source file=‘/vmdata/vmbalich01.img‘/>
更改为:
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/vmdata/vmbalich01.qcow2‘/>
保存配置文件
需要操作重新定义:
# virsh define /etc/libvirt/qemu/vmbalich01.xml
b)、创建快照,快照的命令是: virsh snapshot-create 虚拟机域名
如:
# virsh snapshot-create vmbalich01
Domain snapshot 1445701440 created
c)、查看快照
virsh snapshot-list 虚拟机域名
virsh snapshot-info 虚拟机域名
d)、快照的恢复,snapshot-revert 虚拟机域名 快照名称(数字)
使用virsh snapshot-current 虚拟机域名 查看的当前快照的配置信息,其实就是当前的xml的配置文件内容。
恢复快照需要查看快照列表,恢复对应的名称(一串数字)
如:
# virsh snapshot-list vmbalich01
名称 Creation Time 状态
------------------------------------------------------------
1445701440 2015-10-24 23:44:00 +0800 shutoff
1445705642 2015-10-25 00:54:02 +0800 running
恢复,2015-10-24
# virsh snapshot-revert vmbalich01 1445701440
这些快照对应的是在/var/lib/libvirt/qemu/snapshot/虚拟机域名(目录)下的xml文件
e)、快照的删除,virsh snapshot-delete 虚拟机域名 快照名(数字)
如:# virsh snapshot-delete vmbalich01 1445701440
Domain snapshot 1445701440 deleted
11)、KVM虚拟磁盘的扩容
KVM虚拟磁盘的扩容有两种方式,一是在原有磁盘增加空间,一是增加磁盘。
由于磁盘格式有raw和qcow2,其实两种磁盘的扩容方式基本是相同的。
a)、扩大磁盘大小
raw磁盘格式扩容(步骤):
(1)、查看磁盘空间大小
# qemu-img info /vmdata/vmbalich02.img
(2)、增加磁盘空间,比如增加5G
# qemu-img resize /vmdata/vmbalich02.img +5G
(3)、进入虚拟机,查看磁盘大小,
# virsh start vmbalich02 –console
# fdisk -l
(4)、磁盘空间已增加,但是并未使用,需要分区,然后使用逻辑卷扩展(假如磁盘是/dev/vda)
# fdisk /dev/vda
使用fdisk 将未分区的磁盘分区,过程不演示(分区的磁盘为/dev/vda3)。
(5)、使用lvm(逻辑卷扩展)(基本步骤)
# pvcreate /dev/vda3 ##创建物理卷
# pvs ##查看物理卷信息
# vgextend VolGroup /dev/vda3 ##将一个物理卷加入到VolGroup组
# lvs ##查看逻辑卷信息
# lvextend -l +100%FREE /dev/VolGroup/lv_root ##扩展lv
# resize2fs /dev/VolGroup/lv_root #扩展整个lv_root
逻辑卷的扩展思路是先物理卷,然后才扩展逻辑卷。即可完成磁盘的扩容
qcow2格式扩容方法是和刚刚raw格式的扩容方法一样。
qcow2格式在做了快照之后,发现不能扩容,如要需要增加磁盘空间,只能增加磁盘。
# qemu-img info /vmdata/vmbalich01.qcow2
image: /vmdata/vmbalich01.qcow2
file format: qcow2
virtual size: 15G (16106127360 bytes)
disk size: 2.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
2 1445705642 347M 2015-10-25 00:54:03 00:21:22.576
3 1445706822 347M 2015-10-25 01:13:42 00:28:39.994
# qemu-img resize /vmdata/vmbalich01.qcow2 +5G
This image format does not support resize
b)、增加磁盘
增加磁盘的方法,首先也是需要对磁盘进行分区,然后修改xml的配置文件,将增加的磁盘添加进去;然后进入虚拟机分区、格式化、加入逻辑卷。
增加raw格式和qcow2格式的磁盘的方法一样。
(1)、在宿主机(物理机上)为虚拟机创建磁盘文件
# qemu-img create -f raw /vmdata/vmbalich01_add00.img 5G #raw格式的磁盘
# qemu-img create -f qcow2 /vmdata/vmbalich01_add00.qcow2 5G #qcow2格式磁盘
(2)、修改xml配置文件,增加磁盘配置信息
# virsh edit vmbalich01
找到(下面是qcow2格式的,如果是raw格式也是一样,依据实际情况处理),
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/vmdata/vmbalich01.qcow2‘/>
<target dev=‘vda‘ bus=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/>
</disk>
复制,在后面增加(主要是修改磁盘格式,路径、类型):
<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/vmdata/vmbalich01_add00.qcow2‘/> ##修改增加磁盘的路径
<target dev=‘vdb‘ bus=‘virtio‘/>
<!--<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/>--> ##注释或者删除
</disk>
保存配置文件,退出。
(3)、进入虚拟机,查看磁盘大小,
# virsh start vmbalich01 –console
# fdisk -l
(4)、磁盘空间已增加,但是并未使用,需要分区,然后使用逻辑卷扩展(假如磁盘是/dev/vdb)
# fdisk /dev/vdb
使用fdisk 将未分区的磁盘分区,过程不演示(分区的磁盘为/dev/vdb1)。
(5)、使用lvm(逻辑卷扩展)(基本步骤)
# pvcreate /dev/vdb1 ##创建物理卷
# pvs ##查看物理卷信息
# vgextend VolGroup /dev/vdb1 ##将一个物理卷加入到VolGroup组
# lvs ##查看逻辑卷信息
# lvextend -l +100%FREE /dev/VolGroup/lv_root ##扩展lv
# resize2fs /dev/VolGroup/lv_root #扩展整个lv_root
两种方法扩展磁盘空间,基本的步骤都一样,所不同的是增加磁盘需要修改配置文件。
12)、KVM虚拟机的恢复
这里所说的恢复,是指使用kvm的虚拟机使用了virsh undefined 虚拟机域名,删除了一台虚拟机,而虚拟机的磁盘文件还在,其实我们是通过重新编辑配置文件再次使用这台虚拟机的,虚拟机的配置文件是存放在/etc/libvirt/qemu/ 对应到虚拟机域名目录下的xml文件
在新的配置文件中,需要修改的地方有:
<name>vmbalich01</name> ##需修改,不能和现在属主机机上的虚拟机相同
<uuid>e0c7defa-fb88-0fdc-2ff4-f335c256cc64</uuid> ##需修改,不能和现在母机上的虚拟机相同,或者删除
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/> #如果磁盘格式一样,就不需要修改,反之
<source file=‘/vmdata/vmbalich01.qcow2‘/> ##虚拟机的存放路径
<mac address=‘52:54:00:15:d7:f9‘/> ##需修改,不能和现在母机上的虚拟机相同,或者删除
假如新的配置文件是/etc/libvirt/qemu/vmbalich11.xml
# virsh define /etc/libvirt/qemu/vmbalich11.xml
然后就可以启动虚拟机了:
# virsh start vmbalich11 –console
虚拟机的登录后,需要重新调整里面的网卡配置。
13)、KVM虚拟机的CPU、内存、网卡调整
KVM调整CPU、内存主要是修改xml的配置文件的参数,这需要虚拟机处于关机的状态
如:虚拟机vmbalich01,编辑virsh edit vmbalich01 在对应的选项编辑。
CPU:
<vcpu placement=‘static‘>1</vcpu>
这里调整CPU的数量
内存:
<memory unit=‘KiB‘>524288</memory> ##调整最大内存
<currentMemory unit=‘KiB‘>524288</currentMemory> ##当前内存,不能超过最大内存
网卡:
复制如下:
<interface type=‘bridge‘>
<mac address=‘52:54:00:15:d7:f9‘/> #修改,或者删除
<source bridge=‘br0‘/>
<model type=‘virtio‘/>
<address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/> #修改slot,或者删除。
</interface>
直接在这一块上增加,上面的内容,把mac address 和slot修改下,或者删除。
保存配置文件,重新启动。
另外,可以在线增加网卡:
# virsh domiflist vmbalich01 #查看vmbalich01子机的网卡列表
# virsh attach-interface vmbalich01 --type bridge --source br0 #命令行增加一块网卡
# virsh dumpxml vmbalich01 > /etc/libvirsh/qemu/vmbalich01.xml #命令行增加的网卡只保存在内存中,重启就失效,所以需要保存到配置文件中,其中/etc/libvirsh/qemu/vmbalich01.xml 为vmbalich01子机的配置文件
# virsh console vmbalich01 #进入虚拟机后,执行
# ifconfig -a
发现多了一个网卡 eth1 ,然后配置网卡。
14)、KVM虚拟机的迁移
KVM虚拟机的迁移有静态迁移和动态迁移;静态迁移是指虚拟机在关机的状态下把虚拟机磁盘文件和配置文件迁移到另一台属主机上;动态迁移是指虚拟机在不停机,保证业务正常运行的情况下迁移到另一台属主机上。
a)、静态迁移
静态迁移其实就是将虚拟机的磁盘文件和配置文件拷贝一份到另一台属主机上,然后重新定义(define),在启动虚拟机。
(1)、需要迁移的虚拟机要处于关机状态
# virsh list –all
(2)、需要迁移的虚拟机,确定磁盘的存放路径,如vmbalich01
# virsh domblklist vmbalich01
(3)、导出需要迁移的虚拟机的配置文件,如vmbalich01
# virsh dumpxml vmbalich01 > /root/vmbalich01.xml
(4)、将需要迁移的虚拟机的配置文件和磁盘文件拷贝到另一台属主机上,如192.168.17.10
# scp /vmdata/vmbalich01.qcow2 192.168.17.10:/vmdata/
# scp /root/vmbalich01.xml 192.168.17.10:/etc/libvirt/qemu
(5)、在192.168.17.10上,确定传输的文件是否有效,然后定义(define),启动虚拟机
# virsh define /etc/libvirt/qemu/vmbalich01.xml
# virsh start vmbalich01
至此,静态迁移KVM虚拟机就完成了。
b)、动态迁移
动态迁移就是在保证虚拟机不停止服务的情况把虚拟机从一台物理机转移到另一台物理机上,需要有共享存储。
参考:
http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/