云计算与虚拟化概述-你不得不知的云计算与虚拟化基础知识

 

1.1云计算概述

算是一种按使用量付的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服器,存,应用程序,服),源能被快速提供,只需投入不多的管理工做,或与服行不多的交互。html

 

q   在云计算以前的模式和技术node

1IDC托管linux

2IDC租用web

3、虚拟主机(卖空间)算法

4VPS:虚拟专用主机 openvz(经过超卖技术坑人) xen(不支持超卖)shell

q   相对云计算,传统数据中心面临的问题数据库

1、资源利用率低express

2、资源分配不合理vim

3、难以实现真正的自动化运维windows

q   云计算特色和优点

1、云算是一种使用模式,不是一种技术。(经过网络、弹性扩展、按需付费)

2、云计算使用方法必须经过网络来访问。

3、云计算的优点是弹性计算(按需付费)。

1.1.1云计算的特色

1、资源池化

2、无处不在的网络访问

3、随需应变的自助服务

4、可测量的服务

5、快速的伸缩

云计算五大特色,如图1-1

1-1

1.1.2云计算服务模型

云计算服务模型如图1-2

1-2

q   IaaS 基础设施即服务

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

q   PaaS 平台即服务

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

q   SaaS 软件即服务

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

1.1.3云计算部署模型

q   公有云(Public Cloud)

公有云一般指第三方提供商为用户提供的可以使用的云,公有云通常可经过internet使用,多是免费或成本低廉,公有云的核心属性是共享资源服务。这种云有许多实例,可在当今整个开放的共有网络中提供服务。例如:阿里云、腾讯云、青云、百度云、盛大云、迅达云、等等。

q   私有云(Private Clouds)

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

q   混合云(Hybrid Cloud)

混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。咱们已经知道私企业主要是面向企业用户,处于安全考虑,企业更愿意将数据存放在私有云中,可是同时又但愿能够得到公有云的计算资源,在这种状况下混合云被愈来愈多的采用,它将公有云和私有云进行混合匹配,以得到最佳的效果,这种个性的解决方案,达到二既省钱又安全的目的。

q   社区云(Community Cloud)

社区云是大的公有云范畴内的一个组成部分。是指在必定的地域范围内,由云计算服务提供商统一提供计算资源、网络资源、软件和服务能力所造成的云计算形式。即基于社区的网络互连优点和技术易于整合特色,经过区域内各类计算能力进行统一服务形式的整合,结合社区内的用户需求共性,实现面向区域用户需求的云计算服务模式。例如:区域型和行业型。资源的高效共享。

1.2虚拟化概述

化,一种具体的技术,用来将物理机虚拟成为多个相互独立的虚拟机。在一台算机上同运行多个逻辑计算机,每一个逻辑计算机可运行不一样的操做系,而且应用程序均可以在相互独立的空内运行而互不影响,能够实现IT资源的动态分配、灵活调度、跨域共享,提升IT资源利用率,使IT资源可以真正成为社会基础设施,服务于各行各业中灵活多用需求。从而著提升算机的工做效率。

1.2.1虚拟化的分类

q   全虚拟化

q   半虚拟化

q   平台虚拟化

q   软件虚拟化

q   硬件虚拟化(Inter vt-x/EPT (AMD AMD-v /RVI)

q   桌面虚拟化

q   应用虚拟化

以上各类虚拟化技术,百度百科都能查阅到相关资料。

1.2.2虚拟化的优点

1)虚拟化能够虚拟出来多个操做系统,它们之间是相互独立的,因此每一个操做系统上所跑的应用程序是相互不影响的。

2)支持异构,linux系统能够虚拟化windows系统,方便不一样场景系统的使用。

3)支持快照、克隆、还原等功能。

企业案例一

公司虚拟机你也不知道能不能停,也不知道跑什么了,而后问产品经理他也不知道,有可能有用你放着把。若是这是一台物理机你看怎么办,真的很无奈、想改个啥你都不敢该,只能让他跑在那里。

企业案例二

公司这台物理机有没有用,全部人告诉你,没事删把确定没有用,而后到店庆的时候,产品经理过来了:咱们去年店庆作了一个积分抽奖的活动,我花钱买的,个人代码哪去了,个人服务器呢?服务器早都格式化多少遍了,产品经理说那没办法,那么赶忙联系提供商把,提供商倒闭了。怎么办,从新作呗。

若是有虚拟机就好办了,我把虚拟机关了放在那,只要不删除,是否是永远都在,哪天用在起来就好了。无非就占点硬盘,分配的时候,可使用多少分配多少。

1.2.3虚拟化与云计算总结

q   云计算不等于虚拟化,二者并不能相互比较。

q   云计算是一种资源和使用交互的方式。

q   虚拟化是一种具体的技术。

