内容


IBM PureApplication System 中虚拟系统模式实例的自动扩展

创建 System Pattern Scaling Manager 模式类型的技术

Comments

简介

虚拟系统模式 (VSP) 模型将云工作负载定义为一个中间件镜像拓扑。VSP 中间件工作负载拓扑可以有一个或者多个虚拟镜像,即部件。工作负载模型中的每个部件都可配置用于静态扩展。在部署时,IBM Pure Application System(以下简称 PureApplication 系统)将根据部件上的扩展设置创建一个由许多虚拟机(VSP 实例 VM 节点)组成的 VSP 实例。VSP 模型支持基于扩展策略的自动扩展。

本文将介绍如何构建一个虚拟应用程序模式(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。构建这个模式类型涉及到以下步骤:

  1. 创建 VAP 应用程序模型元数据,捕获 VSP 实例的详细信息。
  2. 创建一个策略对象,定义一个扩展策略。
  3. 创建一个拓扑模板,将应用程序模型转化为拓扑文档。
  4. 创建监控元模型和监控脚本来监控 VSP 实例。
  5. 创建 VM 节点扩展脚本的 VSP 实例。

用例

在本文中,我们将使用 WebSphere 集群 VSP 作为自动扩展的目标 VSP。如图 1 所示,WebSphere 集群 VSP 由一个部署管理器 部件、一个自定义节点 部件和一个 IBM HTTP 服务器 部件组成。在接下来的小节中,您将了解如何根据系统 CPU 的使用情况自动扩展自定义节点部件。您可以使用该技术根据任何用户定义的扩展标准对任何 VSP 部件进行扩展。

图 1. WebSphere 集群 VSP
WebSphere 集群 VSP
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 的属性
VSP Scaling Manager 的属性

步骤 2:创建一个用来定义扩展策略的策略对象

您可以使用 VAP 策略框架创建一个 VSP 自动扩展策略。VAP 策略框架允许您使用 VAP 应用程序模型元数据定义一个策略对象。参阅 IBM PureApplication System 虚拟应用模式中的可扩展性和灵活性,获得如何使用 VAP 应用程序模型元数据定义策略的详细信息。

清单 2 显示了基于 CPU 的扩展的策略对象定义。图 3 按照该策略在虚拟应用程序构建器中的显示方式来显示它。使用图 3 中所示的策略界面,用户可以创建一个扩展策略,根据 VM CPU 的使用情况对 VSP 实例 VM 节点进行扩展。如图 3 所示,默认策略定义可以命令系统执行扩展,如果 CPU 使用率超过 80% 则扩大,如果小于 10% 则缩小。

在我们的 WebSphere 集群 VSP 用例中,如果所有自定义节点 VM 的 CPU 使用率超过 80%,那么这个扩展策略就会扩大自定义节点 VM,小于 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 扩展策略
VSP Scaling Manager CPU 扩展策略

步骤 3:创建一个拓扑模板,将应用程序模型转化为一个拓扑文档

PureApplication System IaaS 层使用拓扑文档来创建 VAP 实例。拓扑文档是从应用程序模型生成的。在使用虚拟应用程序构建器创建 VAP 时,该模型由 PureApplication 系统在幕后创建。您可以使用清单 3 中的速率模板,将 “VSP Scaling Manager ” VAP 应用程序模型转化为一个拓扑文档。清单 3 中的模板会创建一个名为 “clone” 的角色,以及以下参数值:VSP 实例详细信息(通过 步骤 1 获取)和策略定义(通过 步骤 2 获取)。这些参数值将用在 “VSP 自动扩展管理器” 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 使用率的指标元数据)。
  • 一个脚本(参见所提供的 代码样例 中的 cpuutil.sh),用于从 VSP 实例 VM 节点中收集指标。
  • 指标元数据和收集脚本的注册代码。清单 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 Clone 和 Delete API 添加或者删除 VSP 实例 VM 节点。

步骤 5:创建 VSP 实例 VM 节点扩展脚本

您可以使用 Python 脚本来添加或者删除 VSP 实例 VM 节点。Python 脚本由监控脚本 cpuutil.sh 使用 PureApplication System 部署人员命令行工具进行触发。清单 7 和清单 8 显示了用来添加和删除一个 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 系统环境中,以推动 VSP 的扩展。一旦导入该模型类型,就可以使用虚拟应用程序构建器创建一个新的 VAP,并部署新创建的 VAP。

图 4. WebSphere Cluster VSP 实例
WebSphere Cluster VSP 实例
WebSphere Cluster VSP 实例

图 5 显示了虚拟应用程序构建器中的 WebSphere Cluster Scaling Manager VAP。

图 5. WebSphere Cluster Scaling Manager 模式
WebSphere Cluster Scaling Manager 模式
WebSphere Cluster Scaling Manager 模式

在完成模式部署之后,就可以使用以下步骤来模拟扩展:

  1. 登录到 Deployment Manager 控制台。在现有的节点上创建新的服务器,执行一个完全的再同步,或者执行这个节点上的其他操作,增加自定义节点上的 CPU 使用率。
  2. 在监控脚本 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 使用率
虚拟系统实例节点的 CPU 使用率
虚拟系统实例节点的 CPU 使用率

图 7 显示了对自定义节点实例的添加。如果所有自定义节点实例的 CPU 使用率都超过 80%,则会创建新的 WebSphere VSP 自定义节点,直到达到最大值 10 个节点。当所有自定义节点实例的 CPU 使用率回落到 10% 以下,除了两个自定义节点实例以外,其他节点都将被删除。

图 7. WebSphere VSP 自定义节点扩展
WebSphere VSP 自定义节点扩展
WebSphere VSP 自定义节点扩展

结束语

在本文中,您了解了如何创建 VAP 模式类型来推动 VAP 实例 VM 节点的用户定义的自动扩展。使用这项技术,您可以利用用户定义的扩展策略以及最小值或 VSP 原值来自动扩展一个 VSP 实例 VM 节点。您还可以使用 VAP 仪表板来进一步监控 VSP 实例指标。该技术的缺点是需要用户输入 VSP 实例 VM 的用户凭据,并且只有能够访问 VSP 实例的 PureApplication System 用户才能部署 VAP Scaling Manager 实例。否则,部署人员 CLI 会无权添加或删除节点。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=970950
ArticleTitle=IBM PureApplication System 中虚拟系统模式实例的自动扩展
publish-date=05122014