目次


IBM PureApplicationで仮想システム・パターン・インスタンスを自律スケーリングさせる

仮想システム・パターン・スケーリング・マネージャーのパターン・タイプを作成するテクニック

Comments

はじめに

仮想システム・パターン(VSP)モデルは、クラウドで稼動するワークロードをミドルウェア・イメージのトポロジーとして定義します。 VSP のミドルウェア・ワークロード・トポロジーは、「パート」と呼ばれる1つか複数のミドルウェア・イメージから構成されます。各ワークロード・モデルのそれぞれのパートは、静的スケーリングを構成することが可能です。 IBM PureApplication System(以下 PureApplication System)は、インスタンスをデプロイするタイミングで、パートのスケーリング設定に従い、いくつかの仮想マシン(VSP インスタンスの VM ノード)からなる VSP インスタンスを作成します。しかし、 VSP モデルはスケーリング・ポリシーによる自律スケーリングはサポートしていません。

この記事では、スケーリング・マネージャーとして機能する仮想アプリケーション(VAP)パターンを作成し、ユーザー定義のポリシーに応じて、動的に VSP の VM ノードを追加・削除する方法を紹介します。 VAP パターン・タイプとプラグインの作成に必要な VAP プラグイン・デベロップメント・ツールキットの使い方を知っており、 VAP スケーリング・フレームワークを理解されていることを記事の前提としています。 VAP スケーリング・フレームワークの詳細については Scalability and elasticity for virtual application patterns in IBM PureApplication System をご参照ください。

VSP インスタンスを自律スケールさせるVAPパターン・タイプを作成する

「VSP スケーリング・マネージャー」として機能する VAP パターン・タイプを作成する方法について説明します。この VAP パターン・タイプはマネージャーとして機能し、 VSP インスタンスの VM ノードの自律スケーリングを実現します。このテクニックは、VAPのモニタリングとポリシーのフレームワーク、そして VSP の Clone API を活用しています。このパターン・タイプは、以下のステップで作成していきます。

  1. VSPインスタンスの詳細を設定するための VAP アプリケーション・モデル・メタデータの作成
  2. スケーリング・ポリシーを定義するためのポリシー・オブジェクトの作成
  3. アプリケーション・モデルをトポロジー・ドキュメントに変換するためのトポロジー・テンプレートの作成
  4. VSP インスタンスをモニタリングするための、モニタリング・メタモデルとモニタリング・スクリプトの作成
  5. VSP インスタンスの VM ノードをスケーリングさせるためのスクリプトの作成

ユース・ケース

この記事では、自律スケーリングさせるVSPとして、 WebSphere Application Server のクラスター環境の VSP を利用します。図1にあるように、 WebSphere Application Server クラスター環境の VSP には、デプロイメント・マネージャー・パート、カスタム・ノード・パート、 IBM HTTP サーバー・パートが含まれます。この後の節では、システム CPU 使用率に応じて、カスタム・ノードを自律スケールさせる方法を紹介します。このテクニックを利用することによって、ユーザーが定義したいかなるスケーリングの計測値に基づいてでも、いかなるVSPパートでもスケールさせることができます。

図1.WebSphere クラスター環境の VSP

ステップ1: VAP アプリケーション・モデル・メタデータの作成

VSP インスタンスのVMノードをスケールさせるために、以下の情報が必要です。

  • VSP インスタンス名
  • VSP ノード・パート名
  • 稼動中のインスタンスにアクセスするために必要なユーザー認証情報
  • VSP コマンド・ライン API(deployer コマンド・ライン API)にアクセスするために必要なユーザー認証情報

VSP インスタンス名と VSP ノード・パート名は、スケールさせる対象をユニークに特定するために必要です。今回の WebSphere クラスター環境の VSP のユース・ケースでは、 VSP ノード・パート名はカスタム・ノード、 VSP インスタンス名はデプロイされた WebSphere クラスター環境のVSPインスタンスの名前です。インスタンス・ユーザー認証情報は、スケール対象の VM で(ssh を利用して)モニタリング・スクリプトを実行するために必要になります。 deployer ユーザー認証情報は、モニターした値に基づいて VM を追加削除する API を実行するために必要になります。

