您的位置:首页 > 运维架构 > Linux

CentOS5.2服务器上使用KVM进行虚拟化应用

2011-05-01 23:00 429 查看
CentOS5.2服务器上使用KVM进行虚拟化应用

文章出处:DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20090921/176044_2.html)

 这篇教程将会为你详细描述怎样在一台CentOS5.2服务器上安装和使用KVM,来创建和运行

虚拟机,我不仅教大家怎样创建image-based虚拟机,同样也教大家创建一台LVM的虚拟

机.KVM是Kernel-based Virtual Machine的缩写,使用的是硬件虚拟化的技术,换言之,你的

CPU需要支持硬件虚拟化,例如Intel VT 或者AMD-V技术。

我不保证你参考这篇教程完全能使你正常工作!

1 前言

  我使用的一台主机名为server1.example.com和ip地址是192.168.0.100的CentOS5.2服务

器作为我的KVM主机。

  在这里我也需要一个安装有virt-manager的客户端系统,可以使我们能够连接到虚拟机的图形

终端。我在这里使用的是Ubuntu 8.10桌面版。

2安装 KVM

CentOS 5.2 KVM主机:

运行

system-config-securitylevel

并且开启SELinux(如果你的SELinux被禁用,virt-install将不会正常工作)。

然后检查CPU是否支持硬件虚拟化-运行命令

egrep '(vmx|svm)' --color=always /proc/cpuinfo

应该会显示如下信息:

[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 c

lflush mmx fxsr sse sse2 ht syscall

nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic

cr8_legacy misalignsse

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 c

lflush mmx fxsr sse sse2 ht syscall

nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic

cr8_legacy misalignsse

[root@server1 ~]#

如果什么也没有显示的话,就说明你的处理器不支持硬件虚拟化技术,下面的内容就不适合你了。

下面我们为软件包导入GPG key

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

然后安装KVM和virtinst(一个创建虚拟机的工具),我们运行

yum install kvm kmod-kvm qemu libvirt python-virtinst

然后重新启动系统:

reboot

启动过后, KVM的内核模块将会被加载:

lsmod | grep kvm

[root@server1 ~]# lsmod | grep kvm

kvm_amd 50452 0

kvm 109264 1 kvm_amd

[root@server1 ~]#

(这个输出结果是一台拥有AMD-V处理器的系统,如果你的电脑使用的是Intel VT的CPU,将会

显示类似kvm_intel字符)

使用下列命令检查KVM是否成功安装

virsh -c qemu:///system list

将会显示如下结果:

[root@server1 ~]# virsh -c qemu:///system list

Id Name State

----------------------------------

[root@server1 ~]#

如果在这里显示的是一个错误的信息,说明有些东西出现了问题。

下面我们需要在我们的服务器上设置一个网桥,就可以使我们的虚拟机从其他主机中读取数据。

要做到这一点,我们安装bridge-utils工具。。。。。。

yum install bridge-utils

... 并且配置一个网桥从/etc/sysconfig/network-scripts/ifcfg-eth0参考

BOOTPROTO, BROADCAST, IPADDR, NETMASK和NETWORK等值来创建文

件/etc/sysconfig/network-scripts/ifcfg-br0 :

vi /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0

TYPE=Bridge

BOOTPROTO=static

BROADCAST=192.168.0.255

IPADDR=192.168.0.100

NETMASK=255.255.255.0

NETWORK=192.168.0.0

ONBOOT=yes

修改/etc/sysconfig/network-scripts/ifcfg-eth0 as follows (取消注释

BOOTPROTO, BROADCAST, IPADDR, NETMASK, 和NETWORK 最后添加 BRIDGE=br0):

vi /etc/sysconfig/network-scripts/ifcfg-eth0

# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+

DEVICE=eth0

#BOOTPROTO=static

#BROADCAST=192.168.0.255

HWADDR=00:10:A7:05:AF:EB

#IPADDR=192.168.0.100

#NETMASK=255.255.255.0

#NETWORK=192.168.0.0

ONBOOT=yes

BRIDGE=br0

重新启动网络...

/etc/init.d/network restart

... 运行

ifconfig

现在应该显示网桥(br0):

[root@server1 ~]# ifconfig

br0 Link encap:Ethernet HWaddr 00:10:A7:05:AF:EB

inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0

inet6 addr: fe80::210:a7ff:fe05:afeb/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:17 errors:0 dropped:0 overruns:0 frame:0

TX packets:53 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1160 (1.1 KiB) TX bytes:14875 (14.5 KiB)

eth0 Link encap:Ethernet HWaddr 00:10:A7:05:AF:EB

inet6 addr: fe80::210:a7ff:fe05:afeb/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:13662 errors:7 dropped:160 overruns:4 frame:0

TX packets:11646 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:15144608 (14.4 MiB) TX bytes:1379942 (1.3 MiB)

Interrupt:74 Base address:0xcc00

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:38 errors:0 dropped:0 overruns:0 frame:0

TX packets:38 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:4308 (4.2 KiB) TX bytes:4308 (4.2 KiB)

virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00

inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0

inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:35 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 b) TX bytes:9987 (9.7 KiB)

