(一)云计算概述php
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池,(资源包括网络、服务器、存储、应用软件、服务),这些资源可以被快速提供,须要投入不多的管理工做,或与服务供应商进行不多的交互。node
1:云计算以前的使用模式linux
2:传统数据中心面临的问题ios
3:云计算的优点web
4:云计算的特色算法
5:云计算的服务模式shell
A:支撑服务数据库
由支撑网络来提供,云计算模式实现的使用的方式。编程
B:IaaS基础设施即服务vim
消费者经过支撑网络能够从完善的计算机基础设施得到服务。这类服务称为基础设施即服务,基于 Internet 的服务(如存储和数据库)是 IaaS的一部分。
C:PaaS平台即服务
PaaS(Platform-as-a-Service:平台即服务)是指将软件研发的平台做为一种服务,以SaaS的模式提交给用户。所以,PaaS也是SaaS模式的一种应用。
D:SaaS
它是一种经过Internet提供软件的模式,厂商将应用软件统一部署在本身的服务器上,客户能够根据本身实际需求,经过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并经过互联网得到厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操做和本地数据存储,让用户随时随地均可以使用其定购的软件和服务。对于许多小型企业来讲,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的须要。
6:云计算的类型
A:公有云
公有云一般指第三方提供商为用户提供的可以使用的云,公有云通常可经过 Internet 使用,多是免费或成本低廉的,公有云的核心属性是共享资源服务。这种云有许多实例,可在当今整个开放的公有网络中提供服务。例如:阿里云、腾讯云、青云、百度云、盛大云、迅达云、等等。
B:私有云
私有云(Private Clouds)是为一个客户单独使用而构建的,于是提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并能够控制在此基础设施上部署应用程序的方式。私有云可部署在企业数据中心的防火墙内,也能够将它们部署在一个安全的主机托管场所,私有云的核心属性是专有资源。
C:混合云
混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。咱们已经知道私企业主要是面向企业用户,出于安全考虑,企业更愿意将数据存放在私有云中,可是同时又但愿能够得到公有云的计算资源,在这种状况下混合云被愈来愈多的采用,它将公有云和私有云进行混合和匹配,以得到最佳的效果,这种个性化的解决方案,达到了既省钱又安全的目的。
(二)虚拟化概述
虚拟化,是指经过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每一个逻辑计算机可运行不一样的操做系统,而且应用程序均可以在相互独立的空间内运行而互不影响,从而显著提升计算机的工做效率。
虚拟化使用软件的方法从新定义划分IT资源,能够实现IT资源的动态分配、灵活调度、跨域共享,提升IT资源利用率,使IT资源可以真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
1:虚拟化的分类
2:虚拟化的优点
(三)云计算与虚拟化的区别与联系
1:虚拟化是一种技术,云计算是一种使用模式。
2:虚拟化是指将物理的实体,经过软件模式,造成若干虚拟存在的系统,其实真是运做仍是在实体上,只是划分了若干区域或者时域划分
3:云计算的基础是虚拟化,但虚拟化只是云计算的一部分,云计算其实就是在虚拟化出若干资源池之后的应用,但虚拟化并非只对应云计算的
(四)KVM虚拟化
1:KVM的优点
2:KVM安装前提
CPU要支持虚拟化,服务器上默认通常是开启的,虚拟机要本身启动VT-EPT技术
[root@oldboy-node1 ~]# grep -E "(vmx|svm)" /proc/cpuinfo
Inter处理器对应:VMX
AMD处理器对应:SVM
3:KVM虚拟机安装
(1):查看系统版本
[root@linux-node1~]# cat /etc/redhat-release CentOSLinux release 7.1.1503 (Core)
(2):安装KVM相关的组件
[root@oldboy-node1 ~]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
kvm:linux内核中的一个模块,不须要安装只要加载就行,经过用户态进程来管理。
qemu:虚拟化软件,支持多种架构,可扩展,可移植
qemu-kvm:用户态管理KVM,网卡、声卡、PCI设备等的管理
libvirt:是一个虚拟化 API 和虚拟机(VMs)管理后台,支持远程或本地访问,支持多种虚拟化后端 (QEMU/KVM, VirtualBox, Xen,等等) 。
(3)检查KVM是否加载
[root@oldboy-node1 ~]# lsmod | grep kvm kvm_intel 148081 0 kvm 461126 1 kvm_intel
(4)启动并设置开机启动libvirt
[root@linux-node1~]# systemctl enable libvirtd.service [root@linux-node1~]# systemctl start libvirtd.service
[root@oldboy-node1 ~]# systemctl status libvirtd.service
(5) 建立虚拟机
1:虚拟机的建立命令
–virt-type:指定虚拟机类型(kvm、qemu、xen)
–name:指定虚拟机的名称
–raw:指定内存大小
–cpu:指定cpu的核数(默认为1)
–cdrom:指定镜像
–disk:指定磁盘路径(即上文建立的虚拟磁盘)
–network:指定网络类
2:建立硬盘(建立虚拟磁盘,-f指定格式,路径/opt/CentOS-7.1-x86_64.raw,大小10G)
[root@oldboy-node1 ~]# 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:镜像的拷贝
[root@oldboy-node1 ~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso
4:虚拟机的建立
[root@oldboy-node1 ~]# virt-install --name CentOS-7.1-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
5:使用VNC链接虚拟机
使用VNC客户端链接虚拟机 物理机的地址:5900 默认是从5900开始,以此类推。也能够经过端口grep vnc查看。
6:修改网卡的名称
由于CentOS7之后,网卡的命名发生改变。能够在安装的时候就作出修改
按下Tab键,而后在quiet后面添加 net.ifnames=0 biosdevname=0
至此,一台KVM虚拟机安装成功。
(6)KVM的平常应用管理
1:虚拟机的查看
# 当前正在运行中的虚拟机 [root@linux-node1 opt]# virsh list Id Name State —————————————————- 1 CentOS-7-x86_64running # 当前物理机中的全部的虚拟机 [root@linux-node1 opt]# virsh list --all
也能够在物理机进程中查看,KVM虚拟机就是一个KVM进程在运行
2:虚拟机的开关
关闭虚拟机 [root@oldboy-node1 ~]# virsh shudown CentOS-7.1-x86_64(主机名) [root@oldboy-node1 ~]# virsh destroy CentOS-7.1-x86_64(主机名) 打开虚拟机 [root@oldboy-node1 ~]# virsh start CentOS-7.1-x86_64 删除虚拟机 [root@oldboy-node1 ~]# virsh undefine CentOS-7.1-x86_64 挂起 [root@oldboy-node1 ~]# virsh suspended CentOS-7.1-x86_64 恢复 [root@oldboy-node1 ~]# virsh resume CentOS-7.1-x86_64
3:虚拟机CPU的扩容
编辑虚拟机 virsh edit CentOS-7.1-x86_64 # 为了实现CPU的热添加,就须要更改Cpu的最大值,固然热添加值不能超过最大值 # 当前为1,自动扩容最大为4 [root@linux-node1 opt]# virsh edit CentOS-7-x86_64 <vcpu placement=’auto’ current=”1″>4</vcpu> # 热修改成2个cpu(不知减小),高版本自动激活 [root@linux-node1 opt]# virsh setvcpus CentOS-7-x86_64 2 –live # 经过vnc登陆KVM虚拟机查看是否扩容成功 [root@KVM]# grep processor /proc/cpuinfo |wc -l # 在建立虚拟机时指定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, """
4:内存热膨胀和压缩
# 查看当前KVM内存大小 [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 –hmp –cmd info balloon balloon: actual=1024 # 热添加600M [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 –hmp –cmd balloon 600 # 在配置文件中修改 [root@linux-node1 network-scripts]# virsh edit CentOS-7.1-1-x86_64 最大内存<memory unit='KiB'>4048576</memory> 当前内存<currentMemory unit='KiB'>1048576</currentMemory>
5:硬盘的模式
生产中不建议对线上的服务器的硬盘进行更改,所以直接不对此赘述。
硬盘格式:
RAW:全镜像格式:设置多大就是多大,写入速度快,能够随便转换成其余的格式。性能最优。可是占用空间大。
QCOW2:稀疏格式:支持写时拷贝(Cow,copy-on-write)压缩,快照,镜像,更小的存储空间。(用多少给多少)可选择基于Zlib的压缩方式,能够选择AES加密
建立qcow2和raw文件
[root@linux-node1 ~]# qemu-img create -f qcow2 test.qcow2 10G Formatting 'test.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off [root@linux-node1 ~]# qemu-img create -f raw test.raw 10G Formatting 'test.raw', fmt=raw size=10737418240
空间使用状况对比
[root@linux-node1 ~]# ll -sh test.* 200K -rw-r--r-- 1 qiaoliyong qiaoliyong 193K 5 月 6 10:29 test.qcow2 0 -rw-r--r-- 1 qiaoliyong qiaoliyong 10G 5 月 6 10:28 test.raw [root@linux-node1 ~]# stat test.raw 文件:"test.raw" 大小:10737418240 块:0 IO 块:4096 普通文件 [root@linux-node1 ~]# stat test.qcow2 文件:"test.qcow2" 大小:197120 块:400 IO 块:4096 普通文件
注:
参考:http://www.ibm.com/developerworks/cn/linux/1409_qiaoly_qemuimgages/
6:网卡的配置
# 添加一个网卡 [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 # 把eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙 [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 gw192.168.56.2 && iptables -F # 查看网桥的IP [root@linux-node1~]# ifconfig br0 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 # 编辑虚拟机的网络配置使用br0网桥模式 [root@linux-node1 ~]# virsh edit CentOS-7-x86_64 <interface type=’bridge’> # 虚拟机网络链接方式 <mac address=’52:54:00:22:04:0f’/> #为虚拟机分配MAC地址,务必惟一,若是是dhcp得到一样IP会引发冲突 <source bridge=’br0’/> #当前主机网桥名称 # 重启虚拟机 # 关闭KVM虚拟机 [root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 Domain CentOS-7-x86_64 is being shutdown # 启动KVM虚拟机 [root@linux-node1 opt]# virsh start CentOS-7-x86_64 Domain CentOS-7-x86_64 started # 而后配置静态IP地址,重启网卡,便可以经过xshell链接上KVM虚拟机了。
(7)KVM性能优化
1:CPU的优化
Inter的cpu运行级别,按权限级别高低Ring3->Ring1->Ring0(Ring2和Ring1暂时不使用)Ring3为用户态;Ring0为内核态
Ring3的用户态是没有权限管理硬件的,须要切换到内核态Ring0,这样的切换(系统调用)称为上下文切换,物理机到虚拟机屡次的上下文切换,势必会致使性能出现问题。对于全虚拟化,inter实现了技术VT-x,在CPU硬件上实现了加速转换,CentOS7默认是不须要开启的。
2:CPU缓存绑定
[root@linux-node1 ~]# lscpu|grep cache L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3072K
L1是静态缓存,造价高。
L2,L3是动态缓存,经过脉冲的方式写入0和1,造价较低。
cache解决了cpu处理快,内存处理慢的问题,相似于memcaced和数据库。
若是cpu调度器把进程随便调度到其余cpu上,而不是当前L1,L2,L3的缓存cpu上,缓存就不生效了,就会产生miss,为了减小cache miss,须要把KVM进程绑定到固定的cpu上。
可使用taskset把某一个进程绑定(cpu亲和力绑定,能够提升20%的性能)在某一个cpu上,例如:taskset -cp 125718(1指的是cpu1,也能够绑定到多个cpu上,25718是指的pid).
cpu绑定的优势:提升性能,20%以上
cpu绑定的缺点:不方便迁移,灵活性差
3:内存优化
本来实现方式:
虚拟机的虚拟内存===>虚拟机的物理内存
宿主机的虚拟内存===>宿主机的物理内存
如今实现方式:EPT(inter)
虚拟机的虚拟内存=====EPT=====宿主机的物理内存
VMM经过采用影子列表解决内存转换的问题,影子页表是一种比较成熟的纯软件的内存虚拟化方式,但影子页表固有的局限性,影响了VMM的性能,例如,客户机中有多个CPU,多个虚拟CPU之间同步页面数据将致使影子页表更新次数幅度增长,测试页表将带来异常严重的性能损失。以下图1-1为影子页表的原理图
在此之际,Inter在最新的Core I7系列处理器上集成了EPT技术(对应AMD的为RVI技术),以硬件辅助的方式完成客户物理内存到机器物理内存的转换,完成内存虚拟化,并以有效的方式弥补了影子页表的缺陷,该技术默认是开启的,以下图1-2为EPT技术的原理。
KSM内存合并
宿主机上默认会开启ksmd进程,该进程做为内核中的守护进程存在,它按期执行页面扫描,识别副本页面并合并副本,释放这些页面以供它用,CentOS7默认是开启状态
[root@linux-node1 ~]# ps aux |grep ksmd root 280 0.0 0.0 0 0 ? SN 20:37 0:00 [ksmd]
大页内存
Linux默认的内存页面大小都是4K,HugePage进程会将默认的每一个内存页面能够调整为2M,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]
4:磁盘IO优化
IO调度算法,也叫电梯算法,详情请看赵班长博客:http://www.unixhot.com/article/4
一、Noop Scheduler:简单的FIFO队列,最简单的调度算法,因为会产生读IO的阻塞,通常使用在SSD硬盘,此时不须要调度,IO效果很是好
二、Anticipatory IO Scheduler(as
scheduler)适合大数据顺序顺序存储的文件服务器,如ftp server和web server,不适合数据库环境,DB服务器不要使用这种算法。
三、Deadline Schedler:按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,就不会产生饿死的情况,通常应用在数据库
四、Complete Fair Queueing Schedule:彻底公平的排队的IO调度算法,保证每一个进程相对特别公平的使用IO
# 查看本机Centos7默认所支持的调度算法 [root@linux-node1 ~]# dmesg|grep -i “scheduler” [ 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] # 使更改的IO调度算法永久生效,须要更改内核参数 [root@linux-node1 ~]# vim /boot/grub/menu.lst kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet