一、走进云计算

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

1、云计算的特点和优势

1)云计算是一种使用模式

2)云计算必须通过网络访问

3)弹性计算,按需付费

2、在云计算之前的模式或技术

1)IDC托管

2)IDC租用

3)虚拟主机(卖空间的)

4)vps:虚拟专有主机,openvz超卖很坑人的,xen不支持超卖

3、相对于云计算,传统数据中心面临的问题

1)资源利用率低(大部分机器cpu所占比率低于15%)

2)资源分配不合理  

   举例:由于某个活动,上线各种服务器,但是并未达到实际效果,导致服务器资源浪费

3)很难实现真正的运维自动化

4、图解云计算的三层服务

KVM的概念和云计算_虚拟主机


基础设施:计算,存储,网络服务

平台服务:对象存储,身份认证,运行环境,消息队列,数据库服务

应用平台:监控,内容,合作,通信,财务

二、云计算与虚拟化

1、公有云、私有云和混合云

公有云(Public Cloud):通常指第三方提供商为用户提供的能够使用的云,公有云一般可通过 Internet 使用,可能是免费或成本低廉的,公有云的核心属性是共享资源服务。这种云有许多实例,可在当今整个开放的公有网络中提供服务。例如:aws,阿里云,×××,百度云,腾讯云。

优点:价格低廉,使用方便

私有云(Private Clouds):是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并可以控制在此基础设施上部署应用程序的方式。私有云可部署在企业数据中心的防火墙内,也可以将它们部署在一个安全的主机托管场所,私有云的核心属性是专有资源。

优点:可控,数据安全(银行必然使用私有云)

混合云(Hybrid Cloud):混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。我们已经知道私企业主要是面向企业用户,出于安全考虑,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹配,以获得最佳的效果,这种个性化的解决方案,达到了既省钱又安全的目的,例如在一次活动中,只需要暂时几台机器,在私有云存在的情况,考虑混合云的使用,是最合理化的。

优点:集合的使用方式更完美,可扩展,更节省。

KVM的概念和云计算_应用平台_02


2、云计算的层次

KVM的概念和云计算_虚拟主机_03

KVM的概念和云计算_数据中心_04

1. SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储等等;平时使用的邮件服务器,即属于SaaS服务。

2. PaaS:提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java,python, .Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上去。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置;更适合提供给开发人员使用,在这里也可以使用docker容器技术实现

3. IaaS:提供给消费者的服务是对所有计算基础设施的利用,包括处理CPU、内存、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、,防火墙,、负载均衡器等)的控制。更适合提供给运维人员使用

3、虚拟化的优势

1)虚拟化可以虚拟出来多个操作系统,它们之间是相互独立的,所以每个操作系统上所跑的应用自然是相互不影响的,在这里用一个经典的例子说明,一台物理机跑8个tomcat和8个虚拟机上各跑一个tomcat,跑8个tomcat的物理机,如果其中一个tomcat出问题(内存有问题,jvm有问题等),势必会影响到其他7个tomcat,但是在8个虚拟机上跑分别各跑一个tomcat,他们之间是互不影响的,由于虚拟化一层原因占用了一些资源,效果并没有直接一台物理机跑8个tomcat效果好,但是虚拟机的互相独立互不影响是更重要的,而且便于管理,每个tomcat实例都会起3个端口(8080:对外服务端口,8009:AJP端口,8005:关闭端口),使用虚拟机之后,就不会担心多个tomcat端口冲突的情况。

2)支持异构,linux系统可以虚拟化windows系统,方便不同场景系统的使用

3)支持快照功能,克隆功能,快照功能在某个物理机不知运行什么,是否正在运行的情况下,如果是一台虚拟机就好办了,直接停了该虚拟机,只不过是占了一些磁盘空间而已。

4、虚拟化和云计算的简单总结

虚拟化是一种技术,云计算是通过虚拟化技术实现的一种通过网络访问获取资源,流量,交付的使用模式,两者并不能相互比较,虚拟化相当于实干家,而云计算是思想家。

三、虚拟化的分类方式

1、全虚拟化与半虚拟化

KVM的概念和云计算_数据中心_05

全虚拟化:又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层--Hypervisor,或者叫做虚拟机管理程序(VMM)。hypervisor 可以划分为两大类。首先是类型 1,这种 hypervisor 是直接运行在物理硬件之上的。其次是类型 2,这种 hypervisor 运行在另一个操作系统(运行在物理硬件之上)中。类型 1 hypervisor 的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。类型 2 hypervisor 包括 QEMU 和 WINE。因为运行在虚拟机上的操作系统通过Hypervisor来最终分享硬件,所以虚拟机发出的指令需经过Hypervisor捕获并处理。为此每个客户操作系统(Guest OS)所发出的指令都要被翻译成CPU能识别的指令格式,这里的客户操作系统即是运行的虚拟机,所以Hypervisor的工作负荷会很大,因此会占用一定的资源,所以在性能方面不如裸机。但是运行速度要快于硬件模拟。全虚拟化最大的优点就是运行在虚拟机上的操作系统没有经过任何修改,唯一的限制就是操作系统必须能够支持底层的硬件,不过目前的操作系统一般都能支持底层硬件,所以这个限制就变得微不足道了。