[root@server1 ~]#

3 在你的Ubuntu 8.10 Desktop上安装virt-viewer 或者virt-manager

Ubuntu 8.10 Desktop:

在这里我们需要一个连接我们客户机图形终端的一个工具-我们可以使用virt-manager来做到这一

点(请参考KVM Guest Management With Virt-Manager On Ubuntu 8.10)。我在这里假设我

使用的是Ubuntu 8.10 Desktop。

运行

sudo aptitude install virt-manager

来安装virt-manager.

(如果你是用的是Fedora 10 desktop,你可以使用下列命令安装virt-manager:

先成为root。。。

su

... 然后运行

yum install virt-manager

4 创建Debian Lenny客户机(Image-Based)

CentOs 5.2 KVM 主机 :

现在让我们回到我们的CentOS 5.2 KVM 主机:

先参考一下

man virt-install

来学习如何使用virt-install.

我们使用bridging模式创建一个名字为vm10,512内存,2个虚拟CPU,磁盘镜像为

~/vm10.gcow2(有12G大小)Debian Lenny客户机,并且插入Debian Lenny Netinstall CD到光

驱,运行

virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 -f ~/vm10.qcow2 -s 12 -c

/dev/cdrom --vnc --noautoconsole --os-type linux --os-variant generic26 --accelerate --network=bridge:br0 --hvm

(virt-install 的man文件显示了--os-type 和--os-variant合法的值。

CentOS 5。2中附带的virtinstall的版本不能识别Debian Lenny,所以我们使用generic26来代替--os-variant.)

当然,你也可以常见一个Debian Lenny Netinstall CD的ISO镜像。。。

dd if=/dev/cdrom of=~/debian-500-amd64-netinst.iso

通过virt-install命令使用ISO镜像:

virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 -f ~/vm10.qcow2 -s 12 -c

~/debian-500-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant

generic26 --accelerate --network=bridge:br0 --hvm

输出结果如下所示:

[root@server1 ~]# virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 -f ~/vm10.q

cow2 -s 12 -c ~/debian-500-amd64-netinst.iso --vnc --noautoconsole --os-type linux --osvariant

generic26 --accelerate --network=bridge:br0 --hvm

Starting install...

Creating storage file... 100% |=========================| 12 GB 00:00

Creating domain... 0 B 00:00

Domain installation still in progress. You can reconnect to

the console to complete the installation process.

[root@server1 ~]#

5 连接到客户机

Ubuntu 8.10 Desktop:

KVM客户机将会从Debian Lenny Netinstall CD启动并且启动Debian installer-这就是我们必须

连接到客户机图形终端的原因。你可以通过在Ubuntu 8.10 desktop使用virt-manager来做到这

一点。

运行

sudo virt-manager

在Ubuntu desktop 上启动virt-manager.

(如果你是Fedora 10 desktop,运行:

su

virt-manager

)

在virt-manager,连接到KVM主机:

输入KVM主机的root密码:

输入完以后,你就会看到vm10这个主机正在运行了,标注客户机并且点击Open 按钮来打开客户机的图形终端:

再次输入KVM主机的root密码:

你现在就可以连接到客户机的图形终端了。并且能看到Debian installer:

现在你既可以像在物理系统中安装Debian一样正常安装Debian了。请注意在安装结束后,

Debian客户机需要重启。客户机将会停掉,所以你需要再次重启它。

可以使用virt-manager也可以使用我们的CentOS 5.2主机上的命令:

CentOS 5.2 KVM 主机 :

virsh --connect qemu:///system

start vm10

quit

然后,你就可以使用virt-manager连接到客户机并且配置它。如果你在客户机中安装了

OpenSSH(openssh-server包),你可以通过SSH客户端连接它(类似 PuTTY)。

6 管理KVM客户机

CentOS 5.2 KVM 主机 :

可以通过 virsh 命令管理KVM客户机,"virtual shell"。连接到virtual shell,运行

virsh --connect qemu:///system

下面就是virtual shell的显示界面:

[root@server1 ~]# virsh --connect qemu:///system

Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands

'quit' to quit

virsh #

现在你可以在virtual shell中输入命令来管理你的客户机,运行:

help

获得更多的命令:

virsh # help

Commands:

help print help

attach-device attach device from an XML file

attach-disk attach disk device

attach-interface attach network interface

autostart autostart a domain

capabilities capabilities

connect (re)connect to hypervisor

console connect to the guest console

create create a domain from an XML file

start start a (previously defined) inactive domain

destroy destroy a domain

detach-device detach device from an XML file

detach-disk detach disk device

detach-interface detach network interface

define define (but don't start) a domain from an XML file

domid convert a domain name or UUID to domain id

domuuid convert a domain name or id to domain UUID

dominfo domain information

domname convert a domain id or UUID to domain name

domstate domain state

domblkstat get device block stats for a domain

domifstat get network interface stats for a domain

dumpxml domain information in XML

freecell NUMA free memory

hostname print the hypervisor hostname

list list domains

migrate migrate domain to another host

net-autostart autostart a network

net-create create a network from an XML file

net-define define (but don't start) a network from an XML file

net-destroy destroy a network

net-dumpxml network information in XML

net-list list networks

net-name convert a network UUID to network name

net-start start a (previously defined) inactive network

net-undefine undefine an inactive network

net-uuid convert a network name to network UUID

nodeinfo node information

quit quit this interactive terminal

reboot reboot a domain

restore restore a domain from a saved state in a file

resume resume a domain

save save a domain state to a file

schedinfo show/set scheduler parameters

dump dump the core of a domain to a file for analysis

shutdown gracefully shutdown a domain

setmem change memory allocation

setmaxmem change maximum memory limit

setvcpus change number of virtual CPUs

suspend suspend a domain

ttyconsole tty console

undefine undefine an inactive domain

uri print the hypervisor canonical URI

vcpuinfo domain vcpu information

vcpupin control domain vcpu affinity

version show version

vncdisplay vnc display

virsh #

list

显示所有正在运行的客户机;

list --all

显示所有客户机,正在运行的和没有运行的:

virsh # list --all

Id Name State

----------------------------------

2 vm10 running

virsh #

如果你修改了一个客户机的xml文件(位于/etc/libvirt/qemu/ 目录),你必须重新定义客户机:

define /etc/libvirt/qemu/vm10.xml

请注意,无论你何时在/etc/libvirt/qemu/ 中修改了客户机的XML文件,你必须重新运行define

命令!

启动和停止客户机,运行:

start vm10

停止一个客户机,运行

shutdown vm10

立即中断一个客户机(类似直接关电源),运行

destroy vm10

挂起一个客户机:

suspend vm10

恢复客户机:

resume vm10

这些都是最重要的命令.

输入

quit

退出virtual shell.

7 创建一个LVM-Based客户机

CentOS 5.2 KVM 主机 :

LVM-based 客户机与image-based客户机相比较而言有很多优势。LVM-based不但减轻了硬盘

IO的负担,而且很方便就可以备份(使用 LVM snapshots)。

使用LVM-based客户机,你需要有剩余空间的卷组,并且此卷组没有分配给任何逻辑卷。在这个

例子中,我使用的卷组叫做/dev/VolGroup00 容量大小大约有148GB。。。

gdisplay

[root@server1 ~]# vgdisplay

/dev/hda: open failed: No medium found

--- Volume group ---

VG Name VolGroup00

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 3

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 2

Open LV 2

Max PV 0

Cur PV 1

Act PV 1

VG Size 148.53 GB

PE Size 32.00 MB

Total PE 4753

Alloc PE / Size 968 / 30.25 GB

Free PE / Size 3785 / 118.28 GB

VG UUID 5faE1k-DkMu-JUEk-K0JV-B9ta-Nyaf-n7tngf

[root@server1 ~]#

。。。这里面其中包涵/dev/VolGroup00/LogVol00的卷组大约

30GB,/dev/VolGroup00/LogVol00的卷组(大约1GB)-剩余的空间没有分配,可以让KVM客户机使用:

lvdisplay

[root@server1 ~]# lvdisplay

/dev/hda: open failed: No medium found

--- Logical volume ---

LV Name /dev/VolGroup00/LogVol00

VG Name VolGroup00

LV UUID qzC8v6-cLyi-Pr4g-BjJv-35Xr-cEJM-LBVs7G

LV Write Access read/write

LV Status available

# open 1

LV Size 29.28 GB

Current LE 937

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:0

--- Logical volume ---

LV Name /dev/VolGroup00/LogVol01

VG Name VolGroup00

LV UUID xA3e1Z-mEc9-rGT1-WcAu-TjF4-lbf3-6LvFaj

LV Write Access read/write

LV Status available

# open 1

LV Size 992.00 MB

Current LE 31

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:1

[root@server1 ~]#

现在我创建vm11的虚拟机作为LVM-based的客户机。我预想vm11有20GB的磁盘空间,因此

我创建一个 20GB大小的名为/dev/VolGroup00/vm11的逻辑卷:

lvcreate -L20G -n vm11 VolGroup00

然后,我再次使用virt-install来创建客户机:

virt-install --connect qemu:///system -n vm11 -r 512 --vcpus=2 -f /dev/VolGroup00/vm11 -c

~/debian-500-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant

generic26 --accelerate --network=bridge:br0 --hvm

请注意我在这里使用的是-f /dev/VolGroup00/vm11而非 -f ~/vm11.qcow2 ,并且我并不需要-

s;来重新定义磁盘空间,因为我已经通过vm11 (20GB)定义过一个逻辑卷了。

现在我们就可以按照第五章的流程来安装客户机了。

8链接

1、KVM: http://kvm.qumranet.com/

2、CentOS: http://www.centos.org/

3、Debian: http://www.debian.org/

4、Ubuntu: http://www.ubuntu.com/

文章出处:DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20090921/176044_2.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 服务器 休闲
相关文章推荐