免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 85425 | 回复: 87
打印 上一主题 下一主题

CentOS6下的KVM学习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-23 13:08 |只看该作者 |倒序浏览
本帖最后由 marsaber 于 2012-03-23 14:08 编辑

1 虚拟化
虚拟化 概念很早就已出现。简单来说,虚拟化就是使用某些程序,并使其看起来类似于其他程序的过程。将这个概念应用到计算机系统中可以让不同用户看到不同的单个系统(例如,一台计算机可以同时运行多个Linux和Windows),这通常称为全虚拟化(full virtualization)。
虚拟化也可以使用更加复杂的格式,其中单个计算机看上去具有多个架构(对于一个用户来说,它是一个标准的 x86 平台;对于另外一个用户来说,它是 IBM Power PC® 平台)。这种虚拟化形式通常被称为 硬件仿真。
2 全虚拟化和准虚拟化
虚拟化最常使用的两种方法是全虚拟化 和准虚拟化。
使用全虚拟化,在虚拟化的操作系统和硬件之间存在一个层,用于决定访问,这个层称为系统管理程序 或虚拟机监视器(VMM)。全虚拟化的例子包括商业虚拟化解决方案 VMware以及商业 IBM zSeries® 计算机上使用的 IBM System z9 Virtual Machine(z/VM)操作系统。
准虚拟化与之类似,但是系统管理程序会以一种更具协作性的方式进行操作。这是因为每个客户操作系统都了解自己正在虚拟化模式中运行,因此每个系统都与系统管理程序协作,来实现底层硬件的虚拟化。准虚拟化的例子有 Xen 和 User-Mode-Linux (UML)。
3 KVM简介
KVM是Kernel-based Virtual Machine的简写,是一个开源的系统虚拟化软件,基于硬件虚拟化扩展(Intel VT-X 和 AMD-V)和 QEMU 的修改版,是基于硬件的完全虚拟化。其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。Redhat自RHEL 5.4开始完全支持KVM系统管理程序。
相比xen,KVM的优点是高性能, 稳定, 无需修改客户机系统和大量的其它功能(比如. 可使用linux调度器).
4 KVM工作原理
KVM 所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。这个内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。设备树(/dev)中的设备对于所有用户空间进程来说都是通用的。但是每个打开 /dev/kvm 的进程看到的是不同的映射(为了支持 VM 间的隔离)。
KVM 然后会简单地将 Linux 内核转换成一个系统管理程序(在安装 kvm 内核模块时)。由于标准 Linux 内核就是一个系统管理程序,因此它会从对标准内核的修改中获益良多(内存支持、调度程序等)。对这些 Linux 组件进行优化(例如 2.6 版本内核中的新 O(1) 调度程序)都可以让系统管理程序(主机操作系统)和 Linux 客户操作系统同时受益。但是 KVM 并不是第一个这样做的程序。UML 很久以前就将 Linux 内核转换成一个系统管理程序了。使用内核作为一个系统管理程序,您就可以启动其他操作系统,例如另一个 Linux 内核或 Windows 系统。
安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。 图 2 提供了一个使用 KVM 进行虚拟化的视图。底部是能够进行虚拟化的硬件平台(目前指的是 Intel VT 或 AMD-SVM 处理器)。在裸硬件上运行的是系统管理程序(带有 KVM 模块的 Linux 内核)。这个系统管理程序与可以运行其他应用程序的普通 Linux 内核类似。但是这个内核也可以支持通过 kvm 工具加载的客户操作系统。最后,客户操作系统可以支持主机操作系统所支持的相同应用程序。

图 1. 使用 KVM 的虚拟化组件【见附件】