KVM的概念和云计算_数据库服务_06

半虚拟化:半虚拟化技术是后来才出现的技术,半虚拟化技术英文是paravirtualization,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。不过缺点就是,要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是windows)来说,就不行能用这种方法,Xen就是一个典型的半虚拟化的技术。

2、服务器虚拟化,桌面虚拟化,应用虚拟化

1)服务器虚拟化

数量少的情况推荐使用ESXI,XenServer

数量大的情况推荐使用KVM,RHEV(并不开源),oVirt,Openstack,Vmvare vshpere

2)桌面虚拟化

  桌面虚拟化依赖于服务器虚拟化,在数据中心的服务器上进行服务器虚拟化,生成大量的独立的桌面操作系统(虚拟机或者虚拟桌面),同时根据专有的虚拟桌面协议发送给终端设备。用户终端通过以太网登陆到虚拟主机上,只需要记住用户名和密码及网关信息,即可随时随地的通过网络访问自己的桌面系统,从而实现单机多用户。多用于IP外包,呼叫中心,银行办公、移动桌面。

应用虚拟化:技术原理是基于应用/服务器计算A/S架构,采用类似虚拟终端的技术,把应用程序的人机交互逻辑(应用程序界面、键盘及鼠标的操作、音频输入输出、读卡器、打印输出等)与计算逻辑隔离开来。在用户访问一个服务器虚拟化后的应用时,用户计算机只需要把人机交互逻辑传送到服务器端,服务器端为用户开设独立的会话空间,应用程序的计算逻辑在这个会话空间中运行,把变化后的人机交互逻辑传送给客户端,并且在客户端相应设备展示出来,从而使用户获得如同运行本地应用程序一样的访问感受。

3)硬件虚拟化和软件虚拟化

http://virtualization.ctocio.com.cn/38/11466538.shtml

四、虚拟化之KVM

1、kvm的虚拟化特性

1)嵌入到linxu正式kernel(提高了兼容性)

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

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

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

5)虽然被Redhat收购了,但是依然保持着开源发展模式,社区活跃

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

7)Centos7较Centos6默认支持cpu热添加,内存的热添加,大页内存默认都是开启的

2、支持虚拟化的条件:

inter的cpu:vmx

AMD的cpu:svm

本文使用的是vmvare,需要开启如下两个条件即可,如果是物理机,需要在bios里面设置,默认都是开启状态。

KVM的概念和云计算_云计算_07

在cpuinfo中可以查看具体的支持虚拟化的信息

1 2 3 [root@chuck~]# grep -E "svm|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 rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust 

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 rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust


3、kvm安装实战

1)安装kvm

[root@chuck~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt -y

kvm:linux内核的一个模块,模块不需要安装,只需要加载

qemu:虚拟化软件,可以虚拟不同的CPU,支持异构(x86的架构可以虚拟化出不是x86架构的)

qemu-kvm:用户态管理kvm,网卡,声卡,PCI设备等都是qemu来管理的

2)创建一个虚拟磁盘,-f 指定格式,路径是/opt/CentOS-7.1-x86_64.raw,大小为10G

[root@chuck opt]# qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G

Formatting '/opt/CentOS-7.1-x86_64.raw'fmt=raw size=10737418240

3)显示内核中kvm的状态

[root@chuck opt]# lsmod|grep kvm
kvm_intel                148081  0 
kvm                   461126  1 kvm_intel


4)启动libvirt,查看状态,关键字:active

KVM的概念和云计算_数据库服务_08

5)开始装一台虚拟机

a、首先在vmvare上挂载一个镜像

KVM的概念和云计算_应用平台_09b、把镜像导入到虚拟机中,当然时间可能较长

[root@localhost opt]# dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso
8419328+0 records in
8419328+0 records out
4310695936 bytes (4.3 GB) copied, 229.618 s, 18.8 MB/s
[root@localhost opt]# ls /opt/
CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

c、创建一台虚拟机

首先学virt-install命令,在这里使用--help查看,并且只学习重要的,其他的稍后会有提供

virt-install --help

-n(Name):指定虚拟机的名称

--memory(--raw):指定内存大小

--cpu:指定cpu的核数(默认为1)

--cdrom:指定镜像

--disk:指定磁盘路径(即上文创建的虚拟磁盘)

--virt-type:指定虚拟机类型(kvm,qemu,xen)

--network:指定网络类型

执行创建虚拟机命令:

[root@chuck ~]# virt-install --name CentOS-7.1-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.1-x86 --cdrom=/opt/CentOS-7.1-x86_64.iso  --disk path=/opt/CentOS-7.1-x86_64.raw --nehics vnc,listen=0.0.0.0 --notwork network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
 
