首页 » 云计算 » KVM虚拟化与云计算

KVM虚拟化与云计算

 
  • 云计算概述

云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。

 

IAAS (Infrastructure as a Service)基础设施即服务

PAAS(platform as a Service)平台即服务

SAAS(software as a Service) 软件即服务

 

  • IaaS 基础设施即服务

消费者通过Internet 可以从完善的计算机基础设施获得服务。这类服务称为基础设施即服务。基于 Internet 的服务(如存储和数据库)是 IaaS的一部分。Internet上其他类型的服务包括平台即服务和软件即服务。

 

  • PaaS 平台即服务

把服务器平台作为一种服务提供的商业模式。而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了PaaS。所谓PaaS实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。

 

  • SaaS 软件即服务

它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要

 

  • 虚拟化

虚拟化:一种具体的技术,用来将物理机虚拟成为多个相互独立的虚拟机。

云计算不等于虚拟化。使用了虚拟化的技术做支撑。

  • 虚拟化类型

全虚拟化(kvm)、硬件虚拟化

半虚拟化、软件虚拟化

应用虚拟化(Xenapp)

桌面虚拟化

虚拟化软件有:

Esxi、xenserver、 kvm  、RHEV  、oVirt

 

  • KVM介绍

KVM:kernel-based virtual machine

结构简单,包含两个部分:

设备驱动:/dev/kvm

针对模拟PC硬件的用户空间组件

 

kvm需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的cpu上运行,即具有VT功能的intel cpu和具有AMD-V功能的AMD CPU。

 

  • KVM虚拟化特性

嵌入到linux正式kernel(提高兼容性)

代码级资源调用(提高性能)

虚拟机就是一个进程 (内存易于管理)

直接支持NUMA技术(提高扩展性)

redhat收购kvm

保持开源发展模式

更好的商业支持及服务保障

 

 

  • 安装kvm

vmx,svm

查看你的系统是否支持虚拟化,

intel的cpu的话,cpuinfo里有vmx就可以,

amd的cpu的话,cpuinfo里有svm表示支持。

如果是虚拟机需要在cpu选项设置一下,如果是物理机是在bios里设置,默认是开启的。

 

[root@kvm ~]# grep vmx /proc/cpuinfo

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x

 

  • libvirt介绍

Libvirt是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。

libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式

  • Libvirt主要支持的功能

    虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
    远程机器支持:只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。
    存储管理:任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件镜像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使用。
    网络接口管理:任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。
    虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。

 

libvirt库用C(支持 C++)实现,且包含对Python的直接支持。不过它还支持大量语言绑定。目前已经对Ruby、Java语言,Perl和 OCaml实施了绑定。libvirt支持最流行的系统编程语言(C和C++)、多种脚本语言。因此,不管您侧重何种语言,都可以方便的应用Libvirt

 

 

 

  • 安装qemu和libvirt

yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install -y

 

qemu:虚拟化软件,

kvm是内核模块,不能虚拟出磁盘,网络,pci等,但qemu是可以虚拟出来了,

 

 

  • KVM管理

 

  • 创建一个磁盘

qemu-img create -f raw /opt/CentOS-7.2-x86_64.raw 6G

 

开启libvirtd

systemctl enable libvirtd.service

systemctl start  libvirtd.service

 

查看kvm内核模块是否加载:

[root@kvm ~]# lsmod |grep kvm

kvm_intel             162153  0

kvm                   525259  1 kvm_intel

[root@kvm ~]#

 

  • 把cdrom系统盘复制到系统里

dd if=/dev/cdrom of=/opt/CentOS-7.2.iso

 

  • 装一台虚拟机

 

virt-install –name CentOS-7.2-x86_64  –virt-type kvm –ram 1024 –cdrom=/opt/CentOS-7.2.iso –disk path=/opt/CentOS-7.2-x86_64.raw –network  network=default –graphics vnc,listen=0.0.0.0 –noautoconsole

 

回车之后,在windows下通过vnc-view去连接,端口是5900,就可以看到安装界面,然后像正常一样选包,分区等安装。

 

安装完之后,reboot是只关,启不来,启来要用命令:

virsh start CentOS-7.2-x86_64(虚拟主机名字)

 

/etc/libvirt/qemu这个目录下会生成xml文件,是安装相关的信息,如果要编辑的话,需要用它里面说明的命令去编辑,

VERWRITTEN AND LOST. Changes to this xml configuration should be made using:

virsh edit CentOS-7.2-x86_64

 

管理工具virt-manager,这个管理工具是图形界面,python开发的。

libvirt也是管理工具(libvirt daemon,libvirt api)可以管理xen,kvm,vmware,other hypervisors

 

libvirt工具包含:virsh,virt-manger virt-viewer virt-install 等。

 

  • 虚拟机内存和CPU的增加

上面的虚拟机安装的时候没有指定cpu,现在可以指定,更改/etc/libvirt/qemu/CentOS-7.2-x86_64.xml文件,virsh edit /etc/libvirt/qemu/CentOS-7.2-x86_64

把cpu选项改成:<vcpu placement=’auto’ current=”1″>4</vcpu>

 

改完之后需要重启:

virsh shutdown CentOS-7.2-x86_64

virsh start CentOS-7.2-x86_64

 

然后就可以动态的增加cpu,如增加一个,

virsh setvcpus CentOS-7.2-x86_64 2 –live

也就是总数,但增加之后就不能减少了。

 

内存热膨胀和压缩,总数不能超过最大内存,内存可以热减少,cpu不可以。