记住 KVM 只是虚拟化解决方案的一部分。处理器直接提供了虚拟化支持(可以为多个操作系统虚拟化处理器)。内存可以通过 kvm 进行虚拟化(这在下一节中将会讨论)。最后,I/O 通过一个稍加修改的 QEMU 进程(执行每个客户操作系统进程的一个拷贝)进行虚拟化。
KVM 向 Linux 中引入了一种除现有的内核和用户模式之外的新进程模式。这种新模式就称为客户 模式,顾名思义,它用来执行客户操作系统代码(至少是一部分代码)。回想一下内核模式表示代码执行的特权模式,而用户模式则表示非特权模式(用于那些运行 在内核之外的程序)。根据运行内容和目的,执行模式可以针对不同的目的进行定义。客户模式的存在就是为了执行客户操作系统代码,但是只针对那些非 I/O 的代码。在客户模式中有两种标准模式,因此客户操作系统在客户模式中运行可以支持标准的内核,而在用户模式下运行则支持自己的内核和用户 空间应用程序。客户操作系统的用户模式可以用来执行 I/O 操作,这是单独进行管理的。
在客户操作系统上执行 I/O 的功能是由 QEMU 提供的。QEMU 是一个平台虚拟化解决方案,允许对一个完整的 PC 环境进行虚拟化(包括磁盘、图形适配器和网络设备)。客户操作系统所生成的任何 I/O 请求都会被中途截获,并重新发送到 QEMU 进程模拟的用户模式中。
KVM 通过 /dev/kvm 设备提供了内存虚拟化。每个客户操作系统都有自己的地址空间,并且是在实例化客户操作系统时映射的。映射给客户操作系统的物理内存实际上是映射给这个进程 的虚拟内存。为了支持客户物理地址到主机物理地址的转换,系统维护了一组影子页表(shadow page table)。处理器也可以通过在访问未经映射的内存位置时使用系统管理程序(主机内核)来支持内存转换进程。

以上信息摘自:http://www.ibm.com/developerworks/cn/linux/l-linux-kvm/

pdf文档在17楼。

1.JPG (11.04 KB, 下载次数: 277)

图1

图1

评分

参与人数 1可用积分 +12 收起 理由
send_linux + 12 感谢分享:)

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2012-03-23 13:08 |只看该作者
本帖最后由 marsaber 于 2013-07-01 08:18 编辑

5 宿主机环境
5.1 宿主机硬件配置
硬件名称        规格型号
CPU        Intel(R) Core(TM)2 Quad  CPU   Q9300  @ 2.50GHz
内存        Kingston DDR3 1066 4G
主板        华硕P5G41T-M LX3
硬盘        西部数据 1T
网卡        Atheros AR8151 PCI-E Gigabit Ethernet Controller(单)
5.2 宿主机软件环境
操作系统:CentOS Linux release 6.0 (Final) x86_64
内核版本:Kernel-3.0.0
5.3 CPU支持KVM
KVM 需要有 CPU 的支持(Intel VT 或 AMD SVM)
[root@CentOS6 ~]# egrep '(vmx|svm)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority

6 安装KVM
6.1 yum安装
[root@CentOS6 ~]# yum -y groupinstall Virtualization
[root@CentOS6 ~]# yum -y groupinstall “Virtualization Client”
[root@CentOS6 ~]# yum -y groupinstall “Virtualization Platform”
[root@CentOS6 ~]# yum -y groupinstall “Virtualization Tools”

6.2 安装软件列表
Group: Virtualization
Description: Provides an environment for hosting virtualized guests.
Mandatory Packages:
   qemu-kvm
Optional Packages:
   qemu-kvm-tools
   vios-proxy

Group: Virtualization Client
Description: Clients for installing and managing virtualization instances.
Mandatory Packages:
   python-virtinst
   virt-manager
   virt-viewer
Default Packages:
   virt-top

Group: Virtualization Platform
Description: Provides an interface for accessing and controlling virtualized guests and containers.
Mandatory Packages:
   libvirt
   libvirt-client
   virt-who
Optional Packages:
   fence-virtd-libvirt
   fence-virtd-multicast
   fence-virtd-serial
   libvirt-cim
   libvirt-java
   libvirt-qmf
   libvirt-snmp
   perl-Sys-Virt

Group: Virtualization Tools
Description: Tools for offline virtual image management.
Default Packages:
   libguestfs
Optional Packages:
   libguestfs-java
   libguestfs-mount
   libguestfs-tools
   virt-v2v

6.3 检查KVM
安装完成后,重启机器,确认一下是否安装成功、模块是否正常加载:
[root@CentOS6 ~]# lsmod |grep kvm
kvm_intel              54367  0
kvm                   365244  1 kvm_intel
[root@CentOS6 ~]#
[root@CentOS6 ~]# ll /dev/kvm
crw-rw-rw- 1 root kvm 10, 232 Mar 23 13:34 /dev/kvm
[root@CentOS6 ~]#

7 安装虚拟机
这里以瑞传5530(6电口)为例。
7.1创建桥
/etc/rc.local中添加:
# Used for Marsaber’s admin_port and IN_port;
/usr/sbin/brctl addbr br0
/usr/sbin/brctl addif br0 eth0
/sbin/ifconfig br0 192.168.25.60
/sbin/ip route add default via 192.168.25.1 dev br0

# Used for Marsaber’s Protect1 and webserver;
/usr/sbin/brctl addbr br1
/sbin/ifconfig br1 0.0.0.0

# Used for Marsaber’s Protect2 and webserver;
/usr/sbin/brctl addbr br2
/sbin/ifconfig br2 0.0.0.0

7.2安装Windows2003
Windows Server 2003 SP2 x86_64
安装脚本:
#!/bin/bash

/usr/bin/virt-install \
--connect qemu:///system \
--network bridge=br1,model=e1000 \
--name Windows2003_ASP \
--ram=1024 \
--vcpus=4 \
--disk path=/home/VM/Windows2003_ASP.img,bus=ide,size=5 \
--cdrom /home/iso/cn_win_srv_2003_r2_enterprise_x64_with_sp2_vl_cd1_X13-47314.iso \
--vnc --vncport=9409 \
--vnclisten=192.168.25.60 \
--os-variant=win2k3

7.3安装某专业设备系统
#!/bin/bash

/usr/bin/virt-install \
--connect qemu:///system \
--network mac=01:01:01:01:01:01,bridge=br2,model=e1000 \
--network mac=02:02:02:02:02:02,bridge=br0,model=e1000 \
--network mac=03:03:03:03:03:03,bridge=br1,model=e1000 \
--network mac=04:04:04:04:04:04,bridge=br0,model=e1000 \
--network mac=05:05:05:05:05:05,bridge=br0,model=e1000 \
--network mac=06:06:06:06:06:06,bridge=br0,model=e1000 \
--name Marsaber_OSbak \
--ram=2048 \
--vcpus=4 \
--disk path=/home/VM/Marsaber_OSbak.img,bus=ide,size=20 \
--cdrom /home/iso/CentOS-5.6-x86_64-bin-DVD-1of2.iso \
--vnc --vncport=9401 \
--vnclisten=192.168.25.60 \
--os-variant=rhel5.4

7.4 virt-install用法说明
7.4.1 --connect=
xen
If running on a host with the Xen kernel (checks against /proc/xen)
qemu:///system
If running on a bare metal kernel as root (needed for KVM installs)
qemu:///session
If running on a bare metal kernel as non-root
7.4.2 --name=
虚拟机名称
7.4.3 --ram=
虚拟机内存大小
7.4.4 --vcpus=
虚拟机使用的虚拟CPU数
7.4.5 --network
虚拟机网络接口类型
附带两个事例:
--network mac=01:01:01:01:01:01,network=default,model=e1000 \
--network mac=02:02:02:02:02:02,bridge=br0,model=e1000 \
7.4.6 --disk
虚拟机镜像文件
7.4.7 --cdrom
系统镜像文件
7.4.8 --os-variant=
虚拟机操作系统
7.4.9 VNC相关
--vnc --vncport=9401 \
--vnclisten=192.168.25.60
不做太多解释,监听主机、监听端口。
7.4.10 其他
详细的请”man virt-install”
8 虚拟机操作
8.1 查看虚拟机列表
virsh list --all
8.2 启动虚拟机
virsh start Marsaber_OSbak

论坛徽章:
0
3 [报告]
发表于 2012-03-23 13:09 |只看该作者
本帖最后由 marsaber 于 2012-03-23 13:38 编辑

附录1. VNC加密
加密前:
<graphics type='vnc' port='9409' autoport='no' listen='192.168.25.60'>
      <listen type='address' address='192.168.25.60'/>
</graphics>

加密后:
<graphics type='vnc' port='9409' autoport='no' listen='192.168.25.60' passwd='aaftest.123'>
      <listen type='address' address='192.168.25.60'/>