Starting install...
Creating domain...                                       |    0 B     00:03     
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

如此一个虚拟机就完成了!

此时,打开一个VNC客户端,输入10.0.0.123:5900(第一个默认就是5900,第二个是5901,以此类推),可连接到所通过vmvare创建的虚拟机上,然后就是安装Centos7的过程,此处不再强调。

前文说过,虚拟机就是宿主机的一个进程

[root@chuck ~]# ps -ef|grep kvm
root        671      2  0 19:54 ?        00:00:00 [kvm-irqfd-clean]
qemu       2829      1 75 20:09 ?        00:18:49 /usr/libexec/qemu-kvm -name CentOS-7.1-x86_64 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu Nehalem -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1bd0464f-133b-4d51-b60b-5d33c5dde17f -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/CentOS-7.1-x86_64.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -drive file=/opt/CentOS-7.1-x86_64.raw,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/opt/CentOS-7.1-x86_64.iso,if=none,id=drive-ide0-0-0,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:99:1b:4e,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on
root       2850      2  0 20:09 ?        00:00:00 [kvm-pit/2829]
root      30667   2055  0 20:34 pts/0    00:00:00 grep --color=auto kvm

4、虚拟机基本操作学习

生成kvm虚拟机:virt-install

查看在运行的虚拟机:virsh list

查看所有虚拟机:virsh list --all

查看kvm虚拟机配置文件:virsh dumpxml name

启动kvm虚拟机:virsh start name

正常关机:virsh shutdown name 

非正常关机(相当于物理机直接拔掉电源):virsh destroy name

删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的                   xml文件)

根据配置文件定义虚拟机:virsh define file-name.xml

挂起,终止:virsh suspend name

恢复挂起状态:virsh resumed name

a、启动刚才创建的虚拟机

[root@chuck ~]# virsh start CentOS-7.1-x86_64  
Domain CentOS-7.1-x86_64 started

5、编辑kvm的xml文件,更改虚拟机配置

a、配置虚拟机的cpu,两种方式(启动的时候指定核数,更改xml)

第一种方法:为了实现cpu的热添加,就需要更改cpu的最大值,当然热添加的个数不能超过最大值

[root@chuck ~]# virsh edit CentOS-7.1-x86_64 
<vcpu placement='auto' current="1">4</vcpu>  当前为1,自动扩容,最大为4

重启虚拟机

[root@chuck ~]# virsh shutdown CentOS-7.1-x86_64       
Domain CentOS-7.1-x86_64 is being shutdown
[root@chuck ~]# virsh start CentOS-7.1-x86_64    
Domain CentOS-7.1-x86_64 started

登录虚拟机上,查看cpu信息,确认cpu的个数,下面开始进行cpu热添加

KVM的概念和云计算_数据库服务_10

cpu的热添加(cpu只支持热添加,不支持热减少)

[root@chuck ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live


再到虚拟机中查看cpu信息

KVM的概念和云计算_虚拟主机_11

kvm版本较高,并不需要echo "1"到/sys/devices/system/cpu/cpu1/online 进行激活,自动可以激活。

[root@chuck ~]# cat /sys/devices/system/cpu/cpu1/online 

1

第二种方法:安装的时候指定virt-install --vcpus 5  --vcpus 5,maxcpus=10,cpuset=1-4,6,8  --vcpus sockets=2,cores=4,thread=2

b、更改虚拟机中内存的设置

内存的设置拥有一个“气球(balloon)机制”,可以增大减少,但是也要设置一个最大值,默认并没有设置最大值

,也可以在安装的时候指定,这里不再重复此方法

[root@chuck ~]# virsh edit CentOS-7.1-x86_64  
 <memory unit='KiB'>4194304</memory>把最大内存改为4G
  <currentMemory unit='KiB'>1048576</currentMemory>当前内存为1G

重启虚拟机

查看当前状态的内存使用情况

[root@chuck ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=1024

对内存进行热添加并查看

[root@chuck ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 
unexpected end of expression
[root@chuck ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=2000

c、更改虚拟机中存储,硬盘设置(不建议在生产环境使用硬盘的扩大收缩模式,很容易产生故障)

[root@chuck ~]# qemu-img --help |grep -i "formats:"  
Supported formats: vvfat vpc vmdk vhdx vdi sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg cloop bochs blkverify blkdebug

有结果看出,kvm支持很多种硬盘格式

硬盘格式总体上分为两种:1为全镜像格式,2为稀疏格式

全镜像格式(典型代表raw格式),其特点:设置多大就是多大,写入速度快,方便的转换为其他格式,性能最优,但是占用空间大

稀疏模式(典型代表qcow2格式),其特点:支持压缩,快照,镜像,更小的存储空间(即用多少占多少)

硬盘格式都可以通过qemu-img管理,详情qemu-img --help