zoukankan      html  css  js  c++  java
  • 【openstack N版】——走进云计算

    一.云计算

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

    1.1云计算的特点和优势

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

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

    3)弹性计算,按需付费

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

    1)IDC托管

    2)IDC租用

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

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

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

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

    2)资源分配不合理

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

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

    1.4图解云计算的三层服务

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

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

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

    二.云计算与虚拟化

    2.1公有云,私有云,混合云

    • 公有云(public cloud):

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

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

    • 私有云(private cloud):

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

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

    • 混合云(hybird cloud):

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

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

    2.2云计算的层次

    • SaaS

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

    • PaaS

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

    • IaaS

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

    2.3虚拟化的趋势

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

          支持异构:linux系统可以虚拟化Windows系统,方便不同场景系统的使用。

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

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

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

    三.虚拟化的分类

    3.1半虚拟化,全虚拟化

    • 全虚拟化

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

    • 半虚拟化

          半虚拟化技术是后来才出现的技术,半虚拟化技术英文是paravirtualization,也叫作准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要htpervisor好肥一定的资源进行翻译操作,但对于某些不含该API的操作系统(主要是Windows)来说,就不能用这种方法,xen就是一个典型的半虚拟化的技术。

    3.2服务器虚拟化,桌面虚拟化,应用虚拟化

    • 服务器虚拟化

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

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

    • 桌面虚拟化

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

    • 应用虚拟化

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

    四.虚拟化之KVM

    4.1kvm的虚拟化特性

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

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

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

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

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

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

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

    4.2支持虚拟化的条件

    Inter的cpu:VMX

    AMD的cpu:SVM

    VMware需要开启如下两个条件即可,如果是物理机,需要在bios里面设置,默认都是开启的。

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

    1 [root@linux-node1 ~]# grep -E "svm|vmx" /proc/cpuinfo
    2 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 rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt
    3 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 a* vx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust

    4.3 KVM安装实践

    • 安装kvm
    1 #安装管理工具
    2 [root@linux-node1 ~]# yum install -y qemu-kvm libvirt
    3 #安装virt命令
    4 [root@linux-node1 ~]# yum install -y virt-install

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

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

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

    • 创建虚拟磁盘
     1 #创建qcow2磁盘
     2 [root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
     3 [root@linux-node1 opt]# qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G
     4 #转换磁盘格式
     5 [root@linux-node1 ~]# qemu-img convert -c -f raw -O qcow2 CentOS-7-x86_64.raw CentOS-7-x86_64.qcow2
     6 #创建虚拟磁盘:
     7 -f指定格式
     8 路径:/opt/CentOS-7-x86_64.raw 大小为10G
     9 格式:1.raw    创建多大占用多大磁盘空间
    10      2.qcow2  占用磁盘大小根据使用量来决定
    • 显示内核中kvm状态
    1 [root@linux-node1 ~]# lsmod |grep kvm
    2 kvm_intel             162153  0 
    3 kvm                   525409  1 kvm_intel
    • 启动服务
    1 #开机自启
    2 [root@linux-node1 ~]# systemctl enable libvirtd
    3 #启动libvirt
    4 [root@linux-node1 ~]# systemctl start libvirtd
    • 上传镜像

    法一:

    1 #下载镜像到/opt目录下
    2 [root@linux-node1 opt]# wget http://mirrors.aliyun.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso   

    法二:

    1 #利用CRT的SFTP上传
    2 CRT ==> File ==> Connect SFTP Session  (英文版CRT)
    3 CRT ==> 文件 ==> 连接到SFTP              (中文版CRT)
    4 sftp> cd /opt
    5 sftp> put D:/ISO/CentOS-7-x86_64-DVD-1511.iso 

    法三:

    1 #进入opt目录
    2 [root@linux-node1 ~]# cd /opt/
    3 #将镜像从cdrom挂载到opt下
    4 [root@linux-node1 opt]# dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso

    4.4 创建虚拟机

    Virt-install重要命令介绍:

    virt-install –help
    -n(Name):             指定虚拟机的名称
    –memory(–raw):    指定内存大小
    –cpu:                    指定cpu的核数(默认为1)
    –cdrom:                指定镜像
    –disk:                   指定磁盘路径(即上文创建的虚拟磁盘)
    –virt-type:             指定虚拟机类型(kvm,qemu,xen)
    –network:             指定网络类型

     1 [root@linux-node1 opt]# virt-install \
     2 --virt-type kvm \
     3 --name CentOS-7-x86_64 \
     4 --ram 1024 \
     5 --cdrom=/tmp/CentOS-7-x86_64-DVD-1511.iso \
     6 --disk path=/opt/CentOS-7-x86_64.raw \
     7 --disk /tmp/CentOS-7-x86_64.qcow2,format=qcow2 \
     8 --network network=default \
     9 --network bridge=br0 \
    10 --graphics vnc,listen=0.0.0.0 \
    11 --noautoconsole
    12 
    13 注解:
    14 虚拟机类型:kvm
    15 虚拟机名字:CentOS-7-x86_64
    16 虚拟机内存:1024M
    17 虚拟机镜像路径:/tmp/CentOS-7-x86_64-DVD-1511.iso
    18 虚拟机磁盘格式:raw
    19 虚拟机磁盘格式:qcow2
    20 虚拟机网络类型:默认
    21 虚拟机网络类型:桥接
    22 指定控制台:VNC
    23 指定不自动试图连接到客户机控制台

    4.5 虚拟机基本操作

    生成kvm虚拟机:            virt-install

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

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

    启动kvm虚拟机:            virsh start name

    正常关机:               virsh shutdown name

    非正常关机:              virsh destroy name

    删除:                 virsh undefine name  (彻底删除,无法找回,除非备份xml文件)

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

    挂起,终止:              virsh suspend name

    回复挂起状态:             virsh resumed name

    4.6 热添加CPU

     1 #虚拟机xml路径
     2 [root@linux-node1 opt]# cd /etc/libvirt/qemu/
     3 #查看虚拟机xml文件
     4 [root@linux-node1 qemu]# ll
     5 -rw------- 1 root root 3887 Dec 11 11:19 CentOS-7-x86_64.xml
     6 注:修改虚拟机xml文件不直接修改上文所述文件,要在用virsh管理命令修改
     7 #控制台内修改
     8 virsh # edit CentOS-7-x86_64
     9 #控制台外修改
    10 [root@linux-node1 qemu]# virsh edit CentOS-7-x86_64
    11 注:热添加的CPU数不能超过最大值
    12 #编辑配置文件
    13 [root@linux-node1 qemu]# virsh edit CentOS-7-x86_64
    14 #当前为1 自动扩容 最大为4
    15 <vcpu placement='static'>1</vcpu>
    16 <vcpu placement='auto' current="1" >4</vcpu>
    17 #关闭虚拟机
    18 [root@linux-node1 ~]# virsh shutdown CentOS-7-x86_64
    19 #开启虚拟机
    20 [root@linux-node1 ~]# virsh start CentOS-7-x86_64
    21 没有热添加cpu之前先查看cpu的个数:

    22 #热添加CPU 23 [root@linux-node1 ~]# virsh setvcpus CentOS-7-x86_64 2 --live 24 添加完cpu后,查看cpu个数:


    • 激活cpu
    1 [root@linux-node1 ~]# echo "1" > /sys/devices/system/cpu/cpu1/online
    2 #高版本的kvm不需要这样做,直接可以激活
    3 [root@linux-node1 ~]# cat /sys/devices/system/cpu/cpu0/online 
    4 1
    5 [root@linux-node1 ~]# cat /sys/devices/system/cpu/cpu1/online 
    6 1 

    第二种添加cpu的方法:安装时指定

    1 [root@linux-node1 ~]# virt-install –vcpus 5 –vcpus 5,maxcpus=10,cpuset=1-4,6,8 –vcpus sockets=2,cores=4,thread=2

    4.7 更改kvm内存配置

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

    1 #编辑虚拟机xml文件
    2 [root@linux-node1 ~]# virsh edit CentOS-7-x86_64
    3 #最大内存4G
    4 <memory unit='KiB'>4194304</memory>
    5 #当前内存:1G
    6 <currentMemory unit='KiB'>1048576</currentMemory>
    7 #查看当前内存
    8 [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
    9 [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512

    4.8 更改虚拟机网桥连接设置

          默认情况下是NAT,但是在生产环境,使用的更多的是桥接模式,更改虚拟机为网桥模式

          网桥的基本原理就是创建一个桥接接口br0,在屋里网卡和虚拟网络接口之间传递数据。

     1 #添加网桥br0
     2 [root@linux-node1 ~]# brctl addbr br0
     3 #桥接br0和eth0
     4 [root@linux-node1 ~]# brctl addif br0 eth0
     5 注:此时会断网如果是远程操作服务器不在身边,建议写成脚本来执行
     6 #删除eth0的IP
     7 [root@linux-node1 ~]# ip addr del dev eth0 192.168.56.11/24
     8 #给br0设置IP
     9 [root@linux-node1 ~]# ifconfig br0 192.168.56.11/24 up
    10 #给br0设置网关
    11 [root@linux-node1 ~]# route add default gw 192.168.56.2

          为了避免断网,直接写成脚本即可:

    1 #!/bin/bash
    2 brctl addbr br0
    3 brctl addif br0 eth0
    4 ip addr del dev eth0 192.168.56.11/24
    5 ifconfig br0 192.168.56.11/24 up
    6 route add default gw 192.168.56.2

          修改虚拟机配置:

     1 [root@linux-node1 ~]# virsh edit CentOS-7-x86_64
     2 将:
     3 <interface type='network'
     4   <mac address='52:54:00:0b:f8:a5'/>
     5   <source network='default'/>
     6 
     7 修改为:
     8 <interface type='bridge'>
     9   <mac address='52:54:00:0b:f8:a5'/>
    10   <source bridge='br0'/>
    11 
    12 #关闭虚拟机
    13 [root@linux-node1 ~]# virsh shutdown CentOS-7-x86_64
    14 #启动虚拟机
    15 [root@linux-node1 ~]# virsh start CentOS-7-x86_64

          查看网卡信息:

    [root@linux-node1 ~]# ifconfig
    br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.56.11  netmask 255.255.255.0  broadcast 192.168.56.255
            inet6 fe80::20c:29ff:fefe:1620  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:fe:16:20  txqueuelen 0  (Ethernet)
            RX packets 74  bytes 8909 (8.7 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 63  bytes 11462 (11.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::20c:29ff:fefe:1620  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:fe:16:20  txqueuelen 1000  (Ethernet)
            RX packets 26401  bytes 26066467 (24.8 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 8582  bytes 1939240 (1.8 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 0  (Local Loopback)
            RX packets 4  bytes 216 (216.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4  bytes 216 (216.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 00:00:00:00:00:00  txqueuelen 0  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 84 (84.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether fe:54:00:0b:f8:a5  txqueuelen 500  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    五.KVM的优化

    5.1 cpu的优化

    • Inter的cpi的运行级别,按权限级别高低Ring3 -> Ring2 -> Ring0,(Ring1和Ring2暂时没什么用)Ring3位用户态,Ring0为内核态。

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

    • Cpu的缓存绑定cpu的优化
    1 [root@linux-node1 ~]# lscpu|grep cache
    2 L1d cache:             32K
    3 L1i cache:             32K
    4 L2 cache:              256K
    5 L3 cache:              3072K
    • L1、L2、L3三级缓存和cpu绑定

          L1是静态缓存,造价高,L2,L3是动态缓存,通过脉冲的方式写入0和1,造价较低。Cache解决了cpu处理快,内存处理慢的问题,类似于memcache和数据库,如果cpu调度器吧进程随便调度到其它cpu上,而不是当前L1、L2、L3的缓存cpu上,缓存就不生效了,就会产生miss为了减少cache miss,需要把KVM进程绑定到固定的cpu上,可以使用taskset把某一个进程绑定(cpu亲和力绑定可以提高20%的性能)在某一个cpu上,例如:taskset -cp 1 25718(1指的是cpu1,也可以绑定到多个cpu上,25718指的进程pid)

          Cpu绑定的优点:提高性能,20%以上

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

    5.2内存的优化

    • 内存寻址:宿主机虚拟内存 -> 宿主机物理内存

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

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

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

    • KMS内存合并

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

    1 [root@chuck ~]# ps aux|grep ksmd|grep -v grep
    2 root        286  0.0  0.0      0     0 ?        SN   12:32   0:00 [ksmd]
    • 大页内存CentOS7默认开启
    1 [root@chuck ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 
    2 [always] madvise never
    3 [root@chuck ~]# ps aux |grep khugepage|grep -v grep
    4 root        287  0.2  0.0      0     0 ?        SN   12:32   0:21 [khugepaged]

          Linux平台默认的内存页面大小都是4K,HugePage进程会将默认的的每个内存页面可以调整为2M。

    5.3磁盘IO的优化

    • IO调度算法,也叫电梯算法

      ① 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默认所支持的调度算法
    1 [root@chuck ~]# dmesg|grep -i "scheduler"
    2 [   11.312549] io scheduler noop registered
    3 [   11.312555] io scheduler deadline registered (default)
    4 [   11.312606] io scheduler cfq registered
    • 临时更改某个磁盘的IO调度算法,将deadling模式改为cfq模式
    1 [root@chuck ~]# cat /sys/block/sda/queue/scheduler 
    2 noop [deadline] cfq 
    3 [root@chuck ~]# echo cfq >/sys/block/sda/queue/scheduler             
    4 [root@chuck ~]# cat /sys/block/sda/queue/scheduler       
    5 noop deadline [cfq]
    • 使更改的IO调度算法永久生效,需要更改内核参数
    [root@chuck ~]# vim /boot/grub/menu.lst
    kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet

    5.4cache的优化

      关于write through和write back,默认write through即可

    • Write-back

    在这种策略下,当数据被写到raid卡的cache中,控制器就向IO调度器返回了写操作完成信号; 双刃剑,它虽然带来了IO性能的提升,但是随之而来的风险:因为cache是ROM,假设服务器突然断电,则cache中的数据可能丢失; 为了解决这个问题,raid卡加加装一块锂电池(BBU),即当服务器断电时,能把cache中的数据刷到磁盘上;同样的道理,BBU又成为一个风险点,因为锂电池需要保证始终有足够的电量来保证能将cache中的数据写到磁盘上,raid卡会加入一个BBU的管理策略,learn cycle(充放电周期,一般有30/90天,让电池充放电一次,持续约6小时),那么这6小时又称为一个风险点;所以raid卡又会增加一个策略:No WB when bad bbu,即当BBU坏掉,或者BBU正在充放电时,禁用write-back,此时Write policy就会变成:write-through。

    • Write through

    只有当数据被写到物理磁盘中,控制器才向IO调度器返回了写操作完成信号; 这种策略以牺牲IO性能,来保证数据安全性,淘宝这边的策略:因为Write-Through的io性能无法满足业务的需求,所以我们这边会采用另一个模式:WB when bad bbu,即不管bbu状态是否正常,我们都会采用write-back,那数据安全怎么办?服务器异常断电的情况,在我们这边概率极低;即便很不幸的我们IDC局部断电了,我们也有主备模式来保证数据的相对安全;我们会监控BBU的状态,一旦发生了BBU failed,我们会将安排停机更换。

    六.创建虚拟机镜像

    6.1虚拟磁盘及镜像

      由于在一开始创建了虚拟磁盘,并命名为CentOS-7-x86_64.raw,这就是虚拟机的镜像喽。

    1 [root@chuck ~]# cd /opt/
    2 [root@chuck opt]# ls
    3 CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

    6.2镜像制作原则

    • 分区的时候,只分一个/根分区,并不需要swap分区,由于虚拟机的磁盘性能就不好,如果设置了swap分区,当swap工作的时候,性能会更差。例如阿里云主机,就没有交换分区。
    • 镜像制作需要删除网卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的规则也要删除
    • 关闭selinux,关闭iptables
    • 安装基础软件的包:net-tools lrzsz screen tree vim wget

    七. 版本演化

    版本名称

    版本日期

    包含组件代码名称

    Austin

    2010-10-21

    Nova,Swift

    Bexar

    2011-02-03

    Nova,Swift,Glance

    Cactus

    2011-04-15

    Nova,Swift,Glance

    Diablo

    2011-09-22

    Nova,Swift,Glance

    Essex

    2012-04-05

    Nova,Swift,Glance,Horizon,Keystone

    Folsom

    2012-09-27

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder

    Grizzly

    2013-04-04

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder

    Havana

    2013-10-17

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer

    Icehouse

    2014-04-17

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove

    Juno

    2014-10-16

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove,Sahara

    Kilo

    2015-04-30

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove,Sahara,Ironic

    Liberty

    2015-10-16

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove,Sahara,Ironic,Zaqar, Manila, Designate, Barbican

    Mitaka

    2016-04-08

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove,Sahara,Ironic,Zaqar, Manila, Designate, Barbican

    Newton

    2016-10-06

    Nova,Swift,Glance,Horizon,Keystone,Quantum,Cinder,Heat,Ceilometer,Trove,Sahara,Ironic,Zaqar, Manila, Designate, Barbican

     

     

    【开源是一种精神,分享是一种美德】

      — By GoodCook

      — 笔者QQ:253097001

      — 欢迎大家随时来交流

      —原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

  • 相关阅读:
    OnClose()和 OnDestroy()
    非计算机专业人员如何成为专业人员的学习之路
    【轉】白话文、简化字白化了文化,简化了思想
    【轉】研制汉字计算机的意义和可能性
    【轉】智慧的辨思:最优秀的语种 汉语
    安卓命令行操作备忘
    virtualbox 安装 android 经验总结
    【转】HTML5 LocalStorage 本地存储
    iOS开发之 获取手机的网络的ip地址
    iOS开发之 Xcode 6 创建一个Empty Application
  • 原文地址:https://www.cnblogs.com/goodcook/p/6433751.html
Copyright © 2011-2022 走看看