VAP コンポーネント・オブジェクトの属性を利用することで、必要な情報をユーザーに入力させることができます。コンポーネント・オブジェクト属性はVAPアプリケーション・モデル・メタデータを利用して作成されます。リスト1はアプリケーション・モデル・メタデータです。仮想アプリケーション・パターン・エディターでこれらの属性を表示すると図2のようになります。

リスト1.VSP スケーリング・マネージャー属性メタモデル(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 スケーリング・マネージャー属性

ステップ2: スケーリング・ポリシーを定義するポリシー・オブジェクトの作成

VAP ポリシー・フレームワークを利用して、 VSP 自律スケーリング・ポリシーを作成します。 VAP ポリシー・フレームワークでは、 VAP アプリケーション・モデル・メタデータを利用してポリシー・オブジェクトを定義します。 VAP アプリケーション・モデル・メタデータを利用してポリシーを定義する方法の詳細は Scalability and elasticity for virtual application patterns in IBM PureApplication System を参照してください。

リスト2は CPU ベース・スケーリングのポリシー・オブジェクト定義です。このポリシーを仮想アプリケーション・エディターで表示すると図3のようになります。図3に表示されているようなポリシー・インターフェースを利用することで、 VM の CPU 使用率に応じて VSP インスタンスの VM ノードをスケールさせるスケーリング・ポリシーを作成できます。図3に表示されているデフォルトのポリシー定義では、 CPU 使用率が80%を超えるとシステムがスケール・アウトし、 CPU 使用率が10%以下になるとスケール・インするようにシステムに指示を出します。

今回の WebSphere クラスター環境の VSP のユース・ケースでは、全てのカスタム・ノード VM の CPU 使用率が80%以上となっている場合にカスタム・ノードをスケール・アウトさせ、全てのカスタム・ノードの CPU 使用率が10%以下となっている場合にスケール・インさせます。

リスト2.VSP スケーリング・マネージャー 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スケーリング・マネージャー CPU スケーリング・ポリシー

ステップ3: アプリケーション・モデルをトポロジー・ドキュメントに変換するためのトポロジー・テンプレートの作成

PureApplication System の IaaS 層は、トポロジー・ドキュメントを利用して、 VAP インスタンスを生成しています。トポロジー・ドキュメントはアプリケーション・モデルから作成され、アプリケーション・モデルは仮想アプリケーション・パターン・エディターを用いて VAP を作成している際に裏で PureApplication System によって生成されます。リスト3に示された Velocity テンプレートを利用して、「 VSP スケーリング・マネージャー」 VAP アプリケーション・モデルをトポロジー・ドキュメントに変換することができます。リスト3に示されたテンプレートでは「クローン」と呼ばれるロールを生成し、その際、(ステップ 1の手順で取得した)VSP インスタンスの詳細と (ステップ 2の手順で取得した)ポリシー定義を利用します。これらのパラメーターは「 VSP スケーリング・マネージャー」のVAPライフ・サイクルスクリプトの中で、 VSP インスタンスをスケールさせるために利用されます。

リスト3. VSP スケーリング・マネージャー・トポロジー・テンプレート(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 ノードのスケーリングが行われます。 VSP インスタンスの VM ノードのモニタリングには、 VAP モニタリング・フレームワークを利用することができます。 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を超えたら、10ノードに到達するまで、新たに WebSphere VSP のカスタム・ノードのインスタンスが作成されます。
  • ポリシーで定義した値よりも取得した値が小さい場合、ポリシーで定義された最小数まで、全てのノードが削除されていきます。今回のケースでは、カスタム・ノードのCPU使用率が10%以下の場合、2つの WebSphere VSP カスタム・ノードを除いて、全てが順次削除されます。
  • 最後にスクリプトはVAPモニタリング・フレームワークに計測データを戻し、計測データはデプロイメント・コンソールに表示されます。

スクリプトは、モニタリング・フレームワークによって、一定間隔で呼び出されます。呼出し間隔は、モニタリング・メタデータ(リスト4参照)に定義された update_interval パラメーターの値に従います。スクリプトでは VAP モニタリング・フレームワークを利用することで、簡単に VSP インスタンスの VM ノードをスケールさせています。次の節では VSP インスタンスの VSP Clone API と Delete API を利用して VM ノードを追加・削除する方法を説明します。

ステップ5: VSP インスタンスの VM ノード・スケーリングスクリプトの作成

Python スクリプトを利用して、 VSP インスタンスの VM ノードの追加・削除を行います。 Phython スクリプトは、 PureApplication System の deployer コマンド・ライン・ユーティリティを利用して、モニタリング・スクリプト(cpuutil.sh)によって呼び出されます。リスト7とリスト8は、 VSP インスタンスの VM ノードを追加削除するスクリプトです。このスクリプトでは、 VSP の virtual system オブジェクトと virtual machine オブジェクト、そしてそれらのクローンを利用しています。また 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

上記の5ステップで、本質的に以下のことを実行したことになります:

  • VAP ポリシー・オブジェクトを利用して、ユーザー定義のスケーリング・ポリシーを作成しました
  • VAP モニタリング・フレームワークを利用して VSP インスタンスの VM 監視を行い、計測した値に応じて、 VSP インスタンスの VM を動的に自律スケーリングさせました
  • VSP コマンド API によって提供されているClone API と Delete APIを利用し、 VSP インスタンスの新しい VM を作成したり、既存の VM を削除したりしました

ユース・ケースをテストする

この節では、 WebSphere クラスター環境のカスタム・ノードをスケーリングさせる今回のユース・ケースのテスト方法を説明します。このユース・ケースをテストするためには、まず WebSphere クラスター環境の VSP インスタンスを作成する必要があります。図4は WebSphere クラスター環境の VSP インスタンスです。また VSP スケーリングを制御する VAP パターン・タイプも作成する必要があります。この記事で提供しているサンプル・コードに、 PureApplication System 環境にインポートすることができる VAP パターン・タイプ(vsysscalingmgr)があります。インポートしたら、アプリケーション・パターン・エディターを利用して新しく仮想アプリケーション・パターンを作成し、作成したパターンをデプロイしてください。

図4.WebSphere クラスター環境の VSP インスタンス

図5は、仮想アプリケーション・パターン・エディターの WebSphere クラスター・スケーリング・マネジャーです。

図5.WebSphere クラスター・スケーリング・マネジャー・パターン

パターンがデプロイされたら、以下のステップで、スケーリングをシミュレートすることができます。

  1. デプロイメント・マネジャーの管理コンソールにログインします。既存ノード上に新しいサーバーを作成し完全な再同期を実行するか、カスタム・ノードで CPU 使用率が上がるような他の処理を行います。
  2. または、リスト9のモニタリング・スクリプ cpuutil.sh にあるように、コメントを外すことで単体テストを行うことができます。コメントアウトを行うと CPU 使用率として85というダミーの CPU 使用率を返し、スクリプトの後続タスクが実行されます。スケール・インさせたい場合には、再びコメント・アウトしてください。
    リスト9.VSPスケーリング・マネージャー・パターンをテストするためにアンコメントする行
    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%越えるときは、最大10ノードに達するまで、新たな WebSphere VSP のカスタム・ノードが追加されます。全てのカスタム・ノード・インスタンスの CPU 使用率が10%以下となる時には、2つのカスタム・ノードになるまで削除されます。

図7.WebSphere VSP カスタム・ノード・スケーリング

まとめ

この記事では、 VAP パターン・タイプを作成し、ユーザー定義情報に基づいて VSP インスタンスの VM ノードを自律スケーリングさせる方法を学びました。このテクニックを利用すれば、あなたの VSP に最小限の変更を行うかまたは変更なしで、ユーザー定義のスケーリング・ポリシーを利用して、 VSP インスタンスの VM ノードを自律スケーリングさせることができます。さらには VAP のダッシュボードで、 VSP インスタンスの計測した値を確認することもできます。 このテクニックの短所は、 VSP インスタンス VM ノードのユーザー認証情報をユーザーが指定する必要がある点であり、 VSP インスタンスを操作できる権限のある PureApplication System ユーザーだけが、 VAP スケーリング・マネージャー・インスタンスをデプロイできる点です。 それ以外の場合には、 deployer CLI にはノードを追加・削除する権限がありません。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=951045
ArticleTitle=IBM PureApplicationで仮想システム・パターン・インスタンスを自律スケーリングさせる
publish-date=11072013