q   云计算要依赖虚拟化技术来实现的一种经过网络访问获取资源,流量,交付的使用模式。(例如:弹性计算)

q   虚拟化至关于实干家,而云计算是思想家。

1.3KVM虚拟化企业安装实战

KVM:内核级虚拟化技术(Kernel-based Virtual Machine)

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

1)设备驱动/dev/kvm, 针对模拟PC硬件的用户空间组件

2) KVM须要CPU中虚拟化功能的支持,只可在具备虚拟化支持的CPU上运行,即具备VT功能的interCPU和具备ADM-V功能的AMD CPU

1.3.1KVM虚拟化特性

q   嵌入到Linux正式Kernel(提升兼容性)

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

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

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

q   ------RedHat收购KVM---------

q   保持开源发展模式

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

1.3.2KVM安装必备条件

实验必备条件,必须开启虚拟机VT-EPT技术,vmware虚拟机选择上便可。服务器上默认是开启状态。

[root@linux-node1 ~]# 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 mmx fxsr sse sse2 ss 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 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap

1.3.2安装KVM虚拟机

[root@linux-node1 ~]# cat /etc/redhat-release  #查看操做系统版本

CentOS Linux release 7.1.1503 (Core)

 

[root@linux-node1 ~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install –y  #安装KVM

kvmlinux内核的一个模块,模块不须要安装只须要加载,经过用户态程序来管理便可。

qeum:虚拟化软件,能够虚拟不一样的CPU,支持异构(x86的架构能够虚拟化不是x86架构的)

qeum-kvm:用户态管理kvm,网卡、声卡、PCI设备等都是须要qemu来管理。

 

[root@linux-node1 ~]# lsmod|grep kvm  #查看kvm内核是否被加载

kvm_intel             148081  0

kvm                   461126  1 kvm_intel

 

[root@linux-node1 ~]# systemctl enable libvirtd.service  #libvirtd加入开机启动

[root@linux-node1 ~]# systemctl start libvirtd.service  #启动libvirtd

1.3.3创建一台KVM虚拟机

首先学习下virsh-install建立虚拟机命令

--virt-type:指定虚拟机类型(kvmqemuxen)

--name:指定虚拟机的名称

--raw:指定内存大小

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

--cdrom:指定镜像

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

--network:指定网络类

[root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G  #建立虚拟磁盘,-f指定格式,路径/opt/CentOS-7.1-x86_64.raw,大小10G

[root@linux-node1 ~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso#挂在镜像,导入至虚拟机

[root@linux-node1 ~]# virt-install --name CentOS-7-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.1.iso --disk path=/opt/CentOS-7.1-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0--noautoconsole    #建立一台KVM虚拟机

Starting install...

Creating domain...|    0 B     00:03

Domain installation still in progress. You can reconnect to

the console to complete the installation process.

1.3.4VNC链接KVM虚拟机

打开一个VNC客户端,输入192.168.56.111:5900(第一个默认5900,第二个5901,以此类推)链接虚拟机里面创建的KVM虚拟机,安装CentOS7的过程,此处不在演示如何安装。

安装CentOS7,在启动前修改内核让网卡为eth0,如图1-2

1-2

1.4KVM平常管理

[root@linux-node1 opt]# virsh start CentOS-7-x86_64  #启动刚才建立的CentOS7KVM虚拟机

Domain CentOS-7-x86_64 started

 

[root@linux-node1 opt]# virsh list  #查看KVM虚拟机是否启动

Id    Name                           State

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

 3CentOS-7-x86_64running

1.4.1CPU扩容

[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 #为了实现CPU的热添加,就须要更改Cpu的最大值,固然热添加值不能超过最大值

<vcpu placement='auto' current="1">4</vcpu>  #当前为1,自动扩容最大为4

 

[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64  #关闭KVM虚拟机

Domain CentOS-7-x86_64 is being shutdown

[root@linux-node1 opt]# virsh start CentOS-7-x86_64  #启动KVM虚拟机

Domain CentOS-7-x86_64 started

[root@linux-node1 opt]# virsh setvcpus CentOS-7-x86_64 2 --live  #热修改成2cpu(不知减小),高版本自动激活

[root@KVM]# grep processor /proc/cpuinfo |wc -l  #经过vnc登陆KVM虚拟机查看是否扩容成功

2

在建立虚拟机时指定cpu

[root@linux-node1 ~]# virt-install --help|grep vcpus

  --vcpus VCPUS         为虚拟机配置的 vcpus 数。例如:

                        --vcpus 5

                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8

                        --vcpus sockets=2,cores=4,threads=2,

1.4.2内存扩容

内存的设置拥有一个气球(balloon)机制,能够增大减小,可是也要设置一个最大值,默认并无最大值,也能够在安装时指定。

[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 #为了实现CPU的热添加,就须要更改Cpu的最大值,固然热添加值不能超过最大值

<memory unit='KiB'>4194304</memory>  #修改最大支持内存扩容为4G

  <currentMemory unit='KiB'>1048576</currentMemory> #当前KVM虚拟机内存为1G

重启虚拟机

[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64  #关闭KVM虚拟机

Domain CentOS-7-x86_64 is being shutdown

[root@linux-node1 opt]# virsh start CentOS-7-x86_64  #启动KVM虚拟机

Domain CentOS-7-x86_64 started

 

[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon  #查看当前KVM内存大小

balloon: actual=1024

[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon #热添加

unexpected end of expression

[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon  #在次查看

balloon: actual=2001

1.4.3硬盘管理

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

[root@linux-node1 ~]# qemu-img --help |grep -i "formats:"

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

硬盘格式均可以经过qeum-img管理,具体qemu-img --help

全镜像格式(表明raw):设置多大就是多大,写入速度快,方便的转换为其余格式,性能最优,可是占用空间大。

稀疏格式(表明qcow2):支持压缩,快照,镜像,更小的存储空间(即用多少占多少)

1.4.4网络管理

默认状况KVM的网络是NAT模式,可是在生产状况,用的多的都是网桥模式。

修改eth0(这里CentOS7eth0在装机时就指定了,那若是没指定怎么办? http://www.xuliangwei.com/xubusi/102.html

[root@linux-node1 ~]# brctl addbr br0  #添加一个网卡

[root@linux-node1 ~]# brctl show  #查看网卡信息

bridge name     bridge id               STP enabled     interfaces

br0             8000.000000000000       no

virbr0          8000.5254009f0311       yes             virbr0-nic

 

[root@linux-node1 ~]# brctl addif br0 eth0 && ip addr del dev eth0 192.168.56.111/24 &&ifconfig br0 192.168.56.111/24 up && route add default gw 192.168.56.2 && iptables -F  #eth0加入网桥,使用桥接模式,br设置ip,添加路由网关,关闭防火墙

[root@linux-node1 ~]# ifconfig br0  #查看网桥的IP

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.56.111  netmask 255.255.255.0  broadcast 192.168.56.255

        inet6 fe80::20c:29ff:fe5d:cc27  prefixlen 64scopeid 0x20<link>

        ether 00:0c:29:5d:cc:27  txqueuelen 0(Ethernet)

        RX packets 4813  bytes 472527 (461.4 KiB)

        RX errors 0  dropped 0overruns 0  frame 0

        TX packets 2705  bytes 510369 (498.4 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0collisions 0

 

[root@linux-node1 ~]# virsh edit CentOS-7-x86_64  #编辑虚拟机的网络配置使用br0网桥模式

 <interface type='bridge'>  #虚拟机网络链接方式

  <mac address='52:54:00:22:04:0f'/>  #为虚拟机分配MAC地址,务必惟一,若是是dhcp得到一样IP会引发冲突

  <source bridge='br0'/>  #当前主机网桥名称

重启虚拟机

[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64  #关闭KVM虚拟机

Domain CentOS-7-x86_64 is being shutdown

[root@linux-node1 opt]# virsh start CentOS-7-x86_64  #启动KVM虚拟机

Domain CentOS-7-x86_64 started

#而后配置静态IP地址,重启网卡,便可以经过xshell链接上KVM虚拟机了。

1.5KVM经常使用管理

[root@linux-node1 ~]# virt-install  #创建kvm虚拟机

[root@linux-node1 ~]# virsh list  #查看正在运行的KVM虚拟机

[root@linux-node1 ~]# virsh list --all  #查看全部KVM虚拟机

[root@linux-node1 ~]# virsh start name   #启动KVM虚拟机

[root@linux-node1 ~]# virsh shutdown name #正常关闭KVM虚拟机

[root@linux-node1 ~]# virsh destroy name  #强制关闭KVM虚拟机(相似于直接断电)

[root@linux-node1 ~]# virsh suspend name  #挂起KVM虚拟机

[root@linux-node1 ~]# virsh resume name  #恢复挂起的KVM虚拟机

[root@linux-node1 ~]# virsh dumpxml name  #查看KVM虚拟机配置文件

[root@linux-node1 ~]# virsh edit name  #编辑KVM虚拟机的xml配置文件

[root@linux-node1 ~]# virsh undefine name  #完全删除KVM虚拟机,不可逆,若是想找回来,须要备份/etc/libvirt/qemuxml文件)

1.6KVM性能优化

1.6.1CPU优化

intercpu的运行级别,按权限级别高低Ring3->Ring1->Ring0Ring2Ring1暂时用不上)Ring3为用户态,Ring0为内核态

Ring3的用户态是没有权限管理硬件的,须要切换到内核态Ring0,这样的切换(系统调用)称为上下文切换,物理机到虚拟机屡次的上下文切换,势必会致使性能出现问题。对于全虚拟化,inter实现了技术VT-x,在CPU硬件上实现了加速转换,CentOS7默认是不须要开启的。

q   CPU缓存绑定

[root@linux-node1 ~]# lscpu|grep cache  #centos7自带查看cpu信息命令

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              3072K

 L1是静态缓存,造价高。

 L2,L3是动态缓存,经过脉冲的方式写入01,造价较低。

 cache解决了cpu处理快,内存处理慢的问题,相似于memcaced和数据库。

 若是cpu调度器把进程随便调度到其余cpu上,而不是当前L1,L2,L3的缓存cpu上,缓存就不生效了,就会产生miss,为了减小cache miss,须要把KVM进程绑定到固定的cpu上。

可使用taskset把某一个进程绑定(cpu亲和力绑定,能够提升20%的性能)在某一个cpu上,例如:taskset -cp 1 257181指的是cpu1,也能够绑定到多个cpu上,25718是指的pid.

cpu绑定的优势:提升性能,20%以上

cpu绑定的缺点:不方便迁移,灵活性差

1.6.2内存优化

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

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

VMM经过采用影子列表解决内存转换的问题,影子页表是一种比较成熟的纯软件的内存虚拟化方式,但影子页表固有的局限性,影响了VMM的性能,例如,客户机中有多个CPU,多个虚拟CPU之间同步页面数据将致使影子页表更新次数幅度增长,测试页表将带来异常严重的性能损失。以下图1-1为影子页表的原理图

1-1

在此之际,Inter在最新的Core I7系列处理器上集成了EPT技术(对应AMD的为RVI技术),以硬件辅助的方式完成客户物理内存到机器物理内存的转换,完成内存虚拟化,并以有效的方式弥补了影子页表的缺陷,该技术默认是开启的,以下图1-2EPT技术的原理。

 

1-2

KSM内存合并

宿主机上默认会开启ksmd进程,该进程做为内核中的守护进程存在,它按期执行页面扫描,识别副本页面并合并副本,释放这些页面以供它用,CentOS7默认是开启状态

[root@linux-node1 ~]# ps aux|grep ksmd|grep -v grep

root        2800.0  0.0      00 ?        SN   04:220:00 [ksmd]

大页内存,CentOS7默认开启的

[root@linux-node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

[root@linux-node1 ~]# ps aux|grep hugepage|grep -v grep

root        2810.0  0.0      00 ?        SN   04:220:03 [khugepaged]

Linux默认的内存页面大小都是4KHugePage进程会将默认的每一个内存页面能够调整为2M

1.6.3磁盘IO优化

IO调度算法,也叫电梯算法,详情请看赵班长博客:http://www.unixhot.com/article/4

1Noop Scheduler:简单的FIFO队列,最简单的调度算法,因为会产生读IO的阻塞,通常使用在SSD硬盘,此时不须要调度,IO效果很是好

2Anticipatory IO Scheduleras scheduler)适合大数据顺序顺序存储的文件服务器,如ftp serverweb server,不适合数据库环境,DB服务器不要使用这种算法。

3Deadline Schedler:按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,就不会产生饿死的情况,通常应用在数据库

4Complete Fair Queueing Schedule:彻底公平的排队的IO调度算法,保证每一个进程相对特别公平的使用IO

[root@linux-node1 ~]# dmesg|grep -i "scheduler"   #查看本机Centos7默认所支持的调度算法

[    1.332147] io scheduler noop registered

[    1.332151] io scheduler deadline registered (default)

[    1.332190] io scheduler cfq registered

 

临时更改某个磁盘的IO调度算法,将deadling模式改成cfq模式

[root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler

noop [deadline] cfq

[root@linux-node1 ~]# echo cfq >/sys/block/sda/queue/scheduler            

[root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler

noop deadline [cfq]

[root@linux-node1 ~]# vim /boot/grub/menu.lst  #使更改的IO调度算法永久生效,须要更改内核参数

kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet

1.7虚拟化镜像制做

1.在开始建立过虚拟磁盘,并命名为CentOS-7.1-x86_64.raw,这个是虚拟机镜像。

[root@linux-node1 ~]# ll /opt/

total 5203344

-rw-r--r--  1 qemu qemu4310695936 12 28 04:46 CentOS-7.1.iso

-rw-r--r--. 1 qemu qemu 10737418240 12 28 08:55 CentOS-7.1-x86_64.raw

2. 分区的时候,只分一个/分区(不须要swap分区)

3. 删除网卡里面{UUID,MAC}

4. 若是有/etc/udev/rules.d/ 70-persistent-ipoib.rules 则删除。

5. iptables关闭、selinux关闭

6.安装基础软件包。(net-tools lrzsz screen tree vim wget)

 

 

关于更多云计算知识尽情期待:http://xuliangwei.com

相关文章
相关标签/搜索