考量计算资源的标准,不止于物理服务器的性能、安全、稳定等因素,还有计算节点组成的集群所具有的能力,如负载均衡、高可用等。接下来,笔者将根据硬件、软件配置并结合私有云的特性进行计算资源服务器的选择,以期达到合理配置计算资源的目的。
服务器硬件
通常情况下,CPU、内存是决定服务器能够承担多少负载的决定性因素,而存储、NUMA等扩展属性保证着服务器运行的功能性和稳定性。
多数厂商在部署私有云时,往往按照CPU逻辑核总数和虚拟机总核数按1∶X来分配,当虚拟机有卡顿或者其他情况出现时,再调整比例。而这一点在笔者看来是很不好的习惯,因为它忽略了一些因素,比如CPU最大主频、非NUMA核间数据拷贝代价、虚拟机运行程序时的保证峰值负载等。在此推荐使用一个经验公式来计算:
图2-11 PC服务器一般架构
PC服务器的一般架构如图2-11所示。其中,sockets、cores、frequency分别代表服务器的物理CPU数量、单CPU线程数、最大主频,当超线程HT打开(为真)时获得20%的提升,否则不提升,cap代表服务器的能力。读者可以访问Intel ARK网站(或手机App)查询具体的CPU参数。
假设一个Windows 7桌面普通办公流畅的最小负载为2.0 GHz,使用双路Intel E5-2630 v3,则cap为61.44GHz,即我们这台服务器可以保障30台单核Windows 7桌面流畅运行。由于桌面应用程序往往可以利用多核特性,所以我们会考虑分配其双核甚至四核,同时其单核负载下降,亦可以看做2×1GHz,加之峰值负载下的机器并发量少,我们可以再适当增加虚拟机数量。在选配CPU时,我们要根据实际负载、桌面应用、成本等因素综合考量,尽量减少CPU性能的不足或者过剩。
NUMA技术和主板CPU省电选项(C1E等)同样也会影响服务器CPU性能。NUMA技术会大幅提高CPU间通信,换句话说,当有较多进程存在时,利用NUMA可以减少进程在CPU之间切换的时间,一般建议打开。对于高I/O、低CPU利用率的应用,主板使用C1E或者更深度的电源管理选项(C1/C3/C6)时会较大程度地影响其性能。目前在KVM中,缺少C1E实时开关的选项,所以建议在BIOS设置中关闭此项。
内存技术也是影响虚拟机的重要因素,目前在KVM中可以使用内存气球、巨页、KSM等技术提高内存使用效率。虽然内存可以超分(overcommit),但我们仍然要保证物理内存不小于所有虚拟机分配内存,因为内存不足导致的问题一般比较严重,对于服务器来说甚然。另外,当内存充足时建议关闭swap分区,因为在数据拷贝期间发生交换将带来比较严重的性能损失。
计算节点的硬盘配置可分为系统盘和数据盘,系统盘即运行虚拟化节点所需操作系统的硬盘,数据盘即用于本地存储或者共享存储的硬盘。当采用共享存储时,可以省去服务器数据盘配置。
扩展插槽中可以添加RAID控制器、JBOD控制器、显卡、网卡等高速设备。而USB控制器则用于加密狗、U-Key透传等功能。这两项外设扩展在特定的服务器中可以进行额外扩展。
操作系统
计算资源的操作系统首先要做到效率高、稳定性好、兼容性好,其次是无状态、易维护等。
在效率上我们能进行很多比较系统的优化,比较通用的有进程调度、驱动程序优化、I/O优化等。通用的优化做好以后就可能需要对具体硬件进行针对性的驱动、调度优化。通用的优化是可移植的,而针对具体硬件的优化难以保证,所以我们在这两方面应有所取舍。(www.xing528.com)
稳定性是考量系统的重要标准之一,影响它的因素或是系统本身,或是软件,或是硬件。一般私有云厂商在进行实施之前,如有可能会对服务器进行连续中低压测试,确保其稳定性后再进行软件的部署。而服务器硬件兼容性问题伴随着硬件厂商和操作系统厂商(尤其RedHat)的紧密合作,它的出现情况已经比较少了。但是一旦出现兼容性问题,一般都比较难以排查,往往需要硬件厂商提供协助。
所谓无状态操作系统,即我们需要这个计算节点异常断电重启后无须人工干预继续提供服务。它提供了一种类似还原模式的操作系统,降低了系统损坏后难以修复的概率同时减少了运维负担。其实现方式比较多,包括DOM盘、PXE、SQUASHFS等。
至于易维护性的对象,主要针对服务器的状态监视、系统软件修复/升级。
相关链接
操作系统的选择
目前主流云平台多基于CentOS/RHEL或者Ubuntu系统。其主要原因就是其生命周期与知识库——CentOS每个大版本是10年左右,Ubuntu/Debian为5年,SUSE为10+3年(期限虽长但对应云平台知识库较少)。当然,影响我们对服务器选择的因素中,软件也占据大部分,比如图2-12就是虚拟化相关软件的通用架构,其中哪部分使用或高或低配置的服务器甚至虚拟机作服务器还是要调研一番更为妥当。
(资料来源:https://zh.wikipedia.org/wiki/Linux发行版列表。)
软件服务
在分布式架构中,不同的软件服务一般部署在不同的服务器上,这样就会使单独的软件服务模块更具可维护性和部分性能上的优势。以IaaS为例,常用的软件服务模块如图2-12所示。
图2-12 开源云平台虚拟化相关功能软件架构
其中,我们重点考虑的软件模块是模拟器部分(关于开源的x86模拟器QEMU读者可以参考第4章内容)。
首先,模拟器会对计算节点的CPU特征有一定要求。以虚拟机迁移为例,现在的虚拟化实现不能进行异构迁移,即虚拟机vCPU不能在迁移后改变其CPU特征,这就要求集群中的计算节点使用统一的CPU特征组启动模拟器,并且所有计算节点的CPU至少属于同一架构。其次,模拟器会对计算节点的CPU性能有一定要求。私有云中常常会有重点业务虚拟机,它们对CPU性能、内存等计算资源有较高要求,此时我们就需要赋予较高资源优先级,保证它们在资源充裕且状态良好的计算节点上运行。然后,如果虚拟机需要使用常驻的外部设备,那么我们就需要进行设备透传或重定向。而现有的模拟器实现不能在设备已与虚拟机连接的情况下进行迁移,这就只能将此虚拟机在固定的计算节点上运行,从而要求此计算节点需要拥有数量合适的外部设备或接口。最后,某些模拟器的性能会受主板设置的影响,比如CPU电源管理,这就要求计算节点需要针对具体的模拟器类型作出相应设置,保证模拟器性能最优。
需要注意的是集群中的网络组件,以Neutron为例,其OVS节点在网络数据包较多的情况下,会对本地CPU造成不小的压力从而引起网络丢包、延迟现象,而针对这点常用的做法是使用单独的网络控制节点和SDN交换机以分离控制层与数据层,从而保障网络性能。
至于容器,它运行在Linux服务器中时一般不会对CPU有特殊要求,只要保证核数与主频合适即可(由于容器实例默认使用全部CPU核,需要注意防护以防滥用)。而集群组件,比如Nova、Glance、vdsm等,它们对计算资源要求也比较少。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。