<memory unit=’KiB’>4048576</memory> #这里设置最大值,下面的动态设置不能超过此值,超过也设置不成功。

<currentMemory unit=’KiB’>1048576</currentMemory>

查看

virsh qemu-monitor-command CentOS-7.2-x86_64 –hmp –cmd info balloon

设置

virsh qemu-monitor-command CentOS-7.2-x86_64 –hmp –cmd balloon 2048 #设置成2G

 

  • 资源过载使用说明

KVM允许客户机过载使用(over-commit)CPU资源,即让一个或多个客户机使用vCPU的总数量超过宿主机实际拥有的物理CPU数量。但不建议单个客户机的CPU数量多于物理宿主机的CPU数量。

 

在KVM中,客户机是一个QEMU进程,宿主机系统把它当做一个普通的Linux进程。Linux内核在进程请求更多内存时才分配给它们更多的内存。因此,在KVM中内存也是允许过载使用,分配给客户机的内存总数可以大于实际可用的物理内存总数。客户机过载使用内存的上限是:宿主机可用物理内存空间和交换空间的大小之和。超过这个上限会使客户机因内存不足被强制关闭。

 

一个内存过载使用的示例:

宿主机有物理内存32GB,准备同时运行32个内存配置为2GB的客户机。不包括客户机进程所需的内存,维持宿主机本身运行约需4GB内存。作为一般情况下的操作系统安装,32GB物理内存需要分配8GB的交换分区。而考虑作为Hpervisor运行客户机,需要增加交换分区容量:32x 2GB + 4GB – 32GB = 36GB。在此种情况下,该物理机的交换分区应分配:44GB。

参考:http://blog.sina.com.cn/s/blog_da4487c40102v11x.html

 

 

  • 虚拟硬盘

全镜像模式 (一次性分配,如raw,性能比较好,不支持压缩,快照)

稀疏模式(动态分配,qcow2,支持压缩,快照,镜像,用多少占多少)

硬盘格式:Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

像我们上面创建的raw格式是一次性分配的,有的格式是动态分配的,像我们的vm虚拟机一样,可以选择。

 

qcow2这个格式在openstack上使用的是最多的,我们可以通过这个命令qemu-img 来转换格式,生成磁盘等

 

 

 

 

 

  • kvm网络

默认是nat的网络

但现实中用的最多的是网桥的,可以手动设置,如下:

创建一个网桥:

brctl addbr br0

把br0和网卡联系起来

brctl addif br0 eth0(执行会断网)

所以要联起来操作:brctl addif br0 eth0 && ip addr del dev eth0 192.168.0.111/24 && ifconfig br0 192.168.0.111/24 && route add default gw 192.168.0.1

 

 

 

  • 性能优化

#CPU优化  vt-x

taskset 绑定KVM进程到固定的CPU,减少Cache Miss

CPU node core 一样。L2 L3 一个单独的node上是共享的。

 

#内存优化

 

寻址-EPT

 

KSM 内存合并  相同内存合并  ksmd

大页内存  khugepaged 把连续的4k内存合并成为2M

 

1.宿主机虚拟内存 -> 宿主机物理内存

虚拟机的虚拟内存  -> 虚拟机的物理内存

影子页表

宿主机虚拟内存 -> 宿主机物理内存

 

#I/O  CDN公司必问

Virtio  virtio-net virtio-blk 半虚拟化

这个使用默认就可以了,性能都是比较好。

IO schedulers

there are currently 4 available:

1、Noop Scheduler FIFO (SSD磁盘可以使用这个)

2、Anticipatory IO Scheduler(“as scheduler”)

3、Deadline Scheduler

4、Complete Fair Queueing Scheduler(“cfq scheduler”)

 

查看系统有支持几种io调度:

[root@kvm qemu]# dmesg|grep -i scheduler

[   11.038347] io scheduler noop registered

[   11.038362] io scheduler deadline registered (default)

[   11.038452] io scheduler cfq registered

[root@kvm qemu]#

 

如何更改io调度算法呢?

echo 到/sys/block/sda/queue/scheduler

如下:

 

[root@kvm qemu]# cat /sys/block/sda/queue/scheduler

noop [deadline] cfq

[root@kvm qemu]# echo cfq > /sys/block/sda/queue/scheduler

[root@kvm qemu]# cat /sys/block/sda/queue/scheduler

noop deadline [cfq]

[root@kvm qemu]#

 

永久修改 加入内核参数

elevator=cfq

像数据库可以用deadline,ssd磁盘可以用noop

 

 

  • 镜像制作

1.分区的时候,只分一个/分区。

2.删除虚拟机网卡的UUID MAC和(/etc/udev/rules.d/70-persistent-ipoib.rules文件,这个删除还没有测试)

3.安装基础软件包 net-tools lrzsz screen tree vim wget

 

  • KVM管理平台

1、OpenStack

2、CloudStack  cloud.com公司-》Ctrix-》Apache基金会-》Java

3、OpenNebula

4、oVirt :RHEV开源实现 Fedora Centos RHEL

ovrit由管理端+客户端组成。oVrit Engine(管理端,相当于vCenter) oVirt主机/节点(客户端,相当于ESXi)

oVirt安装:

http://www.ovirt.org/Download

yum localinstall http://resources.ovirt.org/pub/yum-repo/ovirt-release36.rpm

yum install -y ovirt-engine

yum install -y ovirt-engine-setup-plugin-allinone

5、Zstack

原文链接:KVM虚拟化与云计算,转载请注明来源!

0