VMware vCenter 资源池
VMware vCenter 资源池
1.简介
资源池是灵活管理资源的逻辑抽象。资源池可以分组为层次结构,用于对可用的 CPU 和内存资源按层次结构进行分区。
每台独立主机和每个DRS 群集都具有一个(不可见的)根资源池,此资源池对该主机或群集的资源进行分组。根资源池之所以不显示,是因为主机(或群集)与根资源池的资源总是相同的。
用户可以创建根资源池的子资源池,也可以创建用户创建的任何子资源池的子资源池。每个子资源池都拥有部分父级资源,然而子资源池也可以具有各自的子资源池层次结构,每个层次结构代表更小部分的计算容量。
一个资源池可包含多个子资源池和/或虚拟机。您可以创建共享资源的层次结构。处于较高级别的资源池称为父资源池。处于同一级别的资源池和虚拟机称为同级。群集本身表示根资源池。如果不创建子资源池,则只存在根资源池。
资源池(Resource Pool, RP)有2种,CPU资源池和Memory资源池。其概念还是很容易理解的。
下图截取自官方的《vSphere Resource Management Guide》第36页
图1:资源池
其中1台主机有6GHz CPU资源和3GB可用内存资源。并且创建了2个资源池,RP-QA获得2/3的资源,也就是4GHz CPU资源和2GB内存资源。RP-Marketing获得剩下的1/3的资源。
一个集群(Cluster)的资源池包含集群中所有主机(Host)的资源总和。比如一个2主机的集群,每个主机都有16GHz CPU和16GB内存,那么这个集群的资源总和就是32GHz的CPU和32GB的内存。在这个集群中创建的资源池就从这个总的可用资源中分配。
集群的可用资源总是小于集群的总资源,这是因为每台主机都会占用一部分CPU和内存资源,保留给自己的Hypervisor和COS用(如果是ESX的话)。
虽然集群资源池是所有主机资源的总和,但是并不意味着某一VM可以使用超过某一主机的资源。比如,2台16GB内存的主机组成集群,集群中创建了一个30GB内存的资源池,但是任何单台VM都不能使用超过16GB pRAM的,因为VM不能跨主机使用资源,VM可用到的资源还受到单台主机物理资源上限的影响。
同VM一样,资源池也有Shares, Reservation和Limit这3个配置项。(见下图)
图2:编辑资源池属性
【Limit】
RP的Limit和VM的Limit类似,不同的就是这个limit是RP中所有VM可用物理资源的上限值。
虽然Limit不会限制VM的创建,但是它限定了可用物理资源,影响了RP中运行中VM的性能。
【Shares】
资源池的资源通常通过份额来分配。有3种预设的份额分配方式,High,Normal和Low,比重分别为4:2:1。反映在Shares数字上则如下表
份额(Shares)类型 |
High |
Normal |
Low |
比重 |
4 |
2 |
1 |
CPU |
8000 |
4000 |
2000 |
Memory |
327680 |
163840 |
81920 |
如果各一个RP的% |
57.1% |
28.6% |
14.3% |
比如说一个集群有5个资源池,1个High,2个Normal,2个Low,那么High的RP可以获得4/(4+2*2+1*2)=40%的资源,Normal的RP各可以获得20%,Low的RP各可以获得10%资源。
资源池下可以建子资源池。资源按份额的比例分配。
看图很容易理解。
图3:资源池与子资源池
下面通过几个例子来说明问题。
例子中有2个RP,一个叫IT-RP,另一个叫QA-RP。有3台VM,其中Test01分配了2个vCPU和2GB内存;虚机thick-dp和thin-dp都只有1个vCPU和1GB内存。
(1) CPU资源的份额(shares)和vCPU个数有关,Normal类型下,每个vCPU 1000份额。
例如:同一个RP下的VM,都设了normal,1个vCPU的thick-dp和thin-dp都只占share 1000,2个vCPU的Test01占share 2000
图4:例子1-CPU
Worst case allocation是最坏情况下该VM会占用的资源数量,这个最坏情况是指VM,而不是RP,换一句话说就是VM在运行一个耗CPU的程序,已经达到了100% CPU占有率。这个值是根据当前资源状况动态计算出来的。我的例子中因为没有争用,所以耗CPU的VM可以跑满2个vCPU,我的host用的是XEON E5405,是四核且每核2GHz,因此2个vCPU可以用足4000MHz,2个vCPU的thick-dp可以用足2000MHz。thin-dp这台VM因为设置了CPU Limt为1000MHz,因此它的Worst Case Allocation是1000MHz。
内存资源的份额和VM的配置内存大小(configured memory size)有关。Normal类型下,每1MB的内存占10份额。也就是说每1GB(1024MB)就是10240份额。
例如:同一个RP下的VM,都设了normal,1GB内存的VM的份额是10240,2GB内存的Test01虚机就有20480份额。
图5:例子1-Memory
内存的Worst Case Allocation和CPU的类似,是指运行一个耗内存的程序时VM最多能占用的pRAM的数量。大家会发现这个最坏情况占用比配置内存/内存上限还要大一点,多的那部分就是用于memory overhead的。memeory overhead的大小和VM被配置了多少个vCPU和多少vRAM有关。
(2) 在cluster根一级的VM和其下的第一层Resource Pool共同分享所有资源。
Normal RP默认份额是4000,单vCPU的VM的Normal份额是1000,2个vCPU的是2000
图6:例子2
所以,如果某服务器特别重要,需要特别多的份额,那就直接放在cluster底下,可以不用放进任何RP
Normal类型的资源池,其内存份额是163840,CPU份额是4000,相当于一台配置了4vCPU和16GB内存的VM。(为便于记忆这么类比)
(3) 将VM从某一个RP移走,份额总数会减少,意味着每一单位份额的资源增加了;VM移入某个RP,总份额会增加,意味着每一单位份额的资源减少了。
图7:例子3-移除VM对资源分配的影响
这个例子中,总份额数从8000下降到了6000,原先有16GHz CPU资源,每一份是2MHz,现在增加到了2.67MHz。因此每个RP的总资源也增加了。
VM移动到另一个RP的时候,其Limit和Reservation值保留。其份额如果是以Normal, High, Low表示的话,将在目的RP中占有相应的比例。并且影响到目的RP的总份额数。下图例子中,Test01的加入导致该RP中总份额由2000增加到了4000,因此单位份额的CPU资源下降了一半,原先每台VM的可用资源比例也从50%下降到了25%.
图8:例子3-加入VM对资源分配的影响
重要!强调一点,份额(Shares)必须是在有资源争用(Contention)的情况下才起作用。
千万不要被图1所迷惑了,错以为6GHz的CPU就应该按照Normal比Low的2:1的比例分配给2个RP,其中1个4GHz,另外一个2GHz。错! 大错特错!真实的情况是,在没有发生争用的时候,不管其中哪1台VM(例如VM-Marketing1)都可以用5GHz甚至更多的CPU资源。
【Reservation】
RP的reservation不是决定其中的VM能用多少CPU/内存资源,而是用来分配给VM的Reservation用的。如果RP的可用保留(Available Reservation)不够VM Reservation需要的量,VM将不能被启动,或者正在运行中的VM不能被移动到该RP中。这种检查叫做准入控制(Admission Control)。
比如资源池中可用内存保留是1500MB。位于该RP中的VM1和VM2的内存保留都是1024MB,当我们启动 VM1的时候,可以正常启动。但是再启动VM时,剩下的可用内存保留只有476MB,不够1024MB,于是VM2无法启动,用户将收到 Insufficient Memory Resource的报错。
资源池有2种类型,Fixed和Expandable。在上面的截图中可以看见,CPU和Memory资源都可以勾选Expandable Reservation,默认是勾选的。如果手工去掉这个勾,就可以更改为Fixed。
Fixed类型就是其中的VM的Reservation只能使用自己的Reservation,而Expandable的RP Reservation就是不仅可以使用自己的Reservation,而且当RP中的可用保留(Available Reservation)不够VM用的时候,可以使用父RP中的可用保留。
下图就是将Memory Reservation类型从Fixed改成Expandable后,Available Reservation的变化。
图9:资源保留的类型Fixed和Expandable
VM开机才会有Reservation,关机的时候就把这部分Reservation还回资源池了。
RP Reservation中的内存/CPU资源并非被这个RP独占,而其他RP无法使用。如果某一个RP Reservation中的内存没有被用掉,而其他RP的VM还是可以使用这部分内存的。
举例,Host有3GB内存,完全竞争下RP1获得1GB,RP2获得2GB。RP1设了1GB的Reservation,但是其中没 有VM。RP2中有且仅有一台VM配置了2.5GB内存,运行一个耗内存的程序,那么这个VM可以获得2.5GB的pRAM,其中0.5GB来自RP1, 而无视其Reservation。
但是,增加某个RP的Reservation就减少了其他RP可以获得的Reservation。
还是上例中,Host有3GB内存,RP1 Normal,reservation 1GB,RP2 Low,reservation 0.5GB。那么Host还剩下1.5GB的 Available Reservation。如果RP1和RP2都是expandable的,那么RP1的Available Reservation有2.5GB,RP2的Available Reservation会显示有2GB。此时,增加RP1的Reservation到2GB,你会发现RP1的Available Reservation还是2.5GB,但是RP1的却只有1GB了。
开启一台VM所需要的物理内存,不仅和Memory Reservation有关,也和Memory Overhead有关。当Available Reservation小于开启一台VM所需的需求(等于Memory Reservation和Overhead的和)时,VM就无法启动。
举例,如上图9中,Fixed的时候,可用保留只剩下132MB了,此时启动1台2vCPU,2GB内存,0内存保留的VM,是否能启动呢?答案是不能,因为虽然此VM内存保留设为了0,但是Memory Overhead还需要198MB可用内存保留。因此无法启动。
现在揭晓思考题1的答案:不对。这台VM可以被创建,也可以被运行。虽然这台VM不能跨主机使用资源,也就是它最多可以用到16GB的pRAM,但是别忘记它还有swap,因此,20GB的swap保证了Guest OS的运行。
2.案例
CPU资源池创建示例
2.1 无资源池
假定有一台 ESX/ESXi 主机,提供 6 GHz 的 CPU 和 3 GB 的内存,这些 CPU 和内存必须在Finance部门和 Test 部门间进行共享。这里假定两个部门优先级相同,则无需创建资源池,所有虚拟机共同分享所有CPU资源/内存。假定Finance和Test部门各自只有一 台虚拟机,虚拟机运行不停做正弦运算的脚本CPUBUSY.VBS,则可以通过脚步输出来测试CPU性能:
CPUBUSY.VBS代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Dim goal Dim before Dim x Dim y Dim i goal = 2181818 Do While True before = Timer For i = 0 to goal x = 0.000001 y = sin(x) y = y + 0.00001 Next y = y + 0.01 WScript.Echo "I did three million sines in " & Int(Timer - before + 0.5) & " seconds!" Loop |
从下面的输出可以看出来,两台虚拟机获得的CPU资源基本相同:
让两台虚拟机vCPU利用率都是100%是很有必要的,否则ESX/ESXi CPU喂不饱,就不会发生资源竞争,接下来的测试就得不出有效输出。
2.2 给虚拟机指定运行CPU
右键两台虚拟机,编辑属性,然后选择资源:
2.3 创建资源池
- 在“创建资源池”对话框中,键入 Finance 部门的资源池的名称(例如 Fin_Prod)。
- 将 Fin_Prod的 CPU 份额指定为高。将Finance 部门虚拟机(或多个虚拟机)拖至资源池Fin_Prod。
- 创建第二个资源池 Test_Prod。将 CPU 份额指定为低。将Test部门虚拟机(或多个虚拟机)拖至资源池Test_Prod。
- 单击确定退出。
2.3 测试
为了更好的达到测试结果,在每个虚拟机上运行3次脚本,左边为Finance 部门虚拟机,右边为Test部门虚拟机。可以很明显的看出Finance 部门虚拟机脚本运行时间仅为Test部门虚拟机的四分之一。这是因为CPU 份额指定为高时份额数目为8000,低则只有2000。
将 Fin_Prod的 CPU 份额指定为低,Test_Prod指定为高,则脚本运行时间马上发生了变化,可以说是180°的转变:
在性能界面上更能清晰的看出来两个虚拟机的CPU资源发生的变化:
CPU获得资源基本相同->Finance部门虚拟机运行快->Test部门虚拟机运行快
VMware vCenter 资源池的更多相关文章
- VMware vCenter Server 6.5配置群集功能
虚拟数据中心是一种容器,其中包含用于操作虚拟机的完整功能环境所需要的全部清单对象.可以创建多个数据中心,以实际需求创建 . 群集是一组主机,将主机添加到群集时,主机的资源将成为群集资源的一部分,群集管 ...
- VMware vCenter 6.0 安装及群集配置介绍
一.介绍 VMware vCenter Server 提供了一个可伸缩.可扩展的平台,为虚拟化管理奠定了基础.可集中管理VMware vSphere环境,与其他管理平台相比,极大地提高了 IT 管理员 ...
- VMware vCenter Orchestrator
使用范例: VMware Automation with vCenter Orchestrator http://www.rodmach.com/blog/?p=46 直接从 VSPHERE CLIE ...
- VMware vCenter 6.5 安装及群集配置介绍
一.介绍 VMware vCenter Server 提供了一个可伸缩.可扩展的平台,为虚拟化管理奠定了基础.可集中管理VMware vSphere环境,与其他管理平台相比,极大地提高了 IT 管理员 ...
- VMware vCenter 6.0 安装及群集配置介绍(转载)
转载自http://blog.51cto.com/wzlinux/2094598 一.介绍 VMware vCenter Server 提供了一个可伸缩.可扩展的平台,为虚拟化管理奠定了基础.可集中管 ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- VMware vCenter Server安装图解教程
安装说明: 1.安装VMware vCenter Server的主机操作系统为:Windows Server 2008 R2 2.在Windows Server 2008 R2中需要预先安装好SQL ...
- vmware vcenter orchestrator configuration提示“用户名密码错误或登录失败超过次数被锁定”
首次登录,使用默认用户密码登录vmware/vmware vmware vcenter orchestrator configuration提示"用户名密码错误或登录失败超过次数被锁定&qu ...
- 【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5
在这之前,我们已经对VMware ESXi 5.5进行了整个环境的设计和规划,虽然安装VMware ESXi 5.5在CPU的选型.网络的设计.共享存储的方式.虚拟化资源的需求和安装ESXI的模式等一 ...
随机推荐
- 使用安全rm
rm命令像一把刀子一样,玩不好会伤到自己.不要觉得自己头脑清醒,人总有犯迷糊的时候. 在.bashrc中设置PATH=/home/me/bin/:$PATH 在自己的bin目录下,添加rm脚本mv - ...
- 【总结】java regex 正则表达式 提取数字和去除数字,过滤数字,提取价格
@Test public void test33() { String phoneString = "哈哈,13888889999"; // 提取数字 Pattern patter ...
- Linux下Setuid命令! 转载
Linux下Setuid命令! 转载 在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置. 问题是:用户的信息保存在文件/etc/passwd中,用户的密码保存在文件/etc/sha ...
- 安装和使用solr
下载Solr:wget http://apache.fayea.com/lucene/solr/6.4.1/solr-6.4.1.tgz解压:tar -zxvf solr-6.4.1.tgz bin/ ...
- sudo: add-apt-repository: command not found
错误来啦:sudo: add-apt-repository:command not found 网上解决办法是直接安装工具包 命令:sudo apt-get install python-s ...
- Intellij Idea免费激活方法
填入下面的license server: http://intellij.mandroid.cn/http://idea.imsxm.com/http://idea.iteblog.com/key.p ...
- C语言中 不定义结构体变量求成员大小
所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话 ...
- python ---Pandas时间序列:生成指定范围的日期
引入包 import pandas as pd import numpy as np 1.生成指定范围的日期 print pd.date_range('11/1/2018','11/9/2018') ...
- python selenium 报错unknown error: cannot focus element 解决办法
登录框由于js限制,定位到元素后无法sendkey ,sendky报错如下: selenium.common.exceptions.WebDriverException: Message: unkno ...
- mysqlslap 压力测试工具
[背景] 由于一些不可描述的原因,我要确定一条业务SQL在给定的MySQL环境下的执行效率:比如说200个session同时跑同样一条SQL 我们数据库的吞吐量怎么样? 刚收到这个需求的时候,感觉这个 ...