SLA(Service Level Agreement)即服务等级协议,简言之它通过对资源的限制、配置、调度等措施而保证服务的高可用。
高可用
高可用可以按照其作用对象分为服务器、虚拟机以及虚拟机内应用程序。
在服务器层面,我们通过评分、隔离、电源管理等机制保证虚拟机运行在一个稳定的环境中。评分即通过监视服务器的资源当前及历史状态,对其进行综合评价,分数越高越具有运行虚拟机的权利。隔离操作一般发生在服务器与集群管理节点失去联系时,为保证服务质量而将其从服务集群中隔离不再运行虚拟机,一般配合电源管理等进行操作。
虚拟机层面的高可用往往需要对其添加模拟看门狗。看门狗是一种辅助芯片,在嵌入式系统中常用来监控CPU状态,当CPU停止工作后看门狗就不会再收到CPU发来的心跳信号而将CPU强制重启。对于PC而言,看门狗将系统重启的条件多是蓝屏、死机等。
对于虚拟机内的应用程序的高可用,可以通过外部监控(比如端口状态监测)和内部监控(比如虚拟机代理程序)完成。这方面的监控产品比较多,主流的有Nagios/Icinga和Zabbix等,它们都需要在虚拟机内安装代理程序,当某一应用被监测到停止响应时,就可以使用管理员提前设置的策略尝试重启此应用。
资源限制
资源限制即是对允许用户使用的最大资源进行限制,包括虚拟机数目、CPU、内存、硬盘、网络等。这里的限制按照对象可以划分为两个方面,一是用户允许使用的总资源配额(quota),二是虚拟机在运行时所允许的资源最大利用率(usage)。
比如在一个用户可以自己创建虚拟机的环境中,管理员往往难以控制其创建删除行为,如果能对用户创建的所有虚拟机数目、vCPU数目、内存大小、硬盘大小、网络带宽进行配额限制的话,那就既能满足用户的自主需求又可适当减少管理员负担了。这种限制有些类似操作系统中的配额限制,它主要体现在对“量”的限制上。
但是对“量”的限制还不能满足私有云的需求,那么就要从“质”上进行限制了。如果用户拥有足够的服务资源配额,那么当他的虚拟机长期满负荷运行时(比如网络发包、硬盘高IOPS直写、CPU利用率居高不下等),就会对与其处在同一台服务器上的虚拟机造成比较严重的影响。为了其他用户的体验考虑,我们引入了利用率的限制,包括CPU利用率(CPU数目与其利用率乘积)、硬盘利用率(IOPS、MBPS)、网络利用率(百分比)等。
当用户的资源将要超过配额或者较长时间内高利用率使用时,平台同样需要对其发出警告,防止其系统发生崩溃、恶意入侵等意外情况。
读者可能会在很多地方读到关于将PaaS平台搭建在IaaS平台上的资料,但是我们需要了解这样做的原因主要是考虑到了资源的隔离控制,而不是资源用度方面,所以其利用率较之以物理机直接接驳容器工具的方式有一定劣势。
□资源配置
资源配置往往是一个动态的过程,它通过一系列策略对虚拟机的CPU、内存、网络、硬盘的使用进行控制,以期最有效地利用服务器资源。
当一个多核虚拟机运行时,它会有多个LWP(轻量级进程,可理解为线程)协同父进程运行。如在双路32核服务器上运行一个单路32核的虚拟机,往往就会有多于33个LWP在运行(可用ps-eLf查看)。而这些LWP在未指定的情况下往往会在核之间漂移,然后由于进程同步和上下文切换对虚拟机性能造成比较大的损失,当使用率提高时也会对其他进程产生比较严重的影响。为了解决这一类性能损失,我们引入p-vCPU绑定与NUMA机制。
另外我们还可对每个虚拟机vCPU进行优先级安排,较高优先级的vCPU拥有更多的CPU时间。这一特性由于其收益较小,在私有云中适合于极端优化场景。
对于内存的配置,我们同样可以利用KSM(Kernel Samepage Merging)配合内存气球技术提高内存使用效率并达到内存“超分”(over committing)的效果。从KSM可以看出其大意,即合并虚拟机所占用虚拟机的相同内存页以节约服务器内存占用,如图2-18所示。内存气球即假设虚拟机的实际占用内存为气球体积,服务器总内存为装有许多气球的盒子,占用内存即为盒子中的空闲体积。当气球变小时,盒子空闲体积变大,就有更多的空间可以供给其他气球及服务器使用,反之亦然,如图2-19所示。
图2-18 KSM原理
图2-19 内存气球技术
□资源调度
资源调度的过程按照虚拟机的生命周期可分为两部分进行:一是用户请求服务后服务资源后池中分配合适的资源提供服务,称为启动策略;二是当提供的服务达到调度阈值后,为了服务的质量保证而进行的自动调度或者手工调度,称为运行时策略。资源调度是考虑一个云平台质量的重要指标。为了实现私有云的资源调度策略,我们需要的操作通常有对虚拟机的迁移、开关机、挂起,以及对服务器的开关机、隔离,再结合定时、分级、排序、统计、反馈机制,套用到不同的场景中去。接下来我们从启动策略、运行时策略开始,讨论它们可能用到的机制和具体操作。
启动策略的实现或简单或复杂,目前在私有云中最基本的有两种:快速启动和最优启动。
快速启动,就是平台首先对服务器按照其所剩资源进行排序。如第一个列表为所有服务器剩余内存从高到低的排序,第二个列表为所有服务器CPU剩余未分配核数从高到低的排序。当虚拟机请求资源准备启动时,它从第一个列表中发现服务器甲、乙、丙满足其CPU核数要求,从第二个列表中发现服务器甲、丁满足其内存要求,那么虚拟机就会在服务器甲上启动,原理如图2-20所示。类似这种快速启动策略实现起来比较容易,效果也能满足大多数场景。
最优启动,同样地平台也会对服务器进行排序,但是这次排序除了考虑剩余资源,也会考虑已用资源。当虚拟机请求资源准备启动时,平台根据剩余资源 选择一组可用的服务器,然后再计算出这个虚拟机在这些服务器上运行的话,单个服务器的资源百分比是否超过预设阈值,然后它会选择一个资源百分比变化最小的服务器上启动虚拟机,原理如图2-21所示。最优启动在实现时,往往会结合运行时策略进行调度,尽量减少虚拟机或者服务器的后期运行时调度。
(www.xing528.com)
图2-20 快速启动
图2-21 最优启动
相关链接
启动排队
在启动策略中为减少“启动风暴”的发生,我们往往会引入排队机制。每台服务器会根据其当时负载状况选择一定时间窗口内可以允许多少台虚拟机启动,待这些虚拟机启动完成对硬盘和CPU的负载降低后,再启动下一批虚拟机。在一个监控机制较完善的平台下,排队机制中的变量(队列长度、窗口时间等)可以根据服务器状态进行动态调整。
(资料来源:https://community.redhat.com/blog/2014/11/smart-vm-schedulingin-ovirt-cluster)
运行时策略可以从很多角度进行设计,比如服务器利用率、电源能耗、用户负载等,常用的有两种:平均分布和低能耗。
平均分布,即要求所有服务器上的负载(虚拟机数目、资源用度)尽量相同,对于负载过高的服务器就会迁移其上的某些虚拟机至其他负载较低的服务器。这样做的目的是降低局部负载,保持虚拟机所处环境的平等。
低能耗,这种策略有两种实现,第一种要求所有虚拟机运行所占用的服务器数目尽可能少。它先将虚拟机从多台服务器上集中迁移到某些台服务器,然后再 将其他服务器关机以达到省电的目的。第二种则不要求服务器关机,但是会让闲置的虚拟机释放CPU、内存资源,它通过定期检测桌面连接或应用连接,挂起较长时间无连接的虚拟机。在私有云桌面环境中,第二种实现应用比较广泛。
相关链接
虚拟机亲和组
虚拟机亲和组即是按虚拟机应用或者关系将其分组,同一组的虚拟机尽量在同一台服务器中运行或者往同一台服务器迁移。应用环境相似的虚拟机会有很多相同的内存页,那么将它们保持在同一台服务器上运行就会很大程度上地节约资源消耗。集群架构的业务虚拟机有时也需要在同一亲和组中,比如负载均衡的Web服务器、分布式计算服务器等。
(资料来源:https://www.ovirt.org/develop/release-management/features/sla/vmaffinity)
弹性伸缩
弹性伸缩是“云”化的重点之一,主要功能是在基础设施资源固定的情况下,平台可根据用户应用程序的需求对其在用资源进行自动扩充或回收,其实现包括Amazon简单/分步扩展策略、阿里云的弹性伸缩服务等,但这不代表它仅适用于公有云。一般来说,三大主要资源都可以进行弹性伸缩,但它们落实到具体对象上时则主要以虚拟机实例(或者vCPU)数量、容器实例数量、网络质量、存储读写质量等为单位(vCPU、内存热插拔方式的伸缩目前由于操作系统支持受限,所以应用极少),可应用的场景主要有Web服务、分布式计算、存储服务等依托LB(Load Balance,负载均衡)与HA的集群服务(关于LB/HA的技术选型可参考第10章相关内容)。
以应用较多的Web服务为例,它的典型实现如图2-22所示。
图2-22 典型W eb集群服务实现
当Web服务网关收到请求以后,它会从LB集群中选择一个Web服务器响应服务,此Web服务器将与HA的数据库服务交互以后再返回信息给用户。如果用户请求过多,每个Web服务器的资源用度超过上限阈值一定时间时,平台就需要新建一台Web服务器并将其注册到LB集群中,如此一来新的请求便会被引导至新加入的Web服务器上,从而使得集群服务处理能力得以提高;反之,当多数服务器的资源用度低于下限阈值超过一定时间时,平台则会从LB集群中移除一台Web服务器以节省资源占用。
这个过程中的资源用度检测、阈值设定、Web服务器数量变化、LB服务器的注册与注销,即是由弹性伸缩服务所提供。
完善的弹性伸缩系统对于监测准确度、阈值选择与设定、阈强度(即高于或低于阈值的持续时间)、响应时间(即伸缩条件被触发后,Web服务器创建/移除、注册/注销过程消耗的总时间)、可伸缩集群类型(Web服务、数据库服务等)、防火墙(有效阻挡攻击流量)等方面都有一定要求。以阈值选择与设定为例,在实现时多以服务器即时并发量、资源消耗等综合考量,如果我们仅仅将指标设置为CPU用度,且阈值设置不合理的话,就可能发生如下现象:已知单位时间内用户请求数一定,那么当一个已经扩展的LB集群整体资源用度低于缩减阈值时,则其中一台Web服务器会被移除,用户请求被单台服务器全部接收导致其CPU利用率上升,如果此时扩展阈值过小系统则会再次向LB集群中添加一台服务器使得CPU利用率再次下降,最后重复前面的步骤导致震荡发生,如图2-23所示。
如果读者对此部分设计有兴趣可适当阅读自动化相关书籍,比如《线性系统理论》《现代控制系统》《自动控制原理》等,虽然是面向电子电气专业人员,但对IT从业者也颇具参考价值。
图2-23 典型Web集群服务实现
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。