</graphics>

论坛徽章:
0
4 [报告]
发表于 2012-03-23 13:10 |只看该作者
本帖最后由 marsaber 于 2013-07-01 08:20 编辑

附录2. 镜像克隆
virt-clone --connect=qemu:///system -o Marsaber_OSbak -n Marsaber_1 -f /data/VM/Marsaber_1.img
virt-clone --connect=qemu:///system -o Marsaber_OSbak -n Marsaber_2 -f /data/VM/Marsaber_2.img

论坛徽章:
0
5 [报告]
发表于 2012-03-23 13:10 |只看该作者
本帖最后由 marsaber 于 2013-07-01 08:21 编辑

附录3. 删除虚拟机

删除虚拟机:
virsh undefine Marsaber_1

然后删除镜像文件:
rm -f /data/VM/Marsaber_1.img

论坛徽章:
0
6 [报告]
发表于 2012-03-23 13:11 |只看该作者
本帖最后由 marsaber 于 2012-03-23 13:47 编辑

附录4. 虚拟机配置文件

虚拟机配置文件:/etc/libvirt/qemu/

network配置文件:/etc/libvirt/qemu/networks/

network自启动文件:/etc/libvirt/qemu/networks/autostart/

论坛徽章:
0
7 [报告]
发表于 2012-03-23 13:12 |只看该作者
本帖最后由 marsaber 于 2013-07-01 08:22 编辑

附录5. No module virtio_pci found问题解决
没有initrd-2.6.27.img
执行:
mkinitrd --builtin=ahci /boot/initrd-2.6.27.img 2.6.37
mkinitrd /boot/initrd-2.6.27.img 2.6.27
均报错:
No module virtio_pci found for kernel 2.6.27, aborting.

RedHat官方提供的解决方案(mkinitrd --with virtio_pci --with virtio_blk -f /boot/initrd-2.6.27.img 2.6.27)也不行

解决办法:

1.安装脚本中,指定bus=ide;
--disk path=/home/VM/Marsaber_OSbak.img,bus=ide,size=20

2.编辑虚拟机配置文件
修改前:
<memballoon model='virtio'>
修改后:
<memballoon model='none'>

论坛徽章:
0
8 [报告]
发表于 2012-03-23 13:13 |只看该作者
本帖最后由 marsaber 于 2012-03-23 13:48 编辑

附录6. 创建network

1. 创建配置文件
cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/virbr1.xml

2. 编辑配置文件
<network>
  <name>virbr1</name>                                <---需要修改;
  <uuid>17e0185e-1111-4d17-2222-a8e2c27cffe6</uuid>     <---需要修改;
  <forward mode='nat'/>
  <bridge name='virbr1' stp='on' delay='0' />                <---需要修改;
  <mac address='52:54:00:0A:9F:FF'/>                    <---需要修改;
  <ip address='192.168.123.1' netmask='255.255.255.0'>      <---需要修改;
    <dhcp>
      <range start='192.168.123.2' end='192.168.123.254' />  <---需要修改;
    </dhcp>
  </ip>
</network>


3. 定义network
virsh net-define /etc/libvirt/qemu/networks/virbr1.xml

4. 查看network列表
[root@CentOS6 ~]# virsh net-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
virbr1               inactive   no

5. 设置自定义network自启动
[root@CentOS6 ~]# virsh net-autostart virbr1
Network virbr1 marked as autostarted

6. 启动自定义network
[root@CentOS6 ~]# virsh net-start virbr1
Network virbr1 started

7. 查看network列表
[root@CentOS6 networks]# virsh net-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
virbr1               active     yes

8. 说明
注意:这里的network是NAT!

论坛徽章:
0
9 [报告]
发表于 2012-03-23 13:14 |只看该作者
本帖最后由 marsaber 于 2012-03-23 13:46 编辑

附录7. 删除network

1.停掉network
virsh net-destroy virbr1

2.删除network
virsh net-undefine virbr1

论坛徽章:
0
10 [报告]
发表于 2012-03-23 13:14 |只看该作者
本帖最后由 marsaber 于 2012-03-23 13:48 编辑

附录8. 启动项
修改虚拟机配置文件:
  <os>
    ...
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP