虚拟系统模式(VSP)模型将云工作负载定义为中间件映像的拓扑。 VSP中间件工作负载拓扑可以具有一个或多个虚拟映像,这些映像称为部分。 工作负载模型中的每个部分都可以配置为静态扩展。 在部署时,IBM Pure Application System(以下称为PureApplication System)将基于部件上的缩放设置创建由多个虚拟机(VSP实例VM节点)组成的VSP实例。 该VSP模型不支持基于缩放政策自动缩放。
缩略语
VSP :虚拟系统模式 VAP :虚拟应用程序模式 VM :虚拟机
本文介绍了如何构建虚拟应用程序模式(VAP)模式类型,该类型用作扩展管理器,以便根据用户定义的策略动态添加和删除VSP实例VM节点。 本文假定您知道如何使用VAP插件开发工具包(VAP PDK)来构建VAP模式类型和插件,并且您熟悉VAP缩放框架。 有关VAP伸缩框架的更多信息,请参阅IBM PureApplication System中虚拟应用程序模式的可伸缩性和弹性 。
创建VAP模式类型以自动缩放VSP实例
以下各节说明如何创建“ VSP Scaling Manager” VAP模式类型。 此VAP模式类型充当管理器,并驱动VSP实例VM节点的自动缩放。 该技术利用了VAP监视和策略框架以及VSP Clone API。 构建此模式类型涉及以下步骤:
创建VAP应用程序模型元数据以捕获VSP实例详细信息。 创建策略对象以定义扩展策略。 创建拓扑模板以将应用程序模型转换为拓扑文档。 创建监视元模型和监视脚本以监视VSP实例。 创建VM节点扩展脚本的VSP实例。
用例
在本文中,我们将使用WebSphere集群VSP作为自动扩展的目标VSP。 如图1所示,WebSphere集群VSP由一个Deployment Manager部分,一个定制节点部分和一个IBM HTTP Server部分组成。 在以下部分中,您将看到如何根据系统的CPU使用量自动缩放自定义节点部分。 您可以使用此技术基于任何用户定义的缩放指标来缩放任何VSP零件。
图1. WebSphere集群VSP
步骤1:创建VAP应用程序模型元数据
要扩展VSP实例的VM节点,您需要以下用户输入:
VSP实例名称 VSP节点部件名称 访问正在运行的实例所需的用户凭据 执行VSP命令行API(部署程序命令行API)所需的用户凭据
需要VSP实例名称和VSP节点部件名称才能唯一标识要缩放的资产。 在我们的WebSphere集群VSP用例中,VSP节点部件名称的值是定制节点,而VSP实例名称的值是已部署的WebSphere集群VSP实例的实例名称。 需要使用实例用户凭据才能在要扩展的VM上执行监视脚本(使用ssh)。 需要运行部署者用户凭据才能运行API以根据监视的值添加或删除VM。
您可以使用VAP组件对象属性从用户那里获得所需的输入。 使用VAP应用程序模型元数据对组件对象属性进行建模。 清单1显示了应用程序模型元数据。 图2显示了虚拟应用程序构建器中显示的这些属性。
清单1. VSP Scaling Manager属性元模型(metadata.json)
{
"id": "vsyscloning",
"type": "component",
"label": "VSys Scaling Manager",
"description": "Example for cloning a virtual system",
"image": "appmodel\/images\/demoapp.png",
"thumbnail": "appmodel\/images\/thumbnail\/demoappl.png",
"attributes": [
{
"id": "CLONENODE",
"type": "string",
"required": true,
"label": "Virtual System Node",
},
{
"id": "CLONEVSYS",
"type": "string",
"required": true,
"label": "Virtual System Instance Name",
},
{
"id": "VSYSPASS",
"type": "string",
"required": true,
"label": "Virtual System password",
"displayType": "password"
},
{
"id": "DEPHOST",
"type": "string",
"required": true,
"label": "Deployer Host Name",
},
{
"id": "DEPUSER",
"type": "string",
"required": true,
"label": "Deployer User Id",
},
{
"id": "DEPPASS",
"type": "string",
"required": true,
"label": "Deployer password",
"displayType": "password"
}
]
}
图2. VSP Scaling Manager属性
步骤2:创建策略对象以定义扩展策略
您将使用VAP策略框架创建VSP自动扩展策略。 VAP策略框架使您可以使用VAP应用程序模型元数据定义策略对象。 有关如何使用VAP应用程序模型元数据定义策略的更多详细信息,请参阅IBM PureApplication System中虚拟应用程序模式的可伸缩性和弹性 。
清单2显示了基于CPU的扩展的策略对象定义。 图3显示了虚拟应用程序构建器中显示的策略。 使用图3所示的策略界面,用户可以创建一个缩放策略,以基于VM CPU使用率来缩放VSP实例VM节点。 默认策略定义(如图3所示)指示系统在CPU使用率大于80%时放大,而在CPU使用率小于10%时缩小。
在我们的WebSphere集群VSP用例中,如果所有定制节点VM的CPU使用率大于80%,则此缩放策略将放大定制节点VM。 如果所有自定义节点VM的CPU使用率小于10%,则按比例缩小。
清单2. VSP Scaling Manager CPU扩展策略对象元模型(metadata.json)
{
"id": "ScalingPolicyofVSys",
"label": "VSys Scaling Policy",
"type": "policy",
"applicableTo": [
"vsyscloning"
],
"thumbnail": "appmodel/images/thumbnail/ClusterPolicy.png",
"image": "appmodel/images/ClusterPolicy.png",
"description": "VSys scaling policy",
"groups": [
{
"category":"Scaling Type",
"id":"CPUVsys",
"label":"CPU Based",
"defaultValue":true,
"attributes":[
"cpuVsys",
"scaleInstanceRange1",
"triggerTime1",
...
],
}
],
"attributes": [
{
"id": "triggerTime1",
"label": "Minimum time (sec) to trigger add/remove",
"type": "number",
"max": 1800,
"min": 30,
"required": true,
"sampleValue": 120,
...
},
{
"id": "scaleInstanceRange1",
"label": "Instance number range of scaling in/out",
"type": "range",
"min": 1,
"max": 10,
"required": true,
"sampleValue": [
1,
10
],
...
},
{
"id":"cpuVsys",
"label":"Scaling in/out when average CPU usage of clustered members is out
of threshold range(#)",
"type":"range",
"displayType": "percentage",
"required":true,
"max":100,
"min":1,
"sampleValue":[
10,
80
],
...
}
]
}
图3. VSP Scaling Manager CPU扩展策略
步骤3:创建拓扑模板以将应用程序模型转换为拓扑文档
PureApplication System IaaS层使用拓扑文档创建VAP实例。 拓扑文档是根据应用程序模型构建的。 该模型是在使用虚拟应用程序构建器创建VAP时由PureApplication System在后台创建的。 您将使用清单3中所示的速度模板将“ VSP Scaling Manager” VAP应用程序模型转换为拓扑文档。 清单3中显示的模板使用以下参数值创建一个名为“ clone”的角色:VSP实例详细信息(通过步骤1捕获)和策略定义(通过步骤2捕获)。 参数值将在“ VSP Scaling Manager” VAP生命周期脚本中使用,以驱动VSP实例缩放。
清单3. VSP Scaling Manager拓扑模板(vsyscloning.vm)
{
#set($spattrs = $provider.getPolicyAttributes($component,
"ScalingPolicyofVSys"))
"vm-templates": [
{
"persistent":false,
"name": "${prefix}-clone",
"roles": [
{
"parms": {
"DEPHOST":"$attributes.DEPHOST",
"DEPUSER":"$attributes.DEPUSER",
"DEPPASS":"$attributes.DEPPASS",
"CLONENODE":"$attributes.CLONENODE",
"CLONEVSYS":"$attributes.CLONEVSYS",
"VSYSPASS":"$attributes.VSYSPASS",
#if_value( $spattrs, "scaleInstanceRange1", '"MININST":
$spattrs.scaleInstanceRange1.get(0),')
#if_value( $spattrs, "scaleInstanceRange1", '"MAXINST":
$spattrs.scaleInstanceRange1.get(1),')
#if_value( $spattrs, "cpuVsys", '"MINCPU": $spattrs.cpuVsys.get(0),')
#if_value( $spattrs, "cpuVsys", '"MAXCPU": $spattrs.cpuVsys.get(1),')
#if_value( $spattrs, "triggerTime1", '"triggerTime":
$spattrs.triggerTime1,')
"isCloned": "FALSE"
},
"type": "SClone",
"name": "clone"
}
],
"packages": ["SClone"]
}
]
}
步骤4:创建监视元模型和脚本
在此步骤中,您将创建必要的资产以监视VSP实例VM节点。 根据监视的值,您将触发缩放策略中定义的VSP实例VM节点缩放。 您将使用VAP监视框架监视VSP实例VM节点。 VAP监视框架触发监视的指标的收集并在VAP控制台中显示监视的指标。 为此,VAP监视器框架希望VAP插件提供以下功能:
用于定义度量标准数据的度量标准元数据(清单4显示了CPU使用率度量标准的度量标准元数据)。 用于从VSP实例VM节点收集指标的脚本(请参阅提供的代码示例中的cpuutil.sh)。 指标元数据和收集脚本注册代码。 清单5显示了将资产注册到框架的maestro API调用。 指标显示元数据以图形方式显示收集的指标。 清单6显示了用于显示VSP实例VM节点CPU指标的显示元数据。
清单4. VSP CPU指标的指标元数据(cpuvsyscollector.json)
{
"version":1,
"update_interval": 60,
"category":[
"cpuvsys"
],
"metadata":[
{
"cpuvsys":{
"update_interval":60,
"metrics":[
{
"attribute_name":"cpuVsys",
"metric_name":"cpuVsys",
"metric_type":"COUNTER"
}
]
}
}
]
}
清单5.注册指标收集器(configure.py)
#Register cpu vsys collector
maestro.monitorAgent.register('{\
"node":"%s",\
"role":"%s",\
"collector":"com.ibm.maestro.monitor.collector.script",\
"config":{\
"metafile":"/home/virtuser/collectors/cpuvsyscollector.json",\
"executable":"/home/virtuser/collectors/cpuutil.sh",\
"arguments":"%s",\
"validRC":"0",\
"workdir":"/tmp",\
"timeout":"120"}}' % (nodeName,roleName,arguments));
清单6.监控器指标显示元数据(monitoring_ui.json)
[
{
"version":2,
"category":"cpuvsys",
"label":"CPU Usage",
"displayRoles": ["SClone"],
"displays":[
{
"label":"CPU Usage of Virtual System Instance Node",
"monitorType":"HistoricalNumber",
"chartType":"Lines",
"metrics":[
{
"attributeName":"cpuVsys",
"label":"Used Percentage"
}
]
}
]
}
]
缩放和监视脚本
在本节中,我们将深入介绍监视和扩展脚本(请参阅提供的代码示例中的cpuutil.sh)。 该脚本执行以下任务:
该脚本检索VSP实例VM节点的CPU利用率。 在我们的用例中,脚本获取WebSphere VSP定制节点实例的CPU利用率。 如果检索到的值大于策略中指定的值,则将创建新的VSP实例VM节点,直到达到策略中定义的最大值。 在我们的用例中,如果定制节点实例的CPU使用率大于80,那么将创建新的WebSphere VSP定制节点,直到存在10个这样的节点。 如果检索到的值小于策略中指定的值,则将删除除策略中指定的最小数目以外的所有节点。 在我们使用的情况下,如果自定义节点实例CPU使用率低于10,所有除两个WebSphere VSP定制节点,将被删除。 最后,脚本将度量标准数据返回到VAP监视框架,以显示在部署控制台中。
该脚本由监视框架定期触发。 触发间隔基于监视器元数据中定义的update_interval参数值(请参见清单4 )。 在此脚本中,我们实质上是通过短接VAP监视框架来触发VSP实例VM节点上的扩展。 在下一节中,您将看到如何使用VSP克隆和删除API添加或删除VSP实例VM节点。
步骤5:创建VSP实例VM节点扩展脚本
您将使用Python脚本添加或删除VSP实例VM节点。 Python脚本由监视脚本cpuutil.sh使用PureApplication System部署程序命令行实用程序触发。 清单7和清单8显示了添加VSP实例VM节点并删除VSP实例VM节点的Python脚本。 这些脚本使用VSP虚拟系统对象,虚拟机对象及其克隆。 他们还删除了用于放大和缩小VSP实例VM节点的方法。
清单7.添加新的VSP部件VM的脚本
#This python script is used to clone one new node (of type cloneNode)
#belonging to Vsys instance cloneVSys.
#No new node will be created if max is reached.
import os
import sys
cloneNode=sys.argv[1]
cloneVSys=sys.argv[2]
max=sys.argv[3]
#function to check if the maximum clone limit is reached
def isMax(max, system, cloneNode):
current=0
vms=system.virtualmachines
for vm in vms:
vmpartname= vm.patternpart.partCaption
vmstatus = vm.currentstatus
if(vmpartname == cloneNode and vmstatus == "RM01006"):
current+=1
if(current < max):
return "False"
else:
return "True"
#Get the input virtual system instance.
allsystems=deployer.virtualsystems.list({'name':cloneVSys})
found='False'
for system in allsystems:
vsysname=system.name
vsysstatus = system.currentstatus
print "SysName:" + vsysname + " SysStatus:" + vsysstatus
if(vsysstatus == "RM01006" or vsysstatus == "RM01070"):
#Get all the running virtual machines
vms=system.virtualmachines
for vm in vms:
vmpartname= vm.patternpart.partCaption
vmstatus = vm.currentstatus
print "VMName:" + vmpartname + " VMStatus:" + vmstatus
if(vmpartname == cloneNode and vmstatus == "RM01006"):
found='True'
#If max limit not reached then clone.
isMaximum = isMax(int(max), system, cloneNode)
if(isMaximum == 'False'):
print "Clone started"
vm.clone()
break
if(found=='True'):
break
清单8.删除VSP部件VM的脚本
#This python script is used to release all the nodes (of type cloneNode)
#belonging to Vsys instance cloneVSys.
#No nodes are released if min specified is reached.
import os
import sys
cloneNode=sys.argv[1]
cloneVSys=sys.argv[2]
min=int(sys.argv[3])
#Check if minimum number of nodes reached.
def isMin(min, system, cloneNode):
current=0
vms=system.virtualmachines
for vm in vms:
vmpartname= vm.patternpart.partCaption
vmstatus = vm.currentstatus
if(vmpartname == cloneNode and vmstatus == "RM01006"):
current+=1
if(current > min):
return "False"
else:
return "True"
#Get the input virtual system instance.
allsystems=deployer.virtualsystems.list({'name':cloneVSys})
found='False'
for system in allsystems:
vsysname=system.name
vsysstatus = system.currentstatus
print "SysName:" + vsysname + " SysStatus:" + vsysstatus
if(vsysstatus == "RM01006" or vsysstatus == "RM01070"):
#Get all the running virtual machines
vms=system.virtualmachines
for vm in vms:
vmpartname= vm.patternpart.partCaption
vmstatus = vm.currentstatus
print "VMName:" + vmpartname + " VMStatus:" + vmstatus
if(vmpartname == cloneNode and vmstatus == "RM01006"):
found='True'
#Delete till minimum specified is reached.
isMinimum = isMin(int(min), system, cloneNode)
if(isMinimum == 'True'):
break
else:
print "delete started"
vm.delete()
if(found=='True'):
break
在以上五个步骤中,您基本上执行了以下操作:
使用VAP策略对象定义用户定义的扩展策略。 使用VAP监视框架触发VSP实例VM监视,并基于监视的指标触发VSP实例VM的动态自动扩展。 使用VSP命令API提供的克隆和删除方法来创建新的VSP实例VM节点或删除现有的VSP实例VM节点。
测试用例
在本部分中,您将看到如何测试WebSphere Cluster定制节点扩展用例。 为了测试用例,首先需要创建WebSphere Cluster VSP的实例。 图4显示了WebSphere Cluster VSP实例。 您还必须创建VAP模式类型来驱动VSP缩放。 本文随附的示例代码具有VAP模式类型(vsysscalingmgr),您可以将其导入PureApplication System环境中以驱动VSP扩展。 导入后,您可以使用虚拟应用程序构建器创建新的VAP并部署新创建的VAP。
图4. WebSphere Cluster VSP实例
图5显示了虚拟应用程序构建器中的WebSphere Cluster Scaling Manager VAP。
图5. WebSphere Cluster Scaling Manager模式
部署模式后,可以使用以下步骤模拟缩放:
登录到Deployment Manager控制台。 在现有节点上创建新服务器,然后在该节点上执行完全重新同步或执行某些其他操作,从而增加自定义节点上的CPU利用率。 或者,您可以通过取消注释监视脚本cpuutil.sh中清单9中所示的行的注释来对VSP实例自定义节点的伸缩进行单元测试。 这将为脚本中的后续任务提供一个虚拟值85作为CPU使用率。 要缩小比例,您可以注释掉未注释的行。
清单9.取消注释的行以测试VSP Scaling Manager模式
cpuval=$(ssh -i $DIR_NAME/key -o StrictHostKeyChecking=no $ADMIN_NAME@$i "top -b -d1 -n2
| grep -i \"Cpu(s)\" | cut -d ',' -f1 | awk '{print \$2}' | cut -d '%' -f1 | sed -n 2p")
#To unit test clone un-comment the following line. After cloning to unit-test delete
#comment this line.
#cpuval=85
#end unit test un-comment
echo "cpu value is "$cpuval >> /home/virtuser/collectors/scaling.log
图6显示了VAP控制台中的监视用户界面。 这将显示VSP实例节点自定义节点的CPU使用率。 请注意,当使用清单9中描述的方法对模式类型进行单元测试时,图形会飙升至85%,然后回落至2%。
图6.虚拟系统实例节点的CPU使用率
图7显示了自定义节点实例的添加。 当所有定制节点实例的CPU使用率超过80%时,将创建新的WebSphere VSP定制节点,直到达到最多10个节点为止。 当所有自定义节点实例的CPU使用率降至10%以下时,将删除除两个自定义节点实例之外的所有实例。
图7. WebSphere VSP定制节点缩放
结论
在本文中,您学习了如何创建VAP模式类型以驱动用户定义的VAP实例VM节点的自动缩放。 使用此技术,您可以使用用户定义的扩展策略自动扩展VSP实例VM节点,而对VSP的更改很少或没有更改。 此外,您可以使用VAP仪表板监视VSP实例指标。 该技术的缺点是要求用户输入VSP实例VM的用户凭据,并且只有有权使用VSP实例的PureApplication System用户才能部署VAP Scaling Manager实例。 否则,部署者CLI将无权添加或删除节点。
翻译自: https://www.ibm.com/developerworks/cloud/library/cl-ps-aim1310-autoscaling/index.html
相关资源:专家系统CLips案例源码