KVM虚拟机使用文档 v1.1xx


KVM虚拟机使用文档 v1.1 1.KVM技术介绍 1.1 KVM与虚拟化 1.2 KVM与XEN的异同 1.3 Qemu-kvm、libvirt、virt-install介绍 2.KVM虚拟机的安装 2.1 KVM宿主机的准备 2.2 KVM虚拟机的安装 2.3 我们采用的安装原理 2.4 特殊情况:安装Kvm下的windows虚拟机 3.KVM虚拟机的管理 3.1 用virsh管理 3.2 VNC远程管理 3.3 常见问题解答 4.高级 4.1 淘宝环境自动化安装linux系统的KVM虚拟机 4.2 静态迁移(离线迁移)和动态迁移(在线迁移) 1.KVM技术介绍 1.1 虚拟化与 KVM 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以逻辑上 扩大硬件的容量,简化软件(这个是什么软件,有点模糊。)的重新配置过程。CPU 的虚拟化 技术可以单 CPU 模拟多 CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以 在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 KVM是kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相 对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM(Virtual Machine Monitor虚拟 机监视器)之一。 1.2 KVM与Xen的异同 KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD VT技术)。是基于硬件的完全虚拟化。 Xen早期是基于软件模拟的Para-Virtualization(参考①),新版本则是基于硬件支持的完 全虚拟化。但Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的 商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。 KVM在与Linux整合后(原来写的是中)优于Xen:QEMU-KVM/Libvirt内核虚拟机 KVM 技术的原 创公司 Qumranet 在 2008 年被 RedHat 收购以后,得到了全面快速的发展。在 2009 年发布 的 Redhat Enterprise Linux 5.4 全面支持了 KVM 虚拟机,其中已经包含了离线迁移和在线 迁移的技术。 KVM是Linux内核的一部分,而Xen做到最好也无非是整合到Linux中,无法摆脱进程调度等方面 的开销,使I/O调度性能下降。 1.3 Qemu-kvm、libvirt、virt-install 介绍 qemu-kvm:kvm 系统的前端是 qemu-kvm,工作在用户空间,给用户提供一套方便的 kvm 虚拟化工 具集合,目前我们在用的版本是 qemu-kvm-0.12.1.2-2.160.el6.x86_64。 libvirt:提供了一个稳定统一的管理工具,确保安全的管理节点上的域(域:虚拟机,域可能 是远程的) virt-install:virt-install是一个利用”libvirt”管理库来创建KVM或Xen虚拟机的命令行工 具。 2.KVM虚拟机的安装 2.1 KVM宿主机的准备 2.1.1 确定虚拟机支持VT,并打开 物理机CPU是INTEL芯片,在系统中执行命令 #grep vmx /proc/cpuinfo 物理机CPU是AMD芯片,在系统中执行命令 #grep svm /proc/cpuinfo 不知道芯片的生产厂商则输入: #egrep '(vmx|svm)' /proc/cpuinfo 如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无 法成功安装KVM虚拟机。 确保BIOS里开启VT: Intel(R) Virtualization Tech [Enabled] 如有必要,还需在BIOS中开启VT-d DELL 1950 bios设置界面 2.1.2准备宿主机 选择模板:kvm_server 6u2 64bit 安装宿主机 安装此模板会自动进行的一些操作有: A 安装相关包: qemu-kvm.x86_64: Userspace component of KVM libvirt.x86_64: Library providing a simple virtualization API virt-what.x86_64 : Detect if we are running in a virtual machine libvirt-client.x86_64 : Client side library and utilities of the libvirt library libvirt-python.x86_64 : Python bindings for the libvirt library python-virtinst.noarch : Python modules and utilities for installing virtual machines B 启动服务: #/sbin/service libvirtd start C 做桥接网络: 做端口bridge0桥接到bond0端口上(如果没有做bond则桥接到eth0) D 做卷组: # pvcreate /dev/sda6;vgcreate -s 256 vm /dev/sda6;vgchange -ay vm; vgchange -ay vm 查看卷组 # pvdisplay --- Physical volume --- PV Name /dev/sda6 VG Name vg_vmms PV Size 124.23 GiB / not usable 13.00 MiB Allocatable yes PE Size 32.00 MiB Total PE 3975 Free PE 2375 Allocated PE 1600 PV UUID TeJ2wM-8R5Q-3lYI-YUtl-qwEx-ZCPf-3bW0zI 2.2 KVM虚拟机的安装 2.2.1在卷组上做逻辑卷(50G,label1) #lvcreate -L 50G vg_vmms -n 1 查看逻辑卷 # lvscan ACTIVE '/dev/vg_vmms/1' [50.00 GiB] inherit 2.2.2常用安装方法介绍 A.virt-install安装 我们要使用的安装方式,较为简单,要依赖以上安装的所有包。 virt-install调用qemu-kvm安装虚拟机,用起来更简单、友好,只要一个命令就可以生成一个 KVM虚拟机并保存配置到xml文件里,方便以后的管理。 使用方法(详细使用说明参考help文档): Usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options] B.qemu、libvirt方式安装 安装较为复杂,每次要从xml文件启动,详细安装方法参见help文档。 2.3 我们采用的安装原理 用virt-install命令通过PXE方式启动KVM虚拟机进行系统安装(目前淘宝环境只能以这种方式 安装linux,后续cloneII可能会将windows引入): 优点:可以直接并入淘宝现行的broom安装体系,系统安装过程和物理机基本相同 缺点:安装过程变复杂,要牵涉到DHCP、TFTP、HTTP等服务并且需要提前在opsfree中录入虚拟 机信息(主机名、IP地址、物理地址) PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网 络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动 过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol) 或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中 并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作 系统。PXE可以引导多种操作系统,如:Windows95/98/2000,linux等。 其实我们可以把KVM虚拟机想象成和物理机相同,启动后和一般物理机一样,也会进入PXE 在宿主机上执行如下命令即可创建一个虚拟机并使之在无系统情况下进入PXE引导安装: #virt-install -v --name v135054_sqa_cm4 --mac=00:1A:B9:E9:2B:78 --vcpus=2 --ram 2048 --disk path=/dev/vg_vmms/1 --os-variant=rhel5 --vncport=5901 --vnc --vnclisten=0.0.0.0 --autostart --network bridge=bridge0,model=virtio --pxe –force 字段解释: --os-variant=rhel5:安装操作系统的版本信息 --vncport=5901:用VNC远程连接查看的端口号 --network bridge=bridge0,model=virtio:桥接网络到bridge0上,虚拟机网卡模拟virtio型 号 --pxe:虚拟机在磁盘无系统时从pxe启动 2.4 特殊情况:安装Kvm下的windows虚拟机 挂载iso或将iso下载到本地 virt-install -v --name v135151.sqa.cm4 --vcpu 8 --ram 7000 --disk path=/dev/vg_vmms/1 --network bridge=bridge0,model=rtl8139 --autostart --vncport=6051 --vnc --vnclisten=0.0.0.0 --cdrom=/mnt/tmp/WindowsXpSp3_CN.iso 字段解释: --network bridge=bridge0,model=rtl8139:桥接网络到bridge0上,虚拟机网卡模拟rtl8139 型号(目前安装windows可以自动安装此网卡驱动,但是rtl8139网卡性能比virtio要差) --cdrom=/mnt/tmp/WindowsXpSp3_CN.iso:指定windows操作系统路径 3.KVM虚拟机的管理 3.1 用virsh管理 # virsh Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit 查看虚拟机状态: virsh # list Id Name State -------------------------------------------------- 5 v135054.sqa.cm4 running virsh # help shutdown NAME shutdown - gracefully shutdown a domain SYNOPSIS shutdown DESCRIPTION Run shutdown in the target domain. OPTIONS [--domain] domain name, id or uuid virsh # shutdown ubuntu 粗暴的关机(相当于拔电源): virsh # help destroy NAME destroy - destroy a domain SYNOPSIS destroy DESCRIPTION Destroy a given domain. OPTIONS [--domain] domain name, id or uuid 关闭后的虚拟机列表这样查看: virsh # help list NAME list - list domains SYNOPSIS list [--inactive] [--all] DESCRIPTION Returns list of domains. OPTIONS --inactive list inactive domains --all list inactive & active domains virsh # list --all Id Name State ------------------------------------------ - v135054.sqa.cm4 shut off 启动一个虚拟机: virsh # help start NAME start - start a (previously defined) inactive domain SYNOPSIS start [--console] DESCRIPTION Start a domain. OPTIONS [--domain] name of the inactive domain --console attach to console after creation 3.2 VNC远程访问 查看虚拟机的vnc端口号 # virsh dumpxml v135054.sqa.cm4|grep vnc 用VNC client软件连接 vmparent ipaddr:5954 可以查看到此台虚拟机的屏幕输出 3.3 常见问题解答 A. 查看虚拟机进程 #ps aux|grep kvm #ps aux|grep v135054.sqa.cm4 B. 查看kvm虚拟机打开的端口 #lsof|grep kvm #lsof|grep v135054.sqa.cm4 可以通过查看虚拟机的进程进而查看此进程打开的端口 C. 恢复虚拟机数据 当虚拟机因为某些原因无法启动的时候,可以用以下方法挂载逻辑卷来将虚拟机磁盘里的 数据导出。 虚拟机上的分区: [root@v135054.sqa.cm4 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda2 3.8G 430M 3.2G 12% / /dev/hda9 17G 342M 15G 3% /home /dev/hda8 3.8G 73M 3.6G 2% /tmp /dev/hda7 3.8G 72M 3.6G 2% /opt /dev/hda6 9.5G 1.7G 7.3G 19% /usr /dev/hda5 9.5G 1.1G 8.0G 12% /var /dev/hda1 122M 16M 100M 14% /boot tmpfs 1006M 0 1006M 0% /dev/shm 宿主机上查看虚拟机/home 下内容: [root@dev135088.sqa.cm4 ~]# virsh list Id Name State ---------------------------------- 5 v135054.sqa.cm4 running [root@dev135088.sqa.cm4 ~]# lvscan ACTIVE '/dev/vg_vmms/1' [50.00 GiB] inherit [root@dev135088.sqa.cm4 ~]# kpartx /dev/vg_vmms/1 -a [root@dev135088.sqa.cm4 ~]# ll /dev/mapper/ total 0 crw-rw---- 1 root root 10, 58 Feb 29 19:08 control lrwxrwxrwx 1 root root 7 Feb 29 21:06 vg_vmms-1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p1 -> ../dm-1 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p2 -> ../dm-2 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p3 -> ../dm-3 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p4 -> ../dm-4 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p5 -> ../dm-5 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p6 -> ../dm-6 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p7 -> ../dm-7 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p8 -> ../dm-8 lrwxrwxrwx 1 root root 7 Mar 1 13:49 vg_vmms-1p9 -> ../dm-9 [root@dev135088.sqa.cm4 ~]# mkdir /tmp/test/ [root@dev135088.sqa.cm4 ~]# mkdir /tmp/test/p9 [root@dev135088.sqa.cm4 ~]# mount /dev/mapper/vg_vmms-1p9 /tmp/test/p9 [root@dev135088.sqa.cm4 ~]# cd /tmp/test/p9 [root@dev135088.sqa.cm4 p9]# ls admin fengshen jiansheng lost+found shiqian yiping.wangyip zhongxiang.xw ads geer jinglei.syh luopeng.lp tops yonghao zituan audit guzhong juehai.gy mengfei.pzy wb-liuchao.l yuanqiao baifei hongchuan kangbo mengjue wb-qinfei yunzhong bucui hongmeng lanyi qiudi wb-zhangzhiqiang zhanggong dezhi huanbo liting randeng xinchang.jl zhenglong.zz fanhua hubble logs sailuo yangyi.czh zhiguang.zy 4.高级 4.1 淘宝环境自动化安装linux系统的KVM虚拟机 A.部署好宿主机,在逻辑卷上建好卷组 B.将工具机和宿主机打通ssh C.将虚拟机信息录入opsfree,并在broom中克隆该虚拟机 D.将虚拟机信息整理成文件如下 # cat list.txt v135054.sqa.cm4 10.232.135.54 dev135088.sqa.cm4 /dev/vg_vmms/1 2 2048 rhel5 00:1A:B9:E9:2B:78 E.运行命令 # ./install_kvm.sh list.txt 在宿主机上生成虚拟机并让其自动安装 F.安装完毕后宿主机上显示虚拟机shutdown即可用start命令启动 4.2 静态迁移(离线迁移)和动态迁移(在线迁移)(参考文档② ) A. 静态迁移:也叫做常规迁移、离线迁移(Offline Migration)。就是在虚拟机关机或暂停 的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面, 所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理 主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目 的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚 拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式 简单易行,适用于对服务可用性要求不严格的场合。 B. 基于共享存储的动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在 保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机 的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用 的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中 虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚 拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过 一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。 对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过 程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。 目前主流的动态迁移工具,VMware 的 VMotion,Citrix 的 XenMotion,他们都依赖于物 理机之间采用 SAN(storage area network)或 NAS(network-attached storage)之类的集 中式共享外存设备,因而在迁移时只需要进行虚拟机系统内存执行状态的迁移,从而获得较好 的迁移性能。 C. 本地存储的动态迁移:动态迁移基于共享存储设备,为的是加速迁移的过程,尽量减少宕机 时间。但是在某些情况下需要进行基于本地存储的虚拟机的动态迁移,这就需要存储块动态迁 移技术,简称块迁移。 比如某些服务器没有使用 SAN 存储,而且迁移的频率很小,虚拟机上的服务对迁移时间的要求 不严格,则可以使用存储块动态迁移技术;另一方面,SAN 存储的价格比较高,尽管 SAN 存储 能够提高迁移性能和系统的稳定性,对于中小企业仅仅为了加快迁移速度而配置昂贵的 SAN 存 储,性价比不高。 在集中式共享外部存储的环境下,基于共享存储的动态迁移技术无疑能够工作得很好(更好)。 但是,考虑到目前一些计算机集群并没有采用共享式外存,而是各自独立拥有本地外存的物理 主机构成。基于共享存储的迁移技术在这种场合下受到限制,虚拟机迁移到目的主机后,不能 访问其原有的外存设备,或者需要源主机为其外存访问提供支持。 为了拓宽动态迁移技术的应用范围,有必要实现一个包括虚拟机外存迁移在内的全系统动态迁 移方案。使得在采用分散式本地存储的计算机集群环境下,仍然能够利用迁移技术转移虚拟机 环境,并且保证迁移过程中虚拟机系统服务的可用性。 参考: ①Para-Virtualization:paravirtualization is a virtualization technique that presents a software interface to virtual machines that is similar but not identical to that of the underlying hardware. ②参考链接:http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/
还剩9页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

bobopuer

贡献于2014-03-